网络安全
这里指的网络安全是 Pod 的网络隔离,利用 Kubernetes 的 NetworkPolicy 资源为 Pod 设置安全组,可限制能够 访问该 Pod 或 从该 Pod 发出 的数据。
该资源需要网络插件的支持,用户可以使用 Calico 插件启用该功能,其底层使用 iptables 来进行网络隔离。
该资源可以从三层、四层进行数据识别并隔离。
🧟♂️ 在匹配数据流量时,有三个字段起作用,取并集,即满足其中任何一个字段指定的要求的流量,都会被匹配:
ipBlock:无视 NetworkPolicy 所在的命名空间,只根据数据流量的 IP 地址进行匹配;
podSelector:匹配 NetworkPolicy 所在命名空间 的满足标签信息的 Pod;
namespaceSelector:无视 NetworkPolicy 所在的命名空间,根据命名空间的标签进行匹配,匹配到的命名空间中的 所有 Pod 的流量均会被匹配;
🗣 由于 NetworkPolicy 是命名空间级别的资源,因此需要注意的是其使用 networkpolicy.spec.podSelector
匹配的目标 Pod 必须是与其在同一个命名空间中的,其他命名空间中具备符合标签匹配规则的 Pod 不会被匹配。
🗣 networkpolicy.spec.ingress.podSelector
以及 networkpolicy.spec.egress.podSelector
中匹配的访问目标 Pod 的流量的发送 Pod 和 从目标 Pod 发送的流量访问的 Pod 需要与 NetworkPolicy 在同一个命名空间中,否则其他命名空间中及时满足标签匹配,也 不会被匹配。
限制访问 Pod 的流量
该类型的流量限制可以通过 networkpolicy.spec.podSelector
先指定需要限制访问的 Pod 的标签匹配,可以使用简单的 matchLabels
也可以使用 matchExpressions
进行复杂匹配;
然后在 networkpolicy.spec.ingress
中指定访问 Pod 所匹配的网络数据特性。
下面直接展示一个例子,在 default
命名空间中创建了一个 NetworkPolicy,该资源用于限制访问带有标签 app=database
的 Pod 的流量,只能访问该 Pod 的 2345
端口,且只要满足下面这些条件中的 任意一条 就可以访问:
从 ipBlock 中可见,来自 IP 地址为
192.168.28.100
的 Pod 的流量可以访问该 Pod 的指定端口;从 podSelector 中可见,在
default
命名空间中,来自带有标签app=webserver
的 Pod 的流量可以访问该 Pod 的指定端口;从 namespaceSelector 中可见,来自带有标签
tenant=manning
的命名空间中的所有 Pod 的流量均可以访问该 Pod 的指定端口;
限制出自 Pod 的流量
该类型的流量限制可以通过 networkpolicy.spec.podSelector
先指定需要限制流量出自的 Pod 的标签匹配,可以使用简单的 matchLabels
也可以使用 matchExpressions
进行复杂匹配;
然后在 networkpolicy.spec.egress
中指定访问 Pod 所匹配的网络数据特性。
下面直接展示一个例子,
Last updated
Was this helpful?