×

作为集群管理员,您可以修改新项目模板,以便在创建新项目时自动包含网络策略。如果您还没有为新项目定制模板,则必须先创建一个。

修改新项目的模板

作为集群管理员,您可以修改默认项目模板,以便使用自定义需求创建新项目。

创建您自己的自定义项目模板

先决条件
  • 您可以使用具有cluster-admin权限的帐户访问OpenShift Container Platform集群。

步骤
  1. 以具有cluster-admin权限的用户身份登录。

  2. 生成默认项目模板

    $ oc adm create-bootstrap-project-template -o yaml > template.yaml
  3. 使用文本编辑器修改生成的template.yaml文件,添加对象或修改现有对象。

  4. 项目模板必须在openshift-config命名空间中创建。加载您修改后的模板

    $ oc create -f template.yaml -n openshift-config
  5. 使用Web控制台或CLI编辑项目配置资源。

    • 使用Web控制台

      1. 导航到**管理** → **集群设置**页面。

      2. 点击**配置**查看所有配置资源。

      3. 找到**项目**条目并点击**编辑YAML**。

    • 使用CLI

      1. 编辑project.config.openshift.io/cluster资源

        $ oc edit project.config.openshift.io/cluster
  6. 更新spec部分以包含projectRequestTemplatename参数,并设置您上传的项目模板的名称。默认名称为project-request

    具有自定义项目模板的项目配置资源
    apiVersion: config.openshift.io/v1
    kind: Project
    metadata:
    # ...
    spec:
      projectRequestTemplate:
        name: <template_name>
    # ...
  7. 保存更改后,创建一个新项目以验证您的更改是否已成功应用。

向新的项目模板添加网络策略

作为集群管理员,您可以向新项目的默认模板添加网络策略。OpenShift Container Platform将自动在项目中创建模板中指定的全部NetworkPolicy对象。

先决条件
  • 您的集群使用支持NetworkPolicy对象的默认CNI网络插件,例如OVN-Kubernetes。

  • 您已安装OpenShift CLI (oc)。

  • 您必须使用具有cluster-admin权限的用户登录集群。

  • 您必须为新项目创建自定义的默认项目模板。

步骤
  1. 通过运行以下命令编辑新项目的默认模板

    $ oc edit template <project_template> -n openshift-config

    <project_template>替换为您为集群配置的默认模板的名称。默认模板名称为project-request

  2. 在模板中,将每个NetworkPolicy对象作为元素添加到objects参数。objects参数接受一个或多个对象的集合。

    在以下示例中,objects参数集合包含多个NetworkPolicy对象。

    objects:
    - apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-same-namespace
      spec:
        podSelector: {}
        ingress:
        - from:
          - podSelector: {}
    - apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-openshift-ingress
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                network.openshift.io/policy-group: ingress
        podSelector: {}
        policyTypes:
        - Ingress
    - apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-kube-apiserver-operator
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: openshift-kube-apiserver-operator
            podSelector:
              matchLabels:
                app: kube-apiserver-operator
        policyTypes:
        - Ingress
    ...
  3. 可选:创建一个新项目以确认您的网络策略对象已成功创建,方法是运行以下命令

    1. 创建一个新项目

      $ oc new-project <project> (1)
      1 <project>替换为您要创建的项目的名称。
    2. 确认新项目模板中的网络策略对象存在于新项目中

      $ oc get networkpolicy
      NAME                           POD-SELECTOR   AGE
      allow-from-openshift-ingress   <none>         7s
      allow-from-same-namespace      <none>         7s