Kubernetes Network Policy pod流量限制

  sre

5ffda78523e474020.jpg_fo742.jpg

Network Policy需要Kubernetes版本大于1.3
必需字段:

字段 说明
spec NetworkPolicy 规约中包含了在名字空间中定义特定网络策略所需的所有信息。
podSelector 每个 NetworkPolicy 都包括一个 podSelector,它选择适用该该策略的 Pod。示例中的策略选择带有 “role=db” 标签的 Pod。 若podSelector为空的,则选择名字空间下所有 Pod
policyTypes 每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 Ingress 或 Egress 或(两者亦可)。
policyTypes 字段表示给定的策略是应用于 所选 Pod 的入口流量还是来出口流量(两者亦可)。
如果 NetworkPolicy 未指定 policyTypes 则默认情况下始终设置 Ingress;
如果 NetworkPolicy 有任何出口规则的话则设置 Egress。
ingress 每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。
每个规则都允许同时匹配 from 和 ports 部分的流量。
示例策略中包含一条 简单的规则: 它匹配某个特定端口,第一个通过 ipBlock 指定,第二个通过 namespaceSelector 指定,第三个通过 podSelector 指定。
egress 每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。
每个规则都允许匹配 to 和 port 部分的流量。
该示例策略包含一条规则, 该规则指定端口上的流量匹配到 10.0.0.0/24 中的任何目的地。

例子:

1apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy-sample
  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

说明:
隔离
隔离default名字空间下 role=db 的 Pod

出口限制:
允许符合以下条件的 Pod 连接到 default名字空间下标签为 role=db的所有 Pod 的 6379 TCP 端口:
default名字空间下带有 role=frontend 标签的所有 Pod
带有 project=myproject 标签的所有名字空间中的 Pod
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)

入口限制
允许从带有 role=db标签的名字空间下的任何 Pod 到 CIDR 10.0.0.0/24 下 5978 TCP 端口。

LEAVE A COMMENT

Captcha Code