一、背景
如果希望在OSI模型中第三层或第四层控制网络流量,则应该使用NetworkPolicy这个对象;NetworkPolicy以应用为中心,主要用来控制Pod网络流量的进入和流出
二、实例说明
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy-test
namespace: luoxianming
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.0.0/24
- namespaceSelector:
matchLabels:
project: luoxianming
- podSelector:
matchLabels:
app: web
ports:
- protocol: TCP
port: 8080
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 8080
解释:
1) 当policyTypes中包含了Ingress和Egress,则表明:该范围的Pod是出口和入口都有进行限制,白名单是通过Ingress和egress字段,进行放行
2) 默认Pod的入口和出口都是非隔离的
3) NetworkPolicy 资源依赖于网络插件实现
4) podSelector表明使用NetworkPolicy的Pod,当podSelector为空,表明选择名称空间下素有Pod,选择的名称空间为namespace指定
三、参数解释
podSelector: 每个NetworkPolicy中都包括一个podSelector,表示一组Pod进行选择
policyTypes: 每个NetworkPolicy都包含一个policyTypes列表,其中包含Ingress或Egress或者两者兼有;表示对给定的Pod是控制Ingress还是Egress还是两者兼有
Ingress: Ingress白名单列表
egress: egress白名单列表
四、选择器
在Ingress或egress部分中,在from或to字段部分可以定义如下四种选择器:
podSelector: 选择特定Pod
namespaceSelector: 选择特定的名称空间,应将所有Pod用于入站流量或出站流量
ipBlock: 选择特定IP,这些IP应该是集群外部IP
namespaceSelecotr和PodSelecotr: 一个指定
namespaceSelector
和podSelector
的to
/from
条目选择特定名字空间中的特定 Pod
4.1 选择器to和from的区别
ingress:- from:- namespaceSelector:matchLabels:user: alicepodSelector:matchLabels:role: client
定义Ingress, from中只有一个元素,表明只允许名称空间标签有user=Alice的并且Pod有标签Role=client的Pod连接
ingress:- from:- namespaceSelector:matchLabels:user: alice- podSelector:matchLabels:role: client
有2个元素:允许来自本地名字空间中标有 role=client
的 Pod 的连接,或来自任何名字空间中标有 user=alice
的任何 Pod 的连接,采用的是“或”
4.2 拒绝所有入站流量
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: default-deny-ingress spec:podSelector: {}policyTypes:- Ingress
4.3 允许所有入站流量
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: allow-all-ingress spec:podSelector: {}ingress:- {}policyTypes:- Ingress
4.4 默认拒绝所有出站流量
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: default-deny-egress spec:podSelector: {}policyTypes:- Egress
4.5 允许所有出站流量
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: allow-all-egress spec:podSelector: {}egress:- {}policyTypes:- Egress
五、参考文档链接
网络策略 | Kubernetes
仅做学习笔记参考使用