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

AKS集群Web App Routing SSL证书未生效问题排查求助

AKS Web App Routing SSL证书未生效排查及自动续期方案

问题背景

已在AKS集群部署Pod、Service和Ingress,使用Web App Routing配置SSL证书,但访问https://dev.perfai.us/时浏览器未显示SSL生效。具体操作及状态如下:

  1. 手动创建SSL证书并上传至Azure Key Vault,更新Ingress配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-webui
  namespace: perfai
  annotations:
#    kubernetes.io/ingress.class: azure/application-gateway
    kubernetes.azure.com/tls-cert-keyvault-uri: https://xxxxxxxxxxx/certificates/WebUI-TLS-Certificate
spec:
  ingressClassName: webapprouting.kubernetes.azure.com
  rules: 
  - host: "dev.perfai.us"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
            service:
               name: webui
               port:
                  number: 8080
  tls:
  - hosts:
    - dev.perfai.us
    secretName: keyvault-ingress-webui
  1. 相关资源状态:
# Pod状态
kubectl get po -n perfai
NAME                                      READY   STATUS    RESTARTS   AGE
keyvault-ingress-webui-5d897495bc-pswmv   1/1     Running   0          4h31m
learned-models-665d45f9f8-85znk           1/1     Running   0          3h38m
webui-dc9f8f649-cvc6j                     1/1     Running   0          4h33m
webui-dc9f8f649-m6k77                     1/1     Running   0          3h38m

# Ingress状态
kubectl get ingress -n perfai
NAME            CLASS                                HOSTS           ADDRESS        PORTS     AGE
ingress-webui   webapprouting.kubernetes.azure.com   dev.perfai.us   13.xx.xx.xx   80, 443   4h38m

# Secret状态
kubectl get secret -n perfai
NAME                     TYPE                DATA   AGE
keyvault-ingress-webui   kubernetes.io/tls   2      4h39m
  1. 补充信息:
  • Service:webui为ClusterIP类型,端口8080正常关联后端Pod
  • Ingress:已配置host为dev.perfai.us,开放80/443端口,地址指向集群负载均衡IP
  • Azure Key Vault:WebUI-TLS-Certificate已上传且状态启用
  • 域名:Godaddy注册的dev.perfai.us已配置A记录指向Ingress的负载均衡IP

需排查SSL未生效问题,并咨询Azure中类似GCP的证书自动续期实现方法(GCP通过添加注解networking.gke.io/managed-certificates自动完成)。


一、SSL证书未生效排查步骤

  • 权限校验:确认Web App Routing的托管标识/服务主体拥有Key Vault的Certificate Get和Secret Get权限,无权限会导致证书无法同步到K8s Secret。
  • 证书内容验证:检查Key Vault中的证书是否包含完整私钥(上传时需选择带私钥的PEM/PFX文件),执行命令查看K8s Secret内容:
    kubectl get secret keyvault-ingress-webui -n perfai -o yaml
    
    确认tls.crt和tls.key字段非空且内容正确。
  • Ingress配置检查:
    • 注解kubernetes.azure.com/tls-cert-keyvault-uri需指向证书完整URI(确认路径和证书名称无误)。
    • 确认ingressClassName与Web App Routing组件的class一致(webapprouting.kubernetes.azure.com)。
    • TLS段的hosts需与Ingress规则中的host完全匹配,secretName需与同步的Secret名称一致。
  • DNS与端口验证:
    • 执行nslookup dev.perfai.us确认解析IP与Ingress的ADDRESS完全一致。
    • 用curl -v https://dev.perfai.us测试,查看输出中的证书信息,确认是否为上传的证书;同时检查443端口是否可访问。
  • 组件日志排查:查看Web App Routing控制器Pod日志,搜索证书同步相关错误:
    kubectl logs -n kube-system -l app=webapprouting-nginx-ingress
    

二、Azure中实现SSL证书自动续期

方案1:Cert Manager + Let's Encrypt(Web App Routing场景推荐)

  1. 安装Cert Manager
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
    
  2. 创建ClusterIssuer
    关联Let's Encrypt,配置HTTP01挑战:
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: your-email@example.com # 接收续期通知
        privateKeySecretRef:
          name: letsencrypt-prod
        solvers:
        - http01:
            ingress:
              class: webapprouting.kubernetes.azure.com
    
  3. 创建Certificate资源
    自动颁发并续期证书:
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: dev-perfai-us-cert
      namespace: perfai
    spec:
      secretName: dev-perfai-us-tls
      issuerRef:
        name: letsencrypt-prod
        kind: ClusterIssuer
      dnsNames:
      - dev.perfai.us
    
  4. 更新Ingress
    替换为Cert Manager生成的Secret:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-webui
      namespace: perfai
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: "dev.perfai.us"
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: webui
                port:
                  number: 8080
      tls:
      - hosts:
        - dev.perfai.us
        secretName: dev-perfai-us-tls
    
    Cert Manager默认提前30天自动续期证书。

方案2:Azure托管证书(配合Application Gateway Ingress Controller)

若使用AGIC替代Web App Routing,可直接使用Azure托管证书自动续期:

  1. 部署AGIC并关联Application Gateway。
  2. 在Azure门户/CLI创建托管证书,绑定到Application Gateway。
  3. 更新Ingress配置:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-webui
      namespace: perfai
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
        appgw.ingress.kubernetes.io/ssl-certificate: /subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.Network/applicationGateways/<AG名称>/sslCertificates/<证书名称>
    spec:
      rules:
      - host: "dev.perfai.us"
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: webui
                port:
                  number: 8080
      tls:
      - hosts:
        - dev.perfai.us
    
    Azure托管证书有效期1年,提前60天自动续期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:37:10