什么是网络策略
在Kubernetes平台中,要实现零信任网络的安全架构,Calico与istio是在Kubernetes集群中构建零信任网络必不可少的组件。
而建立和维护整个集群中的“零信任网络”中,网络策略的功能在操作上大致可以总结为使用资源配置模板来管理控制平面数据流。说白了讲网络策略就是用来控制Pod间流量的规则。
在Calico中如何编写网络策略
要使用网络策略就需要先了解Calico功能**:NetworkPolicy和GlobalNetworkPolicy**。
NetworkPolicy
资源,简称np
;是命名空间级别资源。规则应用于与标签选择器匹配的endpoint的集合。
GlobalNetworkPolicy
资源,简称 gnp
/gnps
与NetworkPolicy
功能一样,是整个集群级别的资源。
GlobalNetworkPolicy
与 NetworkPolicy
资源的管理也与calico的部署方式有关,使用etcd作为存储时,资源的管理只能使用 calicoctl
进行管理
NetworkPolicy与GlobalNetworkPolicy的构成
|
|
NetworkPolicy使用
实例:允许6379流量可以被 role=frontend
的pod访问
|
|
实例:禁止ICMP流量
|
|
实例:禁止访问指定服务
|
|
GlobalNetworkPolicy
GlobalNetworkPolicy与NetworkPolicy使用方法基本一致,只是作用域的不同,并且可以应用很多高级的网络策略:
GlobalNetworkPolicy 中提供了一个preDNAT的功能,是kube-proxy对Node port的端口和IP的流量DNAT到所对应的Pod中的时候,为了既允许正常的ingress流量,又拒绝其他的ingress流量,这个时候必须要在DNAT前生效,这种情况需要使用preDNAT。
preDNAT 适用的条件是,流量仅为ingress并且在DNAT之前。
Reference
NetworkPolicy.spec.ingress|egress