6.6. 使用 NetworkPolicy 配置多租户隔离
您可以配置项目,使其与其他项目中的 Pod 和服务分离。
先决条件
-
使用 OpenShift SDN 网络插件的集群,并设置了
mode: NetworkPolicy
。此模式是 OpenShift SDN 的默认模式。 -
安装 OpenShift 命令行界面 (CLI),通常称为
oc
。 - 您必须登录集群。
流程
创建包含 NetworkPolicy 对象定义的以下文件:
名为
allow-from-openshift-ingress.yaml
的文件,包含以下内容: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
名为
allow-from-openshift-monitoring.yaml
的文件,包含以下内容:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-openshift-monitoring spec: ingress: - from: - namespaceSelector: matchLabels: network.openshift.io/policy-group: monitoring podSelector: {} policyTypes: - Ingress
对于每个策略文件,运行以下命令来创建 NetworkPolicy 对象:
$ oc apply -f <policy-name>.yaml \ 1 -n <project> 2
如果
default
Ingress Controller 配置设置了spec.endpointPublishingStrategy: HostNetwork
值,您需要为default
OpenShift Container Platform 命名空间添加一个标记来允许 Ingress Controller 和项目间的网络流量:确定您的
default
Ingress Controller 是否使用了HostNetwork
端点发布策略:$ oc get --namespace openshift-ingress-operator ingresscontrollers/default \ --output jsonpath='{.status.endpointPublishingStrategy.type}'
如果上个命令报告了端点发布策略为
HostNetwork
,在default
命名空间中设置一个标记:$ oc label namespace default 'network.openshift.io/policy-group=ingress'
可选:运行以下命令确认当前项目中存在 NetworkPolicy 对象:
$ oc get networkpolicy <policy-name> -o yaml
在以下示例中会显示
allow-from-openshift-ingress
NetworkPolicy 对象:$ oc get networkpolicy allow-from-openshift-ingress -o yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-openshift-ingress namespace: project1 spec: ingress: - from: - namespaceSelector: matchLabels: network.openshift.io/policy-group: ingress podSelector: {} policyTypes: - Ingress