最近由于项目需要,客户方的网络是完全封闭的网络,从内部访问外界是需要另外开放网络权限才能访问。而我们的项目经过多次迭代,包含了一些无关访问外界的网络请求,这就需要能模拟网络受限的场景进行测试。针对这种需求,我们可以使用K8S的网络策略Network Policy来进行控制。

网络策略Network Policy的yaml配置示例:

 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
29
30
31
32
33
34
35
36
37
38
39
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-external-egress-policy
spec:
  podSelector: {}
#  podSelector:
#    matchLabels:
#      app: nginx-test
  policyTypes:
    - Egress
  egress:
  - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
        podSelector:
          matchLabels:
            k8s-app: kube-dns
    ports:
      - port: 53
        protocol: UDP
      - port: 53
        protocol: TCP
  - to:
      - ipBlock:
          cidr: 10.244.0.0/16
  - to:
      - ipBlock:
          cidr: 10.96.0.0/12
  - to:
      - ipBlock:
          cidr: 10.10.13.0/24
  - to:
      - ipBlock:
          cidr: 1.2.3.4/32
    ports:
      - protocol: TCP
        port: 8080

以上限制所有出访请求,放开访问dns、内网访问、特定ip及端口号

注意:该规则仅在规则创建的名称空间内有效。

另外,需要注意的是如果仅仅是使用网络插件flannel,网络策略是不生效的,如果使用的网络插件是flannel,则需要安装canel。