AKS集群Web App Routing SSL证书未生效问题排查求助
AKS Web App Routing SSL证书未生效排查及自动续期方案
问题背景
已在AKS集群部署Pod、Service和Ingress,使用Web App Routing配置SSL证书,但访问https://dev.perfai.us/时浏览器未显示SSL生效。具体操作及状态如下:
- 手动创建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
- 相关资源状态:
# 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
- 补充信息:
- 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 yamltls.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场景推荐)
- 安装Cert Manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml - 创建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 - 创建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 - 更新Ingress
替换为Cert Manager生成的Secret:
Cert Manager默认提前30天自动续期证书。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
方案2:Azure托管证书(配合Application Gateway Ingress Controller)
若使用AGIC替代Web App Routing,可直接使用Azure托管证书自动续期:
- 部署AGIC并关联Application Gateway。
- 在Azure门户/CLI创建托管证书,绑定到Application Gateway。
- 更新Ingress配置:
Azure托管证书有效期1年,提前60天自动续期。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
内容的提问来源于stack exchange,提问作者cloudnetwork
相关产品推荐
相关产品推荐

