Ingress配置中如何同时支持HTTP与HTTPS双协议访问?
Azure应用网关Ingress同时承接HTTP/HTTPS流量的配置方案
核心结论
这不是Kubernetes的平台限制。从设计逻辑上,同一套Ingress规则完全可以同时承接80端口的明文HTTP流量、443端口的加密HTTPS流量,统一转发到后端的HTTP服务。
你遇到的「添加TLS配置后Ingress就停止响应HTTP请求」的问题,和平台能力边界无关,本质是现有配置的疏漏,叠加Azure Application Gateway Ingress Controller的默认行为导致的。
现有配置的关键疏漏
- 域名映射完全不匹配:TLS段中声明的受保护域名是
*.mydomain.com,但路由规则实际匹配的域名是*.mydomain.net,两个配置条目没有关联,Ingress控制器无法建立TLS终端和路由规则的映射关系。 - 触发了默认的HTTPS强制跳转逻辑:Azure应用网关Ingress控制器的默认规则为,当Ingress中存在TLS配置时,会自动把同域名下80端口的HTTP请求重定向到443端口的HTTPS服务。由于你之前TLS和路由规则的域名不匹配,重定向逻辑无法生成正确的转发规则,最终表现为HTTP请求无响应。
可直接复用的修正配置
调整需要完成两个操作:一是将TLS段的host与路由规则的host做完全对齐,二是通过控制器注解关闭默认的强制HTTPS跳转,保留明文HTTP流量的正常转发通道。修正后的完整配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress annotations: kubernetes.io/ingress.class: azure/application-gateway # 关闭默认的HTTPS强制重定向,保留明文HTTP流量转发能力 appgw.ingress.kubernetes.io/ssl-redirect: "false" spec: tls: - hosts: # 与路由规则的host保持完全一致,修正域名不匹配问题 - "*.mydomain.net" secretName: aks-ingress-tls rules: - host: "*.mydomain.net" http: paths: - pathType: Prefix path: "/" backend: service: name: frontend-service port: number: 80
配置生效后的路由行为
完成调整后,两类入站流量会完全复用同一条路由规则,不需要重复编写配置:
- 80端口收到的明文HTTP请求,直接按host、路径规则匹配后端服务,不做强制跳转
- 443端口收到的HTTPS请求,先通过绑定的TLS证书完成SSL卸载,解密后匹配相同的host、路径规则,转发到同一个后端服务
如果后续需要开启“HTTP自动跳转HTTPS”的能力,只需要把上述注解中的ssl-redirect值修改为"true"即可,路由规则不需要做任何调整。
内容的提问来源于stack exchange,提问作者Gregory Suvalian
相关产品推荐
相关产品推荐

