Kubernetes 网络策略(Network Policies) 是用于控制 Pod 之间和 Pod 与服务之间的网络流量的一种机制。它允许你定义规则,限制哪些 Pod 可以与其他 Pod 通信以及如何通信。以下是有关 Kubernetes 网络策略的关键概念:

1. Network Policy 资源:
   - 在 Kubernetes 中,使用 NetworkPolicy 资源对象来定义网络策略。这些策略可以应用于特定的命名空间,以控制 Pod 的通信。

2. 选择器(Selectors):
   - 使用标签选择器来指定 Network Policy 将影响哪些 Pod。这允许你根据 Pod 的标签对其进行分类,并定义网络策略规则。

3. 入口和出口规则:
   - Network Policy 支持定义入口规则和出口规则。入口规则控制从其他 Pod 到指定 Pod 的流量,而出口规则控制从指定 Pod 到其他 Pod 的流量。
   apiVersion: networking.k8s.io/v1
   kind: NetworkPolicy
   metadata:
     name: allow-internal-traffic
   spec:
     podSelector:
       matchLabels:
         app: my-app
     ingress:
     - from:
       - podSelector:
           matchLabels:
             app: my-app

   上述例子中,定义了一个允许来自相同应用的 Pod 访问的 Network Policy。

4. 端口和协议:
   - Network Policy 允许你指定允许或拒绝的端口和协议。这允许你细粒度地控制 Pod 之间的通信。
   apiVersion: networking.k8s.io/v1
   kind: NetworkPolicy
   metadata:
     name: allow-nginx-traffic
   spec:
     podSelector:
       matchLabels:
         app: nginx
     ingress:
     - ports:
       - protocol: TCP
         port: 80

   上述例子中,定义了一个允许来自任何 Pod 的 TCP 端口 80 流量的 Network Policy。

5. Peer Pod 规则:
   - Network Policy 允许定义与同一命名空间中的其他 Pod 的通信规则。这样,你可以在同一命名空间中定义细粒度的网络策略。
   apiVersion: networking.k8s.io/v1
   kind: NetworkPolicy
   metadata:
     name: deny-external-traffic
   spec:
     podSelector: {}
     ingress:
     - from:
       - podSelector: {}

   上述例子中,定义了一个不允许来自同一命名空间中其他 Pod 的流量的 Network Policy。

6. 默认策略:
   - 如果未定义 Network Policy,则默认情况下所有 Pod 允许相互通信。可以通过定义 default-deny 策略来拒绝所有流量,然后再定义具体的允许规则。

7. 网络插件支持:
   - Network Policy 的实现依赖于 Kubernetes 集群所使用的网络插件。一些流行的网络插件如 Calico、Cilium、Flannel 都支持 Network Policy。

网络策略为 Kubernetes 中的网络安全提供了一种强大的机制,可以根据标签和规则来定义 Pod 之间的通信规则。在配置网络策略时,请确保网络插件和 Kubernetes 版本都能够支持所需的功能。


转载请注明出处:http://www.zyzy.cn/article/detail/9738/Kubernetes