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

基于AWS ACM终止TLS的ALB Ingress Controller如何实现端到端加密?

AWS ALB Ingress Controller配置后端HTTPS加密后出现502错误

背景与问题

当前环境使用AWS ALB Ingress Controller作为Ingress入口,通过AWS ACM证书在负载均衡器层终止SSL,运行正常。为实现负载均衡器到集群内部的流量加密,执行以下操作后出现502网关错误:

  • 安装并配置Cert Manager
  • 为Ingress添加TLS Secret
  • 修改Ingress注解,将后端协议设为HTTPS:alb.ingress.kubernetes.io/backend-protocol: HTTPS

当前配置信息

Ingress配置(相关部分)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: HTTP
    alb.ingress.kubernetes.io/certificate-arn: real-cert-arn
    alb.ingress.kubernetes.io/group.name: public.monitor
    alb.ingress.kubernetes.io/group.order: "40"
    alb.ingress.kubernetes.io/healthcheck-path: /
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'
    alb.ingress.kubernetes.io/load-balancer-name: monitoring-public-qa
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-Res-2020-10
    cert-manager.io/cluster-issuer: cert-manager-r53-qa
    kubernetes.io/ingress.class: alb
spec:
  rules:
  - host: goldilocks.qa.realdomain.com
    http:
      paths:
      - backend:
          service:
            name: goldilocks-dashboard
            port:
              name: http
        path: /*
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - goldilocks.qa.realdomain.com
    secretName: goldilocks-qa-cert
status:
  loadBalancer:
    ingress:
    - hostname: real-lb-address.us-gov-west-1.elb.amazonaws.com

证书状态(正常)

[ec2-user@ip-10-17-2-102 ~]$ kubectl get cert -n goldilocks goldilocks-qa-cert -o yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: goldilocks-qa-cert
  namespace: goldilocks
  ownerReferences:
  - apiVersion: networking.k8s.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: Ingress
    name: goldilocks-dashboard
    uid: 2494e5be-e624-471b-afd3-c8d56f5dc853
  resourceVersion: "81003934"
  uid: d494a1ec-7509-474e-b154-d5db8ceb86c0
spec:
  dnsNames:
  - goldilocks.qa.realdomain.com
  issuerRef:
    group: cert-manager.io
    kind: ClusterIssuer
    name: cert-manager-r53-qa
  secretName: goldilocks-qa-cert
  usages:
  - digital signature
  - key encipherment
status:
  conditions:
  - lastTransitionTime: "2023-02-08T16:06:56Z"
    message: Certificate is up to date and has not expired

排查方向与解决方法

1. 后端Service端口不匹配

当前Ingress的service端口指向http,但后端协议改为HTTPS后,Service需对应提供HTTPS端口(如443),且Pod内部服务需监听该端口。

  • 检查Service配置:
    kubectl get svc goldilocks-dashboard -n goldilocks -o yaml
    
  • 若Service无HTTPS端口,需添加端口定义,或修改Ingress的service.port.name指向HTTPS端口。

2. 健康检查未适配HTTPS

后端协议改为HTTPS后,ALB默认健康检查仍用HTTP,会导致检查失败触发502。需修改健康检查协议:
在Ingress注解中添加:

alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS

若Pod的HTTPS端口非默认值,需额外指定:

alb.ingress.kubernetes.io/healthcheck-port: "443"

3. 后端服务未加载TLS证书

即使Cert Manager生成了Secret,Pod内部服务需加载该Secret中的证书/密钥以提供HTTPS服务。若不想依赖Let's Encrypt有效证书,可改用自签名证书:

  • 创建自签名ClusterIssuer,生成自签名证书
  • 将Secret挂载到Pod容器中,配置服务使用证书文件开启HTTPS

4. 网络访问限制

  • 检查ALB安全组是否允许访问集群内部的HTTPS端口(如443)
  • 检查Pod所在命名空间的网络策略,是否允许ALB节点IP访问Pod的HTTPS端口

5. 验证Ingress注解配置

确保已将alb.ingress.kubernetes.io/backend-protocol修改为HTTPS,原配置中该值仍为HTTP,需确认修改已生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:35:47