本地Kubernetes Ingress无法暴露服务至本地机器的问题排查
问题原因及解决方案
核心原因
出现HTTP访问Ingress失败、HTTPS正常的情况,大概率是Nginx Ingress Controller默认开启了HTTP到HTTPS的强制重定向,具体细节如下:
- 绝大多数默认安装的Nginx Ingress Controller会启用
force-ssl-redirect配置(通过全局ConfigMap或默认规则),当客户端发起HTTP请求时,控制器会返回301/302重定向响应,引导请求转向HTTPS。如果你的访问工具(比如未开启自动跳转的浏览器、不带跟随重定向参数的curl)没有处理这个重定向,就会表现为HTTP访问"失败",但直接用HTTPS访问就能正常连接。 - 你的Ingress资源中没有显式禁用该重定向规则,所以默认的强制HTTPS逻辑会生效。
验证步骤
可以通过以下操作确认:
- 执行
curl -v http://<你的Ingress访问IP>/,查看响应头是否包含Location: https://<你的Ingress访问IP>/的重定向信息。 - 查看Ingress Controller的全局ConfigMap(通常名为
nginx-ingress-controller),检查是否存在force-ssl-redirect: "true"的配置项。
解决方法
如果需要保留HTTP访问能力,只需在Ingress资源的metadata.annotations中添加禁用重定向的注解即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" # 禁用HTTP到HTTPS的强制重定向 spec: ingressClassName: nginx rules: - http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 8080
如果是全局需要禁用该规则,可以修改Ingress Controller的ConfigMap,将force-ssl-redirect的值改为"false",但这种方式会影响集群内所有Ingress资源,需谨慎操作。
内容的提问来源于stack exchange,提问作者askwer
相关产品推荐
相关产品推荐

