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