简介:
Calico可以独立地为Kubernetes提供网络解决方案和网络策略,也可以和flannel相结合
由flannel提供网络解决方案,Calico仅用于提供网络策略,此时将Calico称为Canal,结合flannel工作时,Calico提供的默认配置清单式以flannel默认使用的10.244.0.0/16为Pod网络,因此在集群中kube-controller-manager启动时就需要通过—cluster-cidr选项进行设置使用该网络地址,并且—-allocate-node-cidrs的值应设置为true
网络策略(Network Policy )是 Kubernetes 的一种资源,Network Policy 通过 Label 选择 Pod,并指定其他 Pod 或外界如何与这些 Pod 通信
Pod的网络流量包含流入(Ingress)和流出(Egress)两种方向,默认情况下,所有 Pod 是非隔离的,即任何来源的网络流量都能够访问 Pod,没有任何限制,当为 Pod 定义了 Network Policy,只有 Policy 允许的流量才能访问 Pod
Kubernetes的网络策略功能也是由第三方的网络插件实现的,因此,只有支持网络策略功能的网络插件才能进行配置网络策略,比如Calico、Canal、kube-router等等
- Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址,策略可以定义目标地址或者目的端口
- Ingress 表示入站流量,pod地址和服务作为服务端,提供外部访问,pod地址作为目标地址,策略可以定义源地址和自己端口
- podSelector 规则生效在那个pod上,可以配置单个pod或者一组pod。可以定义单方向。空 podSelector选择命名空间中的Pod
kubectl explain networkpolicy.spec讲解:
- egress 出站流量规则 可以根据ports和to去定义规则,ports下可以指定目标端口和协议,to(目标地址):目标地址分为ip地址段、pod、namespace
- ingress 入站流量规则 可以根据ports和from,ports下可以指定目标端口和协议,from(来自那个地址可以进来):地址分为ip地址段、pod、namespace
- podSelector 定义NetworkPolicy的限制范围,直白的说就是规则应用到那个pod上,podSelector: { },留空就是定义对当前namespace下的所有pod生效,没有定义白名单的话 默认就是Deny ALL ( 拒绝所有 )
- policyTypes 指定那个规则 那个规则生效,不指定就是默认规则
相关文档:https://www.cnblogs.com/xzkzzz/p/9952716.html https://www.cnblogs.com/wlbl/p/10694374.html#%E7%BD%91%E7%BB%9C%E7%AD%96%E7%95%A5