15.7. 为项目定义默认网络策略
作为集群管理员,您可以在创建新项目时修改新项目模板,使其自动包含网络策略。如果您还没有新项目的自定义模板,则需要首先创建一个。
15.7.1. 为新项目修改模板
作为集群管理员,您可以修改默认项目模板,以便使用自定义要求创建新项目。
创建自己的自定义项目模板:
流程
-
以具有
cluster-admin
特权的用户身份登录。 生成默认项目模板:
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
-
使用文本编辑器,通过添加对象或修改现有对象来修改生成的
template.yaml
文件。 项目模板必须创建在
openshift-config
命名空间中。加载修改后的模板:$ oc create -f template.yaml -n openshift-config
使用 Web 控制台或 CLI 编辑项目配置资源。
使用 Web 控制台:
-
导航至 Administration
Cluster Settings 页面。 - 单击 Configuration 以查看所有配置资源。
- 找到 Project 的条目,并点击 Edit YAML。
-
导航至 Administration
使用 CLI:
编辑
project.config.openshift.io/cluster
资源:$ oc edit project.config.openshift.io/cluster
更新
spec
部分,使其包含projectRequestTemplate
和name
参数,再设置您上传的项目模板的名称。默认名称为project-request
。带有自定义项目模板的项目配置资源
apiVersion: config.openshift.io/v1 kind: Project metadata: ... spec: projectRequestTemplate: name: <template_name>
- 保存更改后,创建一个新项目来验证是否成功应用了您的更改。
15.7.2. 在新项目模板中添加网络策略
作为集群管理员,您可以在新项目的默认模板中添加网络策略。OpenShift Container Platform 将自动创建项目中模板中指定的所有 NetworkPolicy
对象。
先决条件
-
集群使用支持
NetworkPolicy
对象的默认 CNI 网络供应商,如设置了mode: NetworkPolicy
的 OpenShift SDN 网络供应商。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
您需要使用具有
cluster-admin
权限的用户登陆到集群。 - 您必须已为新项目创建了自定义的默认项目模板。
流程
运行以下命令来编辑新项目的默认模板:
$ oc edit template <project_template> -n openshift-config
将
<project_template>
替换为您为集群配置的缺省模板的名称。默认模板名称为project-request
。在模板中,将每个
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 ...
可选:通过运行以下命令创建一个新项目,来确认您的网络策略对象已被成功创建:
创建一个新项目:
$ oc new-project <project> 1
- 1
- 将
<project>
替换为您要创建的项目的名称。
确认新项目模板中的网络策略对象存在于新项目中:
$ oc get networkpolicy NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7s