AWS ALB终止TLS后EKS容器出现目标TLS协商错误求解决方案
出现这个错误的核心原因是ALB尝试通过HTTPS协议与后端目标(你的应用Pod)建立连接,但你的应用仅监听HTTP的1429端口,导致TLS协商失败。以下是具体的排查和解决步骤:
显式配置Ingress的后端协议
AWS ALB Ingress Controller有时会根据端口或默认配置推断后端协议,你需要通过注解强制指定后端使用HTTP。在你的Ingress资源中添加以下注解:annotations: alb.ingress.kubernetes.io/backend-protocol: HTTP之后重新应用Ingress配置:
kubectl apply -f your-ingress.yaml,控制器会自动更新对应的目标组协议。验证目标组的协议配置
登录AWS控制台,找到ALB关联的目标组,检查目标组的"协议"字段是否为HTTP,端口是否为1429。如果目标组协议是HTTPS,说明之前的Ingress配置没生效,手动修改目标组协议为HTTP(或重新应用正确的Ingress配置让控制器自动修正)。确认Service与Pod的端口配置
检查你的Kubernetes Service资源,确保targetPort指向Pod的1429端口,且Service没有配置TLS相关的字段(因为你的应用是HTTP服务)。示例Service配置片段:spec: ports: - port: 80 # 这里是Service的端口,ALB会转发到这个端口再映射到targetPort targetPort: 1429 protocol: TCP同时确认Deployment中容器的
containerPort设置为1429,且应用确实在该端口监听HTTP请求。检查ALB监听器的转发规则
确认ALB的HTTPS 443监听器,其转发规则指向的是HTTP协议的目标组,而非HTTPS目标组。如果关联了错误的目标组,修改转发规则指向正确的目标组即可。修正目标组的健康检查配置
目标组的健康检查协议也需要与后端一致,设置为HTTP,端口1429,健康检查路径可以根据你的应用情况设置(比如/healthz或/)。如果健康检查用了HTTPS,同样会触发TLS协商错误。
内容的提问来源于stack exchange,提问作者giri

