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

Azure AKS部署Nginx Controller时SSL证书验证异常求助

解决方案步骤

1. 定位问题核心

日志明确显示当前使用的SSL证书是给example-aks-dev.brazilsouth.cloudapp.azure.com签发的,但实际访问的是Azure Front Door域名endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net,域名不匹配是导致访问报错的直接原因。证书顺序问题是次要的,先解决域名匹配问题。

2. 生成匹配Front Door域名的证书

你已经部署了cert-manager,优先用它生成合法证书;如果只是测试,也可以手动生成自签名证书。

方法一:用cert-manager生成Let's Encrypt证书(推荐)

你现有letsencrypt Secret,说明之前配置过cert-manager,现在创建对应域名的证书资源:

  • 创建fd-cert.yaml文件:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: fd-example-cert
  namespace: ingress-nginx
spec:
  secretName: fd-example-cert-tls
  issuerRef:
    name: letsencrypt
    kind: ClusterIssuer # 若之前用的是Issuer,改成对应类型
  commonName: endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net
  dnsNames:
  - endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net
  acme:
    config:
    - http01:
        ingressClass: nginx
      domains:
      - endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net
  • 应用配置:kubectl apply -f fd-cert.yaml -n ingress-nginx
  • 检查证书状态:kubectl get certificates -n ingress-nginx,等状态变成Ready即可。

方法二:手动生成自签名证书(仅测试用)

如果只是临时测试,手动生成匹配域名的证书:

  • 生成证书文件:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net"
  • 创建Kubernetes Secret:
kubectl create secret tls fd-example-cert-tls --key tls.key --cert tls.crt -n ingress-nginx

3. 配置Ingress使用新证书

取消Ingress资源中tls段的注释,指定刚生成的Secret:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-ingress-name
  namespace: your-app-namespace
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net
    secretName: fd-example-cert-tls # 替换成你生成的Secret名称
  rules:
  - host: endpoint-example-dev-h2a3adekfjkxgrfk.a01.azurefd.net
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: your-app-service
            port:
              number: 80
  • 应用更新:kubectl apply -f your-ingress.yaml

4. 处理证书顺序问题(若后续仍报错)

如果之后仍出现证书验证错误,检查证书链顺序:

  • 导出证书:
kubectl get secret fd-example-cert-tls -n ingress-nginx -o jsonpath='{.data.tls\.crt}' | base64 -d > tls.crt
  • 打开tls.crt确认顺序:必须是叶子证书 → 中间证书 → 根证书(根证书可省略,浏览器一般内置)
  • 顺序不对的话,重新拼接证书内容,保存为new-tls.crt,然后更新Secret:
kubectl create secret tls fd-example-cert-tls --key tls.key --cert new-tls.crt -n ingress-nginx --dry-run=client -o yaml | kubectl apply -f -

5. 清理并验证Ingress状态

  • 删除已完成的旧Pod:kubectl delete pod dev-example-ingress-nginx-controller-7cf9494bb7-7jbw4 -n ingress-nginx
  • 查看新Pod日志确认无证书错误:kubectl logs dev-example-ingress-nginx-controller-5f46d75ff-7tsbp -n ingress-nginx

内容的提问来源于stack exchange,提问作者Rodrigo Alarcón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:27:02