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

如何让Namespace2中的Pod访问Namespace1内的Service?

跨Namespace访问Kubernetes服务的配置方案

问题场景

我们有两个Namespace:namespace1和namespace2。namespace1中暴露的服务列表如下:

[root@console ~]# oc get svc
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
config-server              ClusterIP   172.30.8.152    <none>        8888/TCP   3h
eureka-server              ClusterIP   172.30.120.74   <none>        8761/TCP   3h
expedia-rapidapi-service   ClusterIP   172.30.236.3    <none>        8233/TCP   3h
travelcodes-service        ClusterIP   172.30.14.36    <none>        8084/TCP   3h
tti-service                ClusterIP   172.30.46.212   <none>        8245/TCP   2h

任意Pod都能通过nslookup解析到travelcodes-service的集群IP:

/ $ nslookup travelcodes-service.contents.svc.cluster.local
Name:      travelcodes-service.contents.svc.cluster.local
Address 1: 172.30.14.36 travelcodes-service.contents.svc.cluster.local

但仅namespace1内的Pod可通过curl访问该服务,namespace2的Pod执行以下命令时无法访问:

curl 172.30.14.36:8084/ping

解决步骤

1. 检查目标Namespace的网络策略

首先确认namespace1是否存在限制外部访问的NetworkPolicy,执行以下命令查看:

oc get networkpolicy -n namespace1

若存在拒绝非本Namespace流量的策略,需调整或新增允许namespace2访问的规则。

2. 创建允许跨Namespace访问的NetworkPolicy

在namespace1中创建以下NetworkPolicy,允许namespace2的Pod访问travelcodes-service的8084端口:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-namespace2-access-travelcodes
  namespace: namespace1
spec:
  podSelector:
    matchLabels:
      # 替换为travelcodes-service后端Pod的实际标签,可通过oc get pods -n namespace1 --show-labels查看
      app: travelcodes-service
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          # 替换为namespace2的实际标签,可通过oc get namespace namespace2 --show-labels查看
          kubernetes.io/metadata.name: namespace2
    ports:
    - protocol: TCP
      port: 8084

执行命令应用该配置:

oc apply -f <上述yaml文件路径>

3. 验证访问

在namespace2的Pod中重新执行访问命令验证:

curl 172.30.14.36:8084/ping

或使用完整服务域名访问:

curl travelcodes-service.namespace1.svc.cluster.local:8084/ping

补充说明

  • OpenShift默认启用严格的网络隔离,即使没有自定义NetworkPolicy,跨Namespace流量也可能被拒绝,因此必须显式配置允许规则。
  • 确保podSelector的标签与travelcodes-service后端Pod的标签完全匹配,否则策略不会生效。
  • 若需允许所有Namespace访问,可将namespaceSelector替换为{},但生产环境建议遵循最小权限原则,仅开放必要的Namespace访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:37