Kubernetes Ingress配置自定义CNAME域名后路由转发返回404问题咨询
问题根因
Ingress Nginx的路由匹配逻辑基于请求头中的Host字段,你当前的配置存在两个问题:
- 规则中仅配置了IBM Cloud分配的
<long-k8subdomain>.cloud作为匹配域名,自定义域名api.xxx.com不在规则列表中,请求到达Ingress后无法匹配到对应路由,直接返回默认404。 - 你之前添加的
nginx.ingress.kubernetes.io/configuration-snippet注解作用是修改返回给客户端的响应头,完全不会修改请求的Host头,对路由匹配没有任何帮助,属于无效配置。
解决方案
根据你的需求可以选择以下任意一种方案修改Ingress配置:
方案1:保留指定域名匹配(推荐)
保留原有IBM分配子域名的可访问性,同时新增自定义域名的匹配规则,删除无效注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource annotations: kubernetes.io/ingress.class: "public-iks-k8s-nginx" spec: rules: # 原IBM分配的子域名规则 - host: <long-k8subdomain>.cloud http: paths: - path: / pathType: Prefix backend: service: name: my-service-name port: number: 80 # 新增自定义域名规则,需要添加多个域名时可重复该条目 - host: api.xxx.com http: paths: - path: / pathType: Prefix backend: service: name: my-service-name port: number: 80
方案2:全局无域名限制匹配
如果你不需要限制访问域名,所有指向该Ingress负载均衡的域名都要转发到对应服务,可以直接删除规则中的host字段:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource annotations: kubernetes.io/ingress.class: "public-iks-k8s-nginx" spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: my-service-name port: number: 80
生效操作
修改配置后执行kubectl apply -f ingress-config.yaml,等待1-2分钟Ingress规则同步完成后即可正常访问自定义域名。
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

