K8S配置Traefik IngressRoutes支持TLS

冰山一角 2024-07-23 ⋅ 42 阅读

介绍

在Kubernetes(简称K8S)集群中,Traefik是一种常用的边缘路由器和负载均衡器,用于管理进入集群的流量。Traefik内置了丰富的功能,可以轻松配置各种路由规则和负载均衡策略。

在本文中,我们将介绍如何配置Traefik IngressRoutes支持TLS,即为Ingress规则启用HTTPS加密连接。通过这样的配置,我们可以为集群中的不同应用程序提供安全的访问。

TLS证书生成

在配置Traefik IngressRoutes之前,我们需要生成TLS证书,以便在加密连接时使用。这里我们将使用cert-manager工具来自动管理证书的生成和更新。

首先,确保cert-manager已经在Kubernetes集群中安装并运行。可以通过以下命令来检查:

$ kubectl get pods -n cert-manager

如果cert-manager正在运行,可以继续执行以下步骤。否则,需要先安装cert-manager。

  1. 创建一个用于存储证书申请的命名空间:
$ kubectl create namespace cert-manager
  1. 添加cert-manager Helm仓库:
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
  1. 安装cert-manager:
$ helm install \
    cert-manager \
    --namespace cert-manager \
    --version v1.5.4 \
    jetstack/cert-manager
  1. 确认cert-manager已经正确安装:
$ kubectl get pods -n cert-manager
  1. 创建一个TLS证书管理器:
$ kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: cert-manager
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
      - http01:
          ingress:
            class: traefik
EOF

这将创建一个ClusterIssuer资源,用于定义证书生成的配置。

  1. 验证证书管理器是否正常工作:
$ kubectl describe clusterissuer -n cert-manager letsencrypt-prod

如果输出中显示正常,证明证书管理器已经正确配置。

配置Traefik IngressRoutes

现在我们可以配置Traefik IngressRoutes以支持TLS加密连接了。

  1. 创建一个IngressRoute资源文件,例如my-app-ingressroute.yaml,并添加以下内容:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: my-app-ingressroute
  namespace: my-app-namespace
spec:
  entryPoints:
    - websecure
  routes:
    - kind: Rule
      match: Host(`my-app.example.com`)
      services:
        - name: my-app-service
          port: 80
  tls:
    secretName: my-app-tls-secret

在这个示例中,我们指定了一个websecure入口点,它表示使用HTTPS加密连接。接下来,我们定义了一条规则,匹配主机my-app.example.com并将流量转发到名为my-app-service的后端服务。最后,我们指定了一个TLS密钥和证书的密钥名字,用于加密连接。

  1. 使用kubectl命令创建IngressRoute:
$ kubectl apply -f my-app-ingressroute.yaml

这将创建一个IngressRoute资源,并配置Traefik以支持TLS加密连接。

  1. 验证IngressRoute是否已经正常配置:
$ kubectl get ingressroute -n my-app-namespace

如果输出中显示IngressRoute已经创建并且状态正常,证明配置成功。

结论

通过配置Traefik IngressRoutes支持TLS,我们可以为Kubernetes集群中的应用程序提供安全的访问。通过使用cert-manager管理TLS证书的生成和更新,我们能够自动化这个过程,轻松地更新证书并保持连接的安全性。

希望本文对你有所帮助,如果你有任何问题或疑问,请随时留言。感谢阅读!


全部评论: 0

    我有话说: