为何配置aws-load-balancer-ssl-ports注解后NLB仍仅开放80端口?
问题解决:NLB仅开放80端口而非443的修复方案
问题根源
你当前的配置只给Service加了NLB相关注解,但APISIX Helm Chart默认仅暴露80端口,未定义443端口。NLB会自动关联Service中声明的端口,所以即便配置了SSL证书,也只会映射已存在的80端口。
修复步骤
1. 修改Helm Values,添加443端口配置
在ArgoCD应用的values中,给service添加ports字段,明确声明443端口(命名为https),同时按需保留80端口。修改后的完整配置片段如下:
service: type: LoadBalancer ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443 annotations: service.beta.kubernetes.io/aws-load-balancer-type: "nlb" service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tls service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: Environment=Prod service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:eu-north-1:.......... service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
2. 关键配置说明
ports字段:显式声明443端口并命名为https,让NLB识别该端口需要绑定SSL证书service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https":指定SSL证书应用到名为https的端口上,必须和ports中的端口名称完全一致targetPort: 443:确保Service将443流量转发到APISIX Pod的443端口(需确认APISIX Pod已启用443监听,若未启用需同步配置APISIX的SSL参数)
3. 同步ArgoCD应用
在ArgoCD控制台或通过命令行执行同步操作,等待应用更新完成后,检查AWS NLB的监听端口,此时应出现443端口(若不需要80端口,可删除ports中的http条目)。
额外验证
如果APISIX Pod本身未开启443监听,需在values中补充APISIX的SSL配置:
apisix: ssl: enable: true listen_port: 443
确保Pod能接收443端口的流量,避免NLB的443端口出现健康检查失败。
内容的提问来源于stack exchange,提问作者Yagel
相关产品推荐
相关产品推荐

