6.2. 创建网络策略

作为集群管理员,您可以为命名空间创建网络策略。

6.2.1. 创建 NetworkPolicy 对象

要定义细致的规则来描述集群中项目允许的 Ingress 网络流量,您可以创建 NetworkPolicy 对象。

先决条件

  • 集群使用支持 NetworkPolicy 对象的默认 CNI 网络供应商,如设置了 mode: NetworkPolicy 的 OpenShift SDN 网络供应商。此模式是 OpenShift SDN 的默认模式。
  • 安装了 OpenShift 命令行界面 (CLI),通常称为 oc
  • 使用具有 cluster-admin 权限的用户登陆到集群。

流程

  1. 创建策略规则:

    1. 创建一个 <policy-name>.yaml 文件,其中 <policy-name> 描述策略规则。
    2. 在刚才创建的文件中,定义一个策略对象,如下例所示:

      kind: NetworkPolicy
      apiVersion: networking.k8s.io/v1
      metadata:
        name: <policy-name> 1
      spec:
        podSelector:
        ingress: []
      1
      为策略对象指定一个名称。
  2. 运行以下命令来创建策略对象:

    $ oc create -f <policy-name>.yaml -n <project>

    在以下示例中,在名为 project1 的项目中创建一个新 NetworkPolicy 对象:

    $ oc create -f default-deny.yaml -n project1

    输出示例

    networkpolicy "default-deny" created

6.2.2. 示例 NetworkPolicy 对象

下文解释了示例 NetworkPolicy 对象:

kind: NetworkPolicy
apiVersion: extensions/v1beta1
metadata:
  name: allow-27107 1
spec:
  podSelector: 2
    matchLabels:
      app: mongodb
  ingress:
  - from:
    - podSelector: 3
        matchLabels:
          app: app
    ports: 4
    - protocol: TCP
      port: 27017
1
NetworkPolicy 对象的名称
2
一个选择器(selector)用于描述策略应用到的 Pod。策略对象只能选择定义了 NetworkPolicy 对象的项目中的 Pod。
3
与策略对象允许从其传入流量的 Pod 匹配的选择器。选择器将匹配任何项目中的 Pod。
4
接受流量的一个或多个目标端口的列表。