Microk8s Nginx Ingress配置host后不匹配后端访问返回404
问题根因
你的Ingress返回404的核心原因是spec.rules字段的YAML结构写错了:
你当前配置中rules下定义了两个独立的列表项:
- 第一项仅配置了
host: "my-host.com",没有绑定任何HTTP路由和后端服务配置 - 第二项仅配置了HTTP路径规则,没有绑定host,属于匹配所有未命中其他Host规则的兜底规则
当你访问https://my-host.com时,请求会命中第一个没有后端配置的空规则,Nginx Ingress直接返回404。
修复后的正确配置
把http配置和host配置放到同一个rule列表项下,删除http前多余的列表短横线,调整缩进即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/rewrite-target: / kubernetes.io/ingress.class: public name: http-ingress spec: tls: - hosts: - "my-host.com" secretName: nginx-ingress rules: - host: "my-host.com" http: paths: - pathType: Prefix path: / backend: service: name: some-service port: number: 80
额外排查项
如果修改配置后仍有异常,可以逐一核对以下配置:
- 确认后端服务
some-service运行正常,在集群内可通过80端口正常响应:可执行kubectl port-forward service/some-service 8080:80,本地访问http://localhost:8080验证服务可用性 - 注解
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"表示后端服务使用HTTPS协议通信,请确认Service暴露的80端口确实是HTTPS协议端口,否则会出现后端协议不匹配错误 - 确认TLS证书Secret
nginx-ingress和Ingress资源在同一个命名空间,证书格式符合K8s TLS Secret规范 - 执行
microk8s status确认Nginx Ingress插件处于已启用状态
内容的提问来源于stack exchange,提问作者Nash
相关产品推荐
相关产品推荐

