0

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

ClusterIP 服务可用于访问部署以在 Kubernetes 中进行内部通信,但如何将来自另一个部署中特定部署(或其 pod)的所有请求列入白名单?例如,有没有办法获取特定部署的 Pod 的所有可能 IP 地址,以便将它们列入白名单?

编辑1:

我有一个对 Internet 开放的 Web 应用程序,但它的特定部分必须只能从特定部署中访问。为了实现这一点,我需要指定 IP 地址或应该具有访问权限的部署的名称。

谢谢!

4

2 回答 2

1

您可以使用网络策略

网络策略是关于如何允许 pod 组相互通信以及与其他网络端点通信的规范。

NetworkPolicy 资源使用标签来选择 pod 并定义规则,这些规则指定允许哪些流量进入​​选定的 pod。

于 2020-06-04T09:11:21.460 回答
0

以下网络策略应有助于仅允许从特定部署 pod(depA)到 depB pod 的流量,因为您的问题具体是将流量从部署路由到部署,或者将允许流量返回 Internet,因为我们有允许流量输出的出口规则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 应进行相应标记。以下部署适用于上述策略,请注意 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

于 2020-08-01T02:23:55.207 回答