如何使Kubernetes部署只能从特定部署访问?

时间:2020-06-04 08:47:57

标签: kubernetes kubernetes-pod kubernetes-service kubernetes-deployment kubernetes-networking

我有两个Kubernetes部署(DeploymentA和DeploymentB),我想知道是否有办法将所有来自DeploymentA中DeploymentB的传入流量列入白名单?因此只能通过DeploymentB来访问DeploymentA。

ClusterIP服务可用于访问Kubernetes中用于内部通信的部署,但是如何将来自特定部署(或其Pod)的所有请求列入白名单?例如,是否有一种方法可以获取特定部署的Pod的所有可能的IP地址,以将其列入白名单?

编辑1:

我有一个向Internet开放的Web应用程序,但其中的特定部分只能从特定的部署中访问。为此,我需要指定应该具有访问权限的部署的IP地址或名称。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用Network policy

网络策略是有关如何允许Pod组与彼此以及其他网络端点进行通信的规范。

NetworkPolicy资源使用标签来选择容器,并定义规则以指定允许对选定容器进行哪些通信。

答案 1 :(得分:0)

以下网络策略应有助于仅允许从特定部署Pod(depA)到depB Pod的流量,因为您的问题是特定的,它将在部署之间路由流量,或者从 我们有出口规则,允许在UDP和TCP上进行流量

apiVersion: networking.k8s.io/v1
metadata:
  name: foo-allow-to-hello
spec:
  policyTypes:
  - Ingress
  - Egress 
  podSelector:
    matchLabels:
      app: depbB
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: depA
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: depA
    - ports
      - protocol: UDP
        port: 53
     - protocol: TCP 
       port: 53

请注意,要强制执行上述策略,请在部署中相应地标记Pod。以下部署将适用于上述策略,请注意,吊舱上的标签与该策略中提到的标签相同。

controllers/nginx-deployment.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: deploymentA
spec:
  replicas: 3
  selector:
    matchLabels:
      app: depA 
  template:
    metadata:
      labels:
        app: depA 
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80