Kubernetes 中如何设置 Pod 的网络策略?

Kubernetes 是当今最流行的容器编排平台之一。在 Kubernetes 中,Pod 是最基本的部署单元。Pod 是一个或多个容器的组合,它们是共享网络和文件系统的,这意味着它们可以直接相互通信。但是,在某些情况下,您可能需要在 Pod 之间设置网络策略,以确保安全性、稳定性和可靠性。

在本文中,我们将介绍 Kubernetes 中如何设置 Pod 的网络策略。

Kubernetes 中的网络策略

Kubernetes 提供了网络策略(Network Policy)来管理 Pod 上的网络流量。网络策略允许您定义规则,以控制哪些 Pod 可以与其他 Pod 进行通信,哪些 Pod 必须禁止访问,以及通信所需的端口和协议等等。

网络策略由两部分组成:

  1. PodSelector:规定哪些 Pod 可以接受入站流量和哪些 Pod 可以发出出站流量。
  2. PolicyTypes:规定哪些类型的流量应该受到限制。

当前 Kubernetes 支持两种类型的网络策略:

  1. Ingress:用于控制入站流量。它规定哪些 Pod 可以接受来自其他 Pod 的流量。
  2. Egress:用于控制出站流量。它规定哪些 Pod 可以向其他 Pod 发送流量。

设置网络策略的方法

要设置网络策略,需要按照以下步骤操作:

步骤 1:启用网络策略

Kubernetes 集群必须至少运行版本 1.7 或更高版本,以便启用网络策略。为了启用网络策略,您需要在 kube-apiserver 的启动参数中添加 --enable-network-policy=true,或者在 minikube start 命令中使用 --network-plugin=cni --enable-default-cni --enable-addons=network-policy

步骤 2:创建 NetworkPolicy 对象

要创建 NetworkPolicy 对象,您需要使用 YAML 文件,定义您的网络策略。例如,以下是一个简单的 NetworkPolicy 配置文件:

----------- --------------------
----- -------------
---------
  ----- ---------
-----
  ------------ --
  ------------
  - -------
  - ------

上面的 YAML 文件所定义的 NetworkPolicy 对象允许从任何 Pod 中流入和流出流量。

步骤 3:应用 NetworkPolicy

将 NetworkPolicy 对象应用到 Kubernetes 中的 Pod,可以使用 kubectl 命令:

------- ----- -- -------------------------

此命令会从 YAML 文件中读取 NetworkPolicy 对象并将其应用于您的集群。

示例代码

在以下示例中,我们将创建两个 Pod,并使用 NetworkPolicy 仅允许从 master Pod 到 slave Pod 的入站流量。

----------- --
----- ---
---------
  ----- ------
  -------
    ---- -------
-----
  -----------
  - ------ -------
    --------
    - -----
    - ------
    ----- -------

---

----------- --
----- ---
---------
  ----- -----
  -------
    ---- -------
-----
  -----------
  - ------ -------
    --------
    - -----
    - ------
    ----- -------

---

----------- --------------------
----- -------------
---------
  ----- ---------------------
-----
  ------------
    ------------
      ---- -------
  --------
  - -----
    - ------------
        ------------
          ---- -------
        -----------------
        - ----- ----- --------- --- ------- ---------

上面的 YAML 文件所定义的 NetworkPolicy 对象仅允许从名为 master 的 Pod 中的流量穿过网络,在这里,我们使用 matchExpressionskey 来过滤符合条件的 Pod,以便进行精确的流量控制。

然后我们通过以下命令使用 kubectl 将它们部署到 Kubernetes 集群上:

------- ----- -- -------------------

然后,我们确认输入以下命令,查看 NetworkPolicy 是否生效:

------- --- -------------

结论

在 Kubernetes 中,允许 Pod 相互之间直接通信可能会导致安全隐患,因此需要实现网络策略来确保网络安全、可靠性和稳定性。在本文中,我们已经介绍了 Kubernetes 中如何设置 Pod 的网络策略,并共享示例代码。在这些代码的基础上,您可以为您的部署实施规则,以确保您的应用程序适当地控制和管理流量。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fcf7e944713626017534e3