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

禁用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代理时仍能正常访问

  1. 替换为公共可信证书:放弃使用Cloudflare Origin CA证书,改为在AWS ACM中申请针对stuff.domain.stf(或*.domain.stf)的免费公共证书,AWS ACM会自动完成域名验证(若域名托管在Route53可自动验证,否则需手动添加DNS验证记录)。
  2. 更新Ingress配置:将Ingress注解中的alb.ingress.kubernetes.io/certificate-arn替换为新申请的ACM证书ARN。
  3. 保持Cloudflare TLS模式:继续使用「Full (strict)」模式,此时无论是否开启代理,证书都能同时被浏览器和Cloudflare信任。

场景2:仅需开启Cloudflare代理时正常访问

无需修改现有证书配置,但需明确:关闭代理时直接访问ALB的场景不适用于普通用户,仅能通过手动给浏览器导入Cloudflare根证书临时测试,不适合生产环境。

额外配置检查

  1. 证书域名匹配:当前证书stuff.stf和*.stuff.stf无法覆盖Ingress中的stuff.domain.stf,更换证书时需确保证书域名包含stuff.domain.stf或其通配符*.domain.stf。
  2. 强制HTTPS跳转:建议在Ingress注解中添加alb.ingress.kubernetes.io/ssl-redirect: "443",强制将HTTP请求重定向到HTTPS,避免明文访问风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:27:42