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

更新Ingress Nginx Controller的ACM SSL证书致HTTPS连接故障

环境配置

我们的Nginx Ingress Controller与AWS负载均衡器配置如下:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: xxxx
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Local
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: LoadBalancer

Ingress资源示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  annotations:
    kubernetes.io/ingress.class: nginx
  namespace: dev
spec:
  rules:
    - host: test.domain.com
      http:
        paths:
          - path: /main
            pathType: Prefix
            backend:
              service:
                name: main
                port:
                  number: 8000

问题描述

更新LoadBalancer配置(修改Kubernetes Service的service.beta.kubernetes.io/aws-load-balancer-ssl-cert注解更换ACM SSL证书)后,新证书已成功关联到AWS Network Load Balancer,但HTTPS连接仍无法正常工作。只有删除并重建所有Ingress相关资源(控制器Pod、关联Job、负载均衡器)才能恢复正常。

尝试过重启Nginx Controller Pod,但问题依旧,怀疑ACM证书在Ingress Nginx Controller初始化时被缓存,导致负载均衡器更新证书后,控制器仍引用旧证书。

正确的ACM证书更新方式与后续操作

1. 证书更新的正确步骤

  • 直接修改Ingress Controller对应的LoadBalancer Service注解,把service.beta.kubernetes.io/aws-load-balancer-ssl-cert的值换成新ACM证书的ARN:
    kubectl annotate service ingress-nginx-controller -n ingress-nginx service.beta.kubernetes.io/aws-load-balancer-ssl-cert=<新证书ARN> --overwrite
    
  • 等待AWS自动完成NLB的证书更新,这个过程通常1-5分钟,可通过AWS控制台或CLI确认NLB监听器已关联新证书。

2. 解决控制器缓存问题的操作

当NLB证书更新完成但HTTPS仍异常时,无需删除重建所有资源,执行以下操作即可:

  • 强制滚动重启Ingress Controller Pod:重启Pod会让控制器重新加载配置,清除可能存在的证书缓存。
    kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx
    
  • 验证Nginx配置:进入控制器Pod查看当前SSL配置是否正确,确认新证书已被加载:
    kubectl exec -n ingress-nginx <controller-pod-name> -- nginx -T | grep -E 'ssl_certificate|ssl_certificate_key'
    
    注意:使用NLB时,Nginx控制器实际处理的是NLB转发的HTTP流量(NLB已完成SSL终止),但如果配置了SSL直通或其他特殊场景,需确保控制器的SSL配置同步更新。

3. 避免缓存问题的额外建议

  • 确保Ingress Controller使用官方稳定版本,旧版本可能存在证书缓存的已知问题。
  • 若使用了自定义Nginx模板,检查模板中是否存在硬编码的证书路径或缓存逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:16:01