0

使用 k8s 网络策略或 calico,我可以只将这些工具用于 pod 到 pod 集群网络策略。我已经有外部集群策略的网络规则。

例如,如果我应用此印花布规则:

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-ingress-from-b
  namespace: app
spec:
  selector: app == 'a'
  ingress:
  - action: Allow
    protocol: TCP
    source:
      selector: app == 'b'
    destination:
      ports:
        - 80

在此示例中,我允许从应用 B 到应用 A 的流量。但这将禁止所有其他进入 A 的流量。是否可以仅将此规则从 pod 应用到 pod ?

4

1 回答 1

2

您应该阅读The NetworkPolicy 资源Ingress,它提供了一个带有和的示例 NetworkPolicy Egress

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

解释如下:

  1. 在“default”命名空间中为入口和出口流量隔离“role=db”pod(如果它们尚未隔离)
  2. (入口规则)允许在 TCP 端口 6379 上连接到“default”命名空间中带有标签“role=db”的所有 Pod:

    • “default”命名空间中带有“role=frontend”标签的任何 pod</li>
    • 命名空间中带有“project=myproject”标签的任何 pod</li>
    • IP 地址在 172.17.0.0–172.17.0.255 和 172.17.2.0–172.17.255.255 范围内(即除 172.17.1.0/24 之外的所有 172.17.0.0/16)
  3. (出口规则)允许从“default”命名空间中带有标签“role=db”的任何 pod 连接到 TCP 端口 5978 上的 CIDR 10.0.0.0/24

有关更多示例,请参阅 声明网络策略 演练。

因此,如果您使用 a podSelector,您将能够选择要应用此网络策略的 pod。

于 2020-03-03T22:36:55.480 回答