最近k8s的版本又升级了,已经到v21. 更新的速度很快,学习也要加快速度。
本篇来整理下networkPolicy相关的知识,加深下印象。有时候用着用着,就打架了。
metadata 描述信息
podSelector pod选择器,选定的pod所有的出入站流量要遵循本networkpolicy的约束
policyTypes 策略类型。包括了Ingress和Egress,默认情况下一个policyTypes的值一定会包含Ingress,当有egress规则时,policyTypes的值中会包含Egress
ingress 入站
egress 出站
来个例子:
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default // 该网络policy作用于default的namespace
spec:
podSelector:
matchLabels:
role: db // 应用在pod的label里含有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
ingress--from: 显而易见,就是外部pod能够访问到隔离的pod。
egress--to: 隔离pod能够出去的路径。
我们来仔细看下ingress下面的配置:
- 标明了ip段: pod 来于172.17.0.0/16,但是排除172.17.1.0/24。
- 从namespace来的,改namespace有标签:project=myproject。
- 符合的pod:pod的label含有role=frontend。
上述符合要求的pod可以访问role=db的pod的6379端口。
egress规则:是出去的流量。
从role=db的pod可以访问10.0.0.0/24网段的目的端口5978 。
再写个例子:
我们想对namespace为team-red下的pod(app=nginx)进行入站限制。只允许pod的label为app=security的能访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: team-red
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress
ingress:
-from:
- podSelector:
matchLabels:
app: security
另外一些默认的规则:
1.同namespace的pod,入站规则为全部禁止
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
2.同namespace的pod,入站规则为全部开放:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
ingress:
- {}
3.同namespace的pod,出站规则为全部禁止
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Egress
4.同namespace的pod,出站规则为全部开放
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
网友评论