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

在AWS上使用Nginx Ingress Controller配置LB TLS终止遇阻

AWS Nginx Ingress LB终止TLS失效及访问不稳定问题解决

问题现象

按AWS Nginx Ingress官方文档配置负载均衡器(LB)终止TLS:绑定ACM证书、配置VPC CIDR,Ingress Controller服务状态正常,AWS控制台显示LB已绑定目标证书,但出现以下异常:

  • http://foobar.com 访问时偶尔正常,刷新后无法打开
  • https://foobar.com 提示「无法解析主机」,完全未实现LB终止TLS后转发流量到后端服务的预期效果
  • 对Pod做kubectl port-forward测试:当Pod的containerPort设为8080时,首次请求正常,后续请求全部失败;改为80后,多次请求均稳定正常

排查过程

  1. 确认Ingress Controller的Service资源状态正常,Endpoint关联无异常
  2. 核对AWS控制台中LB的证书绑定、监听规则配置,确认符合文档要求
  3. 验证ClusterIP Service及Ingress规则的YAML配置,无语法或端口映射错误
  4. 通过port-forward直接访问Pod,定位到containerPort的配置差异是核心变量

根因分析

  • 当containerPort配置为8080时,Nginx Ingress Controller的后端健康检查逻辑与非80端口的适配存在隐性问题:LB的健康检查会频繁标记后端Pod为「不健康」,导致流量分发不稳定,出现http访问时好时坏的情况
  • https访问的「无法解析主机」并非真的DNS问题,而是LB终止TLS后,流量无法通过Ingress Controller正确转发到后端Pod——containerPort的非标准配置加剧了转发链路的异常,使得DNS解析后的流量无法正常到达服务
  • 将containerPort改为80后,Ingress Controller的端口映射、健康检查逻辑与后端服务完全匹配,流量转发链路恢复稳定,LB的TLS终止配置也能正常生效

解决方案

  1. 修改Pod的Deployment配置,将containerPort调整为80:
    containers:
    - name: httpd
      image: httpd
      ports:
      - containerPort: 80  # 替换原8080配置
    
  2. 同步更新ClusterIP Service的targetPort,确保指向Pod的80端口:
    ports:
    - port: 80
      targetPort: 80
    
  3. 重新部署资源:
    kubectl apply -f deployment.yaml
    kubectl apply -f service.yaml
    
  4. 验证效果:
    • 多次刷新http://foobar.com,访问稳定正常
    • https://foobar.com正常加载,确认LB已完成TLS终止并转发流量到后端服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:45:41