默认情况下Kubernetes网络是一个扁平网络,Pod直接可以互相通信,在某些场景下我们希望不同的Pod网络不可以互通,这时候就需要网络访问控制,可以实现细粒度的容器间网络访问隔离策略。

解决方案

Kubernetes提供了NetworkPolicy的Feature,支持按Namespace和按Pod级别的网络访问控制。

  1. Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制,设置方式为将Pod的Label作为查询条件,设置允许访问或禁止访问的客户端Pod列表。
  2. 当为 Pod 定义了 Network Policy,只有 Policy 允许的流量才能访问 Pod。
  3. Kubernetes的网络策略功能是由第三方的网络插件实现的,因此,只有支持网络策略功能的网络插件才能进行配置网络策略,比如Calico、Canal、kube-router等

image.png

官方文档

https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/

隔离类型

Pod 有两种隔离: 出站[Egress]的隔离和入站[Ingress]的隔离,这里指的是流量的方向,以Pod作为主体。

Ingress

别人访问自己[Pod],被人作为客户端访问Pod,如果别人来访问Pod,那Pod一定是有明确的地址和端口,对方端口不可预测,此时可以限制目标的地址和自己的端口

Egress

自己[Pod]访问别人,Pod作为客户端访问别人,自己作为客户端访问别人是可以明确知道对方的地址和端口,自己端口不可预测,可以限制目标的地址端口。