Kubernetes Pod到Pod群集网络策略

时间:2020-03-03 21:01:09

标签: kubernetes kubernetes-networkpolicy

使用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之间应用此规则吗?

1 个答案:

答案 0 :(得分:2)

您应该阅读The NetworkPolicy resource,它提供了一个带有IngressEgress的示例NetworkPolicy。

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. 针对入口和出口流量(如果尚未隔离)在“默认”名称空间中隔离“ role = db”窗格
  2. (入口规则)允许从以下端口连接到TCP端口6379上带有“ role = db”标签的“默认”名称空间中的所有Pod:

    • “默认”名称空间中带有标签“ role = frontend”的任何吊舱
    • 名称空间中带有标签“ project = myproject”的任何吊舱
    • 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. (出口规则)允许从“默认”名称空间中带有标签“ role = db”的任何Pod连接到TCP端口5978上的CIDR 10.0.0.0/24

有关更多示例,请参见Declare Network Policy演练。

因此,如果您使用podSelector,则可以选择要应用此网络策略的广告连播。