You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes集群中Traefik与Ingress间端到端流量加密方案咨询

实现Traefik到后端服务的端到端TLS加密

我之前也遇到过完全一样的需求——不想让Traefik把前端的HTTPS请求降级成HTTP转发给后端,要实现从用户浏览器到后端服务的全程加密。下面是我验证过的可行方案,分三个核心步骤:

1. 给后端服务配置内部TLS证书

首先得让你的后端服务本身支持HTTPS,因为Traefik要以HTTPS方式和它通信。推荐用cert-manager来管理集群内部的自签证书,这样不用手动维护证书:

  • 先创建一个集群级的内部CA Issuer(或者命名空间级的Issuer,看你的需求):
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: internal-ca
    spec:
      selfSigned: {}
    
  • 然后给后端服务的集群域名(格式为服务名.命名空间.svc.cluster.local,比如my-app.default.svc.cluster.local)签发证书:
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: my-app-tls
      namespace: default
    spec:
      secretName: my-app-tls-secret
      issuerRef:
        name: internal-ca
        kind: ClusterIssuer
      commonName: my-app.default.svc.cluster.local
      dnsNames:
      - my-app.default.svc.cluster.local
      isCA: false
      privateKey:
        algorithm: RSA
        size: 2048
      usages:
      - server auth
    
  • 最后把这个证书挂载到你的后端Pod里,配置服务监听HTTPS端口(比如443),具体配置要看你的后端技术栈(比如Nginx、Spring Boot等)。

2. 配置Traefik信任后端证书(可选但推荐)

如果后端用的是自签内部证书,Traefik默认会拒绝这个证书,所以需要让它信任我们的内部CA:

  • 把internal-ca的CA证书导出成Secret:

    kubectl get secret internal-ca -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
    kubectl create secret generic traefik-trust-ca --from-file=ca.crt=ca.crt
    
  • 修改Traefik的Deployment,把这个Secret挂载到Traefik的信任目录里(比如/etc/traefik/certs),然后在Traefik的静态配置里添加:

    serversTransport:
      rootCAs:
        - /etc/traefik/certs/ca.crt
    

    如果你用Helm安装Traefik,可以通过values.yaml里的additionalArguments或者serversTransport配置项来设置。

    要是你只是在测试环境,也可以临时关闭证书验证(生产环境绝对不推荐),通过Ingress注解实现:

    traefik.ingress.kubernetes.io/serverstransport.insecureSkipVerify: "true"
    

3. 修改Ingress资源,指定后端协议为HTTPS

最后一步是告诉Traefik,转发请求到后端时要用HTTPS协议,而不是默认的HTTP:

  • 你的Ingress资源需要保留前端的TLS配置(比如Let's Encrypt的证书),然后添加关键注解,同时指定后端的HTTPS端口:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
      namespace: default
      annotations:
        # 告诉Traefik用HTTPS访问后端服务
        traefik.ingress.kubernetes.io/service.protocol: https
        # 如果后端端口不是默认的443,指定端口号
        traefik.ingress.kubernetes.io/service.port: "443"
        # 可选:如果没配置全局信任CA,这里单独关闭验证(仅测试用)
        # traefik.ingress.kubernetes.io/serverstransport.insecureSkipVerify: "true"
    spec:
      tls:
      - hosts:
        - my-app.example.com
        secretName: my-app-external-tls # 你的外部HTTPS证书(比如Let's Encrypt)
      rules:
      - host: my-app.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app-service
                port:
                  number: 443
    

这样配置后,用户浏览器发HTTPS请求到Traefik,Traefik会用HTTPS把请求转发到你的后端服务,实现真正的端到端加密。

内容的提问来源于stack exchange,提问作者Valentin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:05:18