You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Ingress配置自定义CNAME域名后路由转发返回404问题咨询

问题根因

Ingress Nginx的路由匹配逻辑基于请求头中的Host字段,你当前的配置存在两个问题:

  1. 规则中仅配置了IBM Cloud分配的<long-k8subdomain>.cloud作为匹配域名,自定义域名api.xxx.com不在规则列表中,请求到达Ingress后无法匹配到对应路由,直接返回默认404。
  2. 你之前添加的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:27:04