如何通过HTTPS访问Azure Kubernetes(AKS)的Ingress Controller IP
解决AKS Ingress通过IP地址HTTPS访问的问题
核心原因
你当前使用的Let's Encrypt证书仅绑定了saurabh.com域名,不包含Ingress公网IP作为证书主体备用名称(SAN),因此通过IP访问HTTPS时会出现证书不匹配错误,导致无法正常访问。另外Let's Encrypt不支持为IP地址颁发证书,所以需要使用自签名证书适配IP访问场景。
解决方案步骤
1. 生成包含IP地址的自签名证书
使用openssl生成针对Ingress公网IP的自签名证书,替换<YOUR_INGRESS_PUBLIC_IP>为你的AKS Ingress Controller公网IP:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls-ip.key -out tls-ip.crt -subj "/CN=<YOUR_INGRESS_PUBLIC_IP>" -addext "subjectAltName=IP:<YOUR_INGRESS_PUBLIC_IP>"
2. 创建Kubernetes Secret存储自签名证书
将生成的证书和密钥存入K8s Secret:
kubectl create secret tls tls-ip-secret --cert=tls-ip.crt --key=tls-ip.key
3. 配置针对IP访问的Ingress规则
创建新的Ingress资源(或修改现有Ingress),专门处理IP的HTTPS访问:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: saurabh-ingress-ip annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: "true" spec: tls: - hosts: - <YOUR_INGRESS_PUBLIC_IP> secretName: tls-ip-secret rules: - host: <YOUR_INGRESS_PUBLIC_IP> http: paths: - path: / pathType: Prefix backend: service: name: saurabh-ui port: number: 4200
应用配置:
kubectl apply -f <ingress-ip-yaml-file>.yaml
4. 验证访问
使用Ingress公网IP通过HTTPS访问应用时,浏览器会提示证书不受信任(自签证书的正常现象),选择继续访问即可进入应用。如果需要消除警告,可将生成的tls-ip.crt导入本地浏览器的信任列表。
补充说明
- 若要同时支持域名和IP的HTTPS访问,可重新生成包含域名和IP的自签名证书,修改
openssl命令的subjectAltName参数为:subjectAltName=DNS:saurabh.com,IP:<YOUR_INGRESS_PUBLIC_IP>,然后更新现有tls-secret内容,或用新证书创建Secret并修改原Ingress的TLS配置。 - 确认AKS Ingress Controller的LoadBalancer服务已正确暴露443端口(你的域名HTTPS正常,此条件已满足)。
内容的提问来源于stack exchange,提问作者saurabh704
相关产品推荐
相关产品推荐

