跨Namespace场景下Kubernetes Ingress对接Service无法访问问题咨询
问题根因分析
- 默认Ingress资源的后端服务仅支持引用和Ingress同Namespace下的Service:你当前Ingress部署在
jenkins-master-ingress命名空间,而两个业务Service分别在其他独立命名空间,Ingress默认无法跨命名空间找到对应Service,这是核心问题。 - 注解中定义的action与Service重名导致逻辑冲突:你在注解中定义了
alb.ingress.kubernetes.io/actions.jen-test-master-unit1和alb.ingress.kubernetes.io/actions.jen-test-master-unit2两个重定向动作,名称和你要对接的Service名称完全一致,AWS Load Balancer Controller会优先匹配同名自定义action,导致所有请求直接触发301重定向,不会转发到后端Service。而你的监听器仅配置了HTTPS 443端口,这个重定向逻辑完全冗余且干扰了正常转发。
修复方案
方案1:使用IngressGroup合并多命名空间Ingress(推荐)
你已经配置了alb.ingress.kubernetes.io/group.name: jenkins-master-group注解,该特性可以让多个不同命名空间下的Ingress资源共享同一个ALB实例,无需跨命名空间引用Service,符合Kubernetes原生规范:
- 删除你当前部署在
jenkins-master-ingress下的这个Ingress资源 - 在
jen-test-master-unit1所在的命名空间创建单独的Ingress,只配置jenkins-unit1.mysite的路由规则,保留相同的group.name注解以及其他ALB公共配置(scheme、tags、证书、安全组等) - 在
jen-test-master-unit2所在的命名空间创建另一个单独的Ingress,只配置jenkins-unit2.mysite的路由规则,使用相同的group.name - 两个Ingress的公共ALB配置要保持完全一致,Controller会自动将两个Ingress的规则合并到同一个ALB上
方案2:单Ingress跨命名空间引用Service
如果需要保持单个Ingress的配置,你需要修改注解里的自定义action,明确指定后端Service的命名空间,同时删除冗余的重定向action配置:
- 先删除你现有注解中两个重定向action的配置,避免和Service名称冲突
- 新增两个action注解,明确指定对应Service的命名空间,示例:
alb.ingress.kubernetes.io/actions.jen-test-master-unit1: > {"type":"forward","forwardConfig":{"targetGroups":[{"serviceName":"jen-test-master-unit1","serviceNamespace":"<替换为unit1的实际命名空间名称>","servicePort":8080}]}} alb.ingress.kubernetes.io/actions.jen-test-master-unit2: > {"type":"forward","forwardConfig":{"targetGroups":[{"serviceName":"jen-test-master-unit2","serviceNamespace":"<替换为unit2的实际命名空间名称>","servicePort":8080}]}}
- 保持Ingress原有spec.rules配置不变即可
额外检查项
- 确认AWS Load Balancer Controller的IAM权限包含跨命名空间读取Service、Endpoint的权限
- 确认ALB的安全组放行了到业务Pod所在子网8080端口的入方向流量
- 确认两个业务Service对应的Pod健康检查路径
/login返回200状态码
内容的提问来源于stack exchange,提问作者Marco Lagalla
相关产品推荐
相关产品推荐

