Kubernetes配置AWS SSL证书 解决Ingress重启证书丢失问题
核心问题
你的配置失效、重启后证书丢失是两个配置错误导致的:
- AWS负载均衡器相关的注解前缀写错了。你现在用的
nginx.ingress.kubernetes.io/是Nginx Ingress自身的注解标识,云厂商LB的配置注解必须用service.beta.kubernetes.io/aws-load-balancer-前缀,前缀不对控制器根本识别不到你的SSL配置,重启时自然会按默认值重置。 - 端口配置逻辑冲突。你给443端口配置了SSL,但后端协议和targetPort都指向了Ingress的HTTPS端口,相当于LB和后端做双重加密,和你截图里AWS侧LB终结SSL的配置逻辑不匹配。
可直接复用的持久化配置
把你现有的Service配置替换成下面的内容,注意替换成你环境实际的证书ARN、命名空间和Pod选择器标签:
apiVersion: v1 kind: Service metadata: name: nginx-ingress namespace: ingress-nginx # 替换为你实际部署Nginx Ingress控制器的命名空间 annotations: # 所有AWS LB配置统一用官方要求的注解前缀 service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:替换为证书所在区域:你的AWS账号ID:certificate/证书实际ID service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443" # 以下为可选优化配置,可按需保留 service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60" spec: type: LoadBalancer selector: # 这里的标签必须和Nginx Ingress控制器Pod的标签完全匹配,否则选不到后端 app.kubernetes.io/name: ingress-nginx app.kubernetes.io/component: controller ports: - name: http port: 80 targetPort: http protocol: TCP - name: https port: 443 # SSL卸载在LB层完成,后端直接走HTTP端口即可,不需要重复加密 targetPort: http protocol: TCP
操作注意事项
- 应用新配置前先删除旧的异常Service:执行
kubectl delete svc nginx-ingress -n <你的Ingress命名空间>,避免旧配置残留冲突 - 不要手动固定nodePort,手动指定的端口如果在Service重建时被其他资源占用,会触发LB配置重置
- 确认你引用的ACM证书和K8s集群在同一个AWS区域,跨区域证书无法被LB正常挂载
- 配置生效后无论重启Ingress控制器、重建Service,LB都会自动加载对应SSL证书,不需要手动重新配置

内容的提问来源于stack exchange,提问作者hernesupp
相关产品推荐
相关产品推荐

