k8s两个Namespace之间通信

时间:2024-10-15 12:19:36

动一下小手点一下赞。谢谢! 你的赞就是我更新的动力。

在Kubernetes(K8S)中,不同的Namespace之间的通信是一个常见的需求。在实际应用中,我们可能需要让不同的Namespace之间相互访问服务或资源。下面我将详细介绍如何实现K8S两个Namespace之间的通信。

K8S两个Namespace通信流程

步骤

操作

1

创建两个Namespace

2

创建Service暴露服务

3

创建NetworkPolicy限制网络访问

操作步骤及代码示例

步骤一:创建两个Namespace

首先,我们需要创建两个Namespace,分别命名为namespace1和namespace2。

# namespace1.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: namespace1

# namespace2.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: namespace2

通过kubectl apply命令将上述yaml文件应用到集群中:

kubectl apply -f namespace1.yaml
kubectl apply -f namespace2.yaml
步骤二:创建Service暴露服务

在每个Namespace中创建一个Service,用于暴露服务:

# service1.yaml
apiVersion: v1
kind: Service
metadata:
  name: service1
  namespace: namespace1
spec:
  selector:
    app: app1
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

# service2.yaml
apiVersion: v1
kind: Service
metadata:
  name: service2
  namespace: namespace2
spec:
  selector:
    app: app2
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

同样,通过kubectl apply命令将上述yaml文件应用到集群中:

kubectl apply -f service1.yaml
kubectl apply -f service2.yaml
步骤三:创建NetworkPolicy限制网络访问

为了限制不同Namespace之间的网络访问,我们需要创建NetworkPolicy:

# allow-namespace1.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-namespace1
  namespace: namespace1
spec:
  podSelector:
    matchLabels:
      app: app1
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: namespace2

# allow-namespace2.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-namespace2
  namespace: namespace2
spec:
  podSelector:
    matchLabels:
      app: app2
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: namespace1

同样,通过kubectl apply命令将上述yaml文件应用到集群中:

kubectl apply -f allow-namespace1.yaml
kubectl apply -f allow-namespace2.yaml

总结

通过以上步骤,我们成功实现了K8S两个Namespace之间的通信。首先我们创建了两个Namespace,然后在每个Namespace中创建了一个Service用于暴露服务,最后创建了NetworkPolicy来限制不同Namespace之间的网络访问。