13.4. 配置多网络策略


作为集群管理员,您可以为额外网络配置网络策略。

注意

您只能为 macvlan 额外网络指定多网络策略。不支持其他类型的额外网络,如 ipvlan。

13.4.1. 多网络策略和网络策略之间的区别

虽然 MultiNetworkPolicy API 实现 NetworkPolicy API,但有几个重要的区别:

  • 您必须使用 MultiNetworkPolicy API:

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
  • 当使用 CLI 与多网络策略交互时,您必须使用 multi-networkpolicy 资源名称。例如,您可以使用 oc get multi-networkpolicy <name> 命令来查看多网络策略对象,其中 <name> 是多网络策略的名称。
  • 您必须使用定义 macvlan 额外网络的网络附加定义名称指定一个注解:

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/policy-for: <network_name>

    其中:

    <network_name>
    指定网络附加定义的名称。

13.4.2. 为集群启用多网络策略

作为集群管理员,您可以在集群中启用多网络策略支持。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。

流程

  1. 使用以下 YAML 创建 multinetwork-enable-patch.yaml 文件:

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      useMultiNetworkPolicy: true
  2. 配置集群以启用多网络策略:

    $ oc patch network.operator.openshift.io cluster --type=merge --patch-file=multinetwork-enable-patch.yaml

    输出示例

    network.operator.openshift.io/cluster patched

13.4.3. 使用多网络策略

作为集群管理员,您可以创建、编辑、查看和删除多网络策略。

13.4.3.1. 先决条件

  • 您已为集群启用了多网络策略支持。

13.4.3.2. 创建多网络策略

要定义细致的规则来描述集群中命名空间允许的入口或出口网络流量,您可以创建一个多网络策略。

先决条件

  • 集群使用支持 NetworkPolicy 对象的集群网络供应商,如 OVN-Kubernetes 网络供应商或设置了 mode: NetworkPolicy 的 OpenShift SDN 网络供应商。此模式是 OpenShift SDN 的默认模式。
  • 已安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。
  • 您在多网络策略应用到的命名空间中工作。

流程

  1. 创建策略规则:

    1. 创建一个 <policy_name>.yaml 文件:

      $ touch <policy_name>.yaml

      其中:

      <policy_name>
      指定多网络策略文件名。
    2. 在您刚才创建的文件中定义多网络策略,如下例所示:

      拒绝来自所有命名空间中的所有 pod 的入口流量

      apiVersion: k8s.cni.cncf.io/v1beta1
      kind: MultiNetworkPolicy
      metadata:
        name: deny-by-default
        annotations:
          k8s.v1.cni.cncf.io/policy-for: <network_name>
      spec:
        podSelector:
        ingress: []

      其中

      <network_name>
      指定网络附加定义的名称。

      允许来自所有命名空间中的所有 pod 的入口流量

      apiVersion: k8s.cni.cncf.io/v1beta1
      kind: MultiNetworkPolicy
      metadata:
        name: allow-same-namespace
        annotations:
          k8s.v1.cni.cncf.io/policy-for: <network_name>
      spec:
        podSelector:
        ingress:
        - from:
          - podSelector: {}

      其中

      <network_name>
      指定网络附加定义的名称。
  2. 运行以下命令来创建多网络策略对象:

    $ oc apply -f <policy_name>.yaml -n <namespace>

    其中:

    <policy_name>
    指定多网络策略文件名。
    <namespace>
    可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。

    输出示例

    multinetworkpolicy.k8s.cni.cncf.io/default-deny created

13.4.3.3. 编辑多网络策略

您可以编辑命名空间中的多网络策略。

先决条件

  • 集群使用支持 NetworkPolicy 对象的集群网络供应商,如 OVN-Kubernetes 网络供应商或设置了 mode: NetworkPolicy 的 OpenShift SDN 网络供应商。此模式是 OpenShift SDN 的默认模式。
  • 已安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。
  • 您在存在多网络策略的命名空间中工作。

流程

  1. 可选: 要列出命名空间中的多网络策略对象,请输入以下命令:

    $ oc get multi-networkpolicy

    其中:

    <namespace>
    可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
  2. 编辑多网络策略对象。

    • 如果您在文件中保存了多网络策略定义,请编辑该文件并进行必要的更改,然后输入以下命令。

      $ oc apply -n <namespace> -f <policy_file>.yaml

      其中:

      <namespace>
      可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
      <policy_file>
      指定包含网络策略的文件的名称。
    • 如果您需要直接更新多网络策略对象,请输入以下命令:

      $ oc edit multi-networkpolicy <policy_name> -n <namespace>

      其中:

      <policy_name>
      指定网络策略的名称。
      <namespace>
      可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
  3. 确认已更新多网络策略对象。

    $ oc describe multi-networkpolicy <policy_name> -n <namespace>

    其中:

    <policy_name>
    指定多网络策略的名称。
    <namespace>
    可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。

13.4.3.4. 查看多网络策略

您可以检查命名空间中的多网络策略。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。
  • 您在存在多网络策略的命名空间中工作。

流程

  • 列出命名空间中的多网络策略:

    • 要查看命名空间中定义的多网络策略对象,请输入以下命令:

      $ oc get multi-networkpolicy
    • 可选: 要检查特定的多网络策略,请输入以下命令:

      $ oc describe multi-networkpolicy <policy_name> -n <namespace>

      其中:

      <policy_name>
      指定要检查的多网络策略的名称。
      <namespace>
      可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。

13.4.3.5. 删除多网络策略

您可以删除命名空间中的多网络策略。

先决条件

  • 集群使用支持 NetworkPolicy 对象的集群网络供应商,如 OVN-Kubernetes 网络供应商或设置了 mode: NetworkPolicy 的 OpenShift SDN 网络供应商。此模式是 OpenShift SDN 的默认模式。
  • 已安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。
  • 您在存在多网络策略的命名空间中工作。

流程

  • 要删除多网络策略对象,请输入以下命令:

    $ oc delete multi-networkpolicy <policy_name> -n <namespace>

    其中:

    <policy_name>
    指定多网络策略的名称。
    <namespace>
    可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。

    输出示例

    multinetworkpolicy.k8s.cni.cncf.io/default-deny deleted

13.4.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.