文章

限制k8s中网络访问

1. 禁止指定namespace下指定服务的访问互联网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-egress-internet
  namespace: pre
spec:
  podSelector:
    matchLabels:
      svc: test
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/8
    - ipBlock:
        cidr: 172.16.0.0/12
    - ipBlock:
        cidr: 192.168.0.0/16
    - ipBlock:
        cidr: 100.64.0.0/10

允许带有 “svc=test” 标签的 Pod 访问特定的私有网络段,而禁止访问其他所有网络。

  1. podSelector:这个字段选择了带有 “svc=test” 标签的 Pod。这个 NetworkPolicy 将应用于这些 Pod。

  2. policyTypes:这个字段指定了这个 NetworkPolicy 应用于出站流量(Egress)。

  3. egress:这个字段定义了出站流量的规则。这个规则允许 Pod 访问以下 IP 地址段:

    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
    • 100.64.0.0/10


2. 控制Pod的网络流量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-public-network-for-labels
  namespace: pre
spec:
  #出口规则
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
    - namespaceSelector:
        matchLabels:
          ns: kube-system
  #入口规则
  ingress:
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
  podSelector:
    matchExpressions:
    - key: app
      operator: In
      values:
      - test
  policyTypes:
  - Ingress
  - Egress

允许带有 “app=test” 标签的 Pod 访问所有 IP 地址和 “kube-system” 命名空间,并允许所有 IP 地址访问这些 Pod

  1. podSelector:这个字段选择了带有 “app=test” 标签的 Pod。这个 NetworkPolicy 将应用于这些 Pod。

  2. egress:这个字段定义了出站流量的规则。这个规则允许 Pod 访问所有 IP 地址(0.0.0.0/0 表示所有 IP 地址)和带有 “ns=kube-system” 标签的命名空间。

  3. ingress:这个字段定义了入站流量的规则。这个规则允许所有 IP 地址访问 Pod。

  4. policyTypes:这个字段指定了这个 NetworkPolicy 应用于入站流量(Ingress)和出站流量(Egress)

本文由作者按照 CC BY 4.0 进行授权