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

如何创建选择其他命名空间Pod的Kubernetes Service?解决调用503问题

跨命名空间转发Service流量到Pod的解决方案

你的Service返回503是因为Kubernetes Service默认仅在自身命名空间内通过selector匹配Pod。当前my-namespace-2下的my-service会尝试在同命名空间找带app:my-app标签的Pod,但你的Pod在my-namespace-1,导致Service没有可用后端,触发503错误。

不需要额外创建冗余Service,只需调整现有配置即可实现跨命名空间流量转发,以下是两种可行方案:

方案一:手动创建Endpoint关联跨命名空间Pod

适合Pod数量少、IP相对固定的场景:

  1. 修改my-namespace-2的my-service,移除selector(selector与手动Endpoint互斥):
apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: my-namespace-2
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP
  1. 在my-namespace-2创建与Service同名的Endpoint,指定Pod的实际IP(可通过kubectl get pods -n my-namespace-1 -o wide查看):
apiVersion: v1
kind: Endpoints
metadata:
  name: my-service
  namespace: my-namespace-2
subsets:
  - addresses:
      - ip: 10.XX.XX.XX # 替换为my-pod的实际IP
    ports:
      - port: 80
        name: http

方案二:通过跨命名空间Service转发(更灵活)

适合Pod可能动态重启、IP变化的场景:

  1. 在my-namespace-1创建匹配本地Pod的Service:
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
  namespace: my-namespace-1
spec:
  selector:
    app: my-app
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP
  1. 修改my-namespace-2的my-service为ExternalName类型,指向跨命名空间的Service域名:
apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: my-namespace-2
spec:
  type: ExternalName
  externalName: my-app-service.my-namespace-1.svc.cluster.local
  ports:
    - name: http
      port: 80
      targetPort: 80

这样my-service会自动将流量转发到my-namespace-1的my-app-service,无需手动维护Pod IP。

内容的提问来源于stack exchange,提问作者Datz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:52:33