禁用Cloudflare代理时AWS EKS ALB的TLS功能异常排查
问题:AWS EKS ALB 配合Cloudflare的TLS证书异常
问题背景
- Cloudflare配置了指向AWS ALB的CNAME记录
- Cloudflare TLS模式设置为「Full (strict)」
- 在Cloudflare创建了
stuff.stf和*.stuff.stf证书,已导入AWS ACM - 异常现象:CNAME关闭Cloudflare代理时,浏览器报
ERR_CERT_AUTHORITY_INVALID错误;开启代理后可正常访问
用到的K8s YAML配置
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-stuff namespace: api labels: app: stuff spec: replicas: 1 selector: matchLabels: app: stuff template: metadata: labels: app: stuff spec: containers: - name: stuff image: stuff.azurecr.io/stuff-master:12 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: stuff namespace: api labels: app: stuff spec: type: NodePort selector: app: stuff ports: - name: http port: 8080 targetPort: 8080 protocol: TCP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: stuff namespace: api annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTP": 8080}, {"HTTPS":443}]' alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:xxxxxxxxxxxxxxxxxxxx" spec: ingressClassName: alb rules: - host: stuff.domain.stf http: paths: - path: /stuff pathType: Prefix backend: service: name: stuff port: number: 8080
证书导入步骤
- 在Cloudflare为域名创建证书
- 下载Cloudflare的根证书
- 进入AWS控制台导入证书:
- 填入Cloudflare创建的证书及私钥
- 填入Cloudflare的链式证书
- 将导入后的证书ARN配置到ALB的Ingress注解中
问题分析与解决方案
核心原因
Cloudflare Origin CA签发的证书属于私有CA证书,未被主流浏览器的公共信任根列表收录。关闭Cloudflare代理时,用户浏览器直接与ALB建立TLS连接,无法识别该证书的签发权威,因此抛出ERR_CERT_AUTHORITY_INVALID错误;开启代理后,用户浏览器与Cloudflare节点通信(Cloudflare使用公共可信证书),而Cloudflare内部会信任自己签发的Origin CA证书,因此通信正常。
针对性解决方案
场景1:需要关闭Cloudflare代理时仍能正常访问
- 替换为公共可信证书:放弃使用Cloudflare Origin CA证书,改为在AWS ACM中申请针对
stuff.domain.stf(或*.domain.stf)的免费公共证书,AWS ACM会自动完成域名验证(若域名托管在Route53可自动验证,否则需手动添加DNS验证记录)。 - 更新Ingress配置:将Ingress注解中的
alb.ingress.kubernetes.io/certificate-arn替换为新申请的ACM证书ARN。 - 保持Cloudflare TLS模式:继续使用「Full (strict)」模式,此时无论是否开启代理,证书都能同时被浏览器和Cloudflare信任。
场景2:仅需开启Cloudflare代理时正常访问
无需修改现有证书配置,但需明确:关闭代理时直接访问ALB的场景不适用于普通用户,仅能通过手动给浏览器导入Cloudflare根证书临时测试,不适合生产环境。
额外配置检查
- 证书域名匹配:当前证书
stuff.stf和*.stuff.stf无法覆盖Ingress中的stuff.domain.stf,更换证书时需确保证书域名包含stuff.domain.stf或其通配符*.domain.stf。 - 强制HTTPS跳转:建议在Ingress注解中添加
alb.ingress.kubernetes.io/ssl-redirect: "443",强制将HTTP请求重定向到HTTPS,避免明文访问风险。
内容的提问来源于stack exchange,提问作者krebol
相关产品推荐
相关产品推荐

