Kubernetes Ingress配置出现通配符Host导致/api/events路径返回404问题排查求助
问题根源:Ingress规则结构语法错误
你遇到的404问题和kubectl describe里Host显示为*的情况,本质是Ingress YAML中rules部分的结构写错了。
看一下你原配置里的rules段:
rules: - host: mywebsite.com - http: paths: - path: /api/events ...
这里你把host和http拆成了两个独立的数组元素(两个-开头的条目),这会被Kubernetes解析成两个规则:
- 第一个规则只有
host: mywebsite.com,但没有任何路径和后端配置,相当于无效规则; - 第二个规则没有指定
host,Kubernetes会默认将这类规则匹配所有主机(即*),同时绑定了/api/events路径。
这种情况下,当你访问mywebsite.com/api/events时,Ingress Controller的匹配逻辑会出现混乱:要么优先匹配那个无host的通配规则,但可能因为TLS配置和host不匹配导致路由异常;要么根本没匹配到正确的路径绑定,最终返回404。
修复方案
把http块嵌套在host: mywebsite.com的同一个规则条目下,确保路径规则属于指定的主机。修正后的完整Ingress配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: apps annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/custom-http-errors: '404' spec: tls: - hosts: - mywebsite.com secretName: my-secret-tls rules: - host: mywebsite.com http: # 这里调整为host条目下的子节点,不再是独立规则 paths: - path: /api/events pathType: ImplementationSpecific backend: service: name: my-events-api-svc port: number: 80
应用修正后的配置:
kubectl apply -f your-ingress-file.yaml -n apps
之后再次执行kubectl describe ingress my-ingress -n apps,你会看到Rules部分的Host列显示为mywebsite.com,此时访问mywebsite.com/api/events应该就能正常路由到你的服务了。
另外你提到的default-http-backend找不到的错误,确实和当前问题无关——它只是Ingress的默认 fallback 后端,只要你的规则能正确匹配请求,就不会触发这个错误。
内容的提问来源于stack exchange,提问作者mnj
相关产品推荐
相关产品推荐

