一、配置文件
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector: ##标签选择器
matchLabels: ##匹配标签
role: db
policyTypes: ##策略类型
- Ingress ##入规则
- Egress ##出规则
ingress: ##入规则明细
- from: ##入规则限制源地址
- ipBlock: ##ip地址段
cidr: 172.17.0.0/16 ##这些地址允许
except: ##这些地址不允许
- 172.17.1.0/24
- namespaceSelector: ##命名空间选择
matchLabels: ##标签选择器
project: myproject
- podSelector: ##pod选择
matchLabels:
role: frontend
ports: ##源端口和协议
- protocol: TCP
port: 6379
egress: ##出规则明细
- to:
- ipBlock: ##目的地址IP段
cidr: 10.0.0.0/24
ports: ##目的端口&协议
- protocol: TCP
port: 5978
所以,该网络策略示例:
1.隔离 default 名字空间下 role=db 的 Pod (如果它们不是已经被隔离的话)
2.(Ingress 规则)允许以下 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)
3.(Egress 规则)允许 default 名字空间中任何带有标签 role=db 的 Pod 到 CIDR 10.0.0.0/24 下 5978 TCP 端口的连接。
二、特殊场景
1.默认拒绝所有入站
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
2.允许所有入站
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-ingress
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
3.拒绝所有出站
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
spec:
podSelector: {}
policyTypes:
- Egress
4.允许所有出站
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress