6.3. 网络策略
6.3.1. 关于网络策略 复制链接链接已复制到粘贴板!
作为开发者,您可以定义网络策略来限制集群中 pod 的流量。
6.3.1.1. 关于网络策略 复制链接链接已复制到粘贴板!
在使用支持 Kubernetes 网络策略的网络插件的集群中,网络隔离完全由 NetworkPolicy
对象控制。在 OpenShift Container Platform 4.16 中,OpenShift SDN 支持在默认的网络隔离模式中使用网络策略。
- 网络策略不适用于主机网络命名空间。启用主机网络的 Pod 不受网络策略规则的影响。但是,连接到 host-networked pod 的 pod 会受到网络策略规则的影响。
-
使用没有将
podSelector
字段设置为{}
的namespaceSelector
字段将不会包括hostNetwork
pod。您必须使用namespaceSelector
字段,podSelector
设置为{}
,以便在创建网络策略时目标hostNetwork
pod。 - 网络策略无法阻止来自 localhost 或来自其驻留的节点的流量。
默认情况下,项目中的所有 pod 都可被其他 pod 和网络端点访问。要在一个项目中隔离一个或多个 Pod,您可以在该项目中创建 NetworkPolicy
对象来指示允许的入站连接。项目管理员可以在自己的项目中创建和删除 NetworkPolicy
对象。
如果一个 pod 由一个或多个 NetworkPolicy
对象中的选择器匹配,那么该 pod 将只接受至少被其中一个 NetworkPolicy
对象所允许的连接。未被任何 NetworkPolicy
对象选择的 pod 可以完全访问。
网络策略仅适用于传输控制协议(TCP)、用户数据报协议(UDP)、互联网控制消息协议(ICMP)和流控制传输协议(SCTP)协议。其他协议不会受到影响。
以下示例 NetworkPolicy
对象演示了支持不同的情景:
拒绝所有流量:
要使项目默认为拒绝流量,请添加一个匹配所有 pod 但不接受任何流量的
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只允许 OpenShift Container Platform Ingress Controller 的连接:
要使项目只允许 OpenShift Container Platform Ingress Controller 的连接,请添加以下
NetworkPolicy
对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只接受项目中 pod 的连接:
重要要允许同一命名空间中的
hostNetwork
pod 的入站连接,您需要将allow-from-hostnetwork
策略与allow-same-namespace
策略一起应用。要使 pod 接受同一项目中其他 pod 的连接,但拒绝其他项目中所有 pod 的连接,请添加以下
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仅允许基于 pod 标签的 HTTP 和 HTTPS 流量:
要对带有特定标签(以下示例中的
role=frontend
)的 pod 仅启用 HTTP 和 HTTPS 访问,请添加类似如下的NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用命名空间和 pod 选择器接受连接:
要通过组合使用命名空间和 pod 选择器来匹配网络流量,您可以使用类似如下的
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
NetworkPolicy
对象是可添加的;也就是说,您可以组合多个 NetworkPolicy
对象来满足复杂的网络要求。
例如,对于以上示例中定义的 NetworkPolicy
对象,您可以在同一个项目中定义 allow-same-namespace
和 allow-http-and-https
策略。因此,允许带有标签 role=frontend
的 pod 接受每一策略所允许的任何连接。即,任何端口上来自同一命名空间中的 pod 的连接,以及端口 80
和 443
上的来自任意命名空间中 pod 的连接。
6.3.1.1.1. 使用 allow-from-router 网络策略 复制链接链接已复制到粘贴板!
使用以下 NetworkPolicy
来允许外部流量,而不考虑路由器配置:
- 1
policy-group.network.openshift.io/ingress:""
标签支持 OpenShift-SDN 和 OVN-Kubernetes。
6.3.1.1.2. 使用 allow-from-hostnetwork 网络策略 复制链接链接已复制到粘贴板!
添加以下 allow-from-hostnetwork
NetworkPolicy
对象来指示来自主机网络 pod 的流量。
6.3.1.2. 使用 OpenShift SDN 优化网络策略 复制链接链接已复制到粘贴板!
使用一个网络策略来通过 pod 上的不同标签来在命名空间中将不同 pod 进行隔离。
将 NetworkPolicy
对象应用到单一命名空间中的大量 pod 时,效率较低。因为 Pod 标签不存在于 IP 地址一级,因此网络策略会为使用 podSelector
选择的每个 pod 之间生成单独的 Open vSwitch(OVS)流量规则 。
例如,在一个 NetworkPolicy
对象中,如果 spec podSelector
和 ingress podSelector
每个都匹配 200 个 pod,则会产生 40,000 (200*200) OVS 流规则。这可能会减慢节点的速度。
在设计您的网络策略时,请参考以下指南:
使用命名空间使其包含需要隔离的 pod 组,可以减少 OVS 流规则数量。
使用
namespaceSelector
或空podSelector
选择整个命名空间的NetworkPolicy
对象会只生成 一个与命名空间的 VXLAN 虚拟网络 ID(VNID)匹配的 OVS 流量规则。- 保留不需要在原始命名空间中隔离的 pod,并将需要隔离的 pod 移到一个或多个不同的命名空间中。
- 创建额外的目标跨命名空间网络策略,以允许来自不同隔离的 pod 的特定流量。
6.3.1.3. 使用 OVN-Kubernetes 网络插件优化网络策略 复制链接链接已复制到粘贴板!
在设计您的网络策略时,请参考以下指南:
-
对于具有相同
spec.podSelector
spec 的网络策略,使用带有多个ingress
或egress
规则的一个网络策略比带有ingress
或egress
子集的多个网络策略更高效。 每个基于
podSelector
或namespaceSelector
spec 的ingress
或egress
规则会生成一个的 OVS 流数量,它与由网络策略选择的 pod 数量 + 由 ingress 或 egress 选择的 pod 数量
成比例因此,最好使用在一个规则中可以选择您所需的 pod 的podSelector
或namespaceSelector
规格,而不是为每个 pod 创建单独的规则。例如,以下策略包含两个规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下策略表示这两个规则与以下相同的规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 相同的指南信息适用于
spec.podSelector
spec。如果不同的网络策略有相同的ingress
或egress
规则,则创建一个带有通用的spec.podSelector
spec 可能更有效率。例如,以下两个策略有不同的规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下网络策略将这两个相同的规则作为一个:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当只有多个选择器表示为一个选择器时,您可以应用此优化。如果选择器基于不同的标签,则可能无法应用此优化。在这些情况下,请考虑为网络策略优化应用一些新标签。
6.3.1.3.1. OVN-Kubernetes 中的 NetworkPolicy CR 和外部 IP 复制链接链接已复制到粘贴板!
在 OVN-Kubernetes 中,NetworkPolicy
自定义资源(CR)强制执行严格的隔离规则。如果服务使用外部 IP 公开,网络策略可以阻止来自其他命名空间的访问,除非明确配置为允许流量。
要允许在命名空间间访问外部 IP,请创建一个 NetworkPolicy
CR,该 CR 明确允许来自所需命名空间的入口流量,并确保允许流量在指定的服务端口中。在不允许流量到所需端口的情况下,访问可能仍然会被限制。
输出示例
其中:
<policy_name>
- 指定策略的名称。
<my_namespace>
- 指定部署策略的命名空间的名称。
如需了解更多详细信息,请参阅"关于网络策略"。
6.3.1.4. 后续步骤 复制链接链接已复制到粘贴板!
6.3.2. 创建网络策略 复制链接链接已复制到粘贴板!
作为具有 admin
角色的用户,您可以为命名空间创建网络策略。
6.3.2.1. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
6.3.2.2. 使用 CLI 创建网络策略 复制链接链接已复制到粘贴板!
要定义细致的规则来描述集群中命名空间允许的入口或出口网络流量,您可以创建一个网络策略。
如果使用具有 cluster-admin
角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建策略规则:
创建一个
<policy_name>.yaml
文件:touch <policy_name>.yaml
$ touch <policy_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>
- 指定网络策略文件名。
在您刚才创建的文件中定义网络策略,如下例所示:
拒绝来自所有命名空间中的所有 pod 的入口流量
这是一个基本的策略,阻止配置其他网络策略所允许的跨 pod 流量以外的所有跨 pod 网络。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许来自所有命名空间中的所有 pod 的入口流量
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许从特定命名空间中到一个 pod 的入口流量
此策略允许流量从在
namespace-y
中运行的 pod 中获取pod-a
标签。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建网络策略对象。成功输出列出了策略对象的名称
以及创建
的状态。oc apply -f <policy_name>.yaml -n <namespace>
$ oc apply -f <policy_name>.yaml -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>
- 指定网络策略文件名。
<namespace>
- 可选参数。如果您在与当前命名空间不同的命名空间中定义了对象,则参数会特定于命名空间。
成功输出列出了策略对象的名称
以及创建
的状态。
如果您使用 cluster-admin
权限登录到 web 控制台,您可以选择在集群中的任何命名空间中以 YAML 或 web 控制台的形式创建网络策略。
6.3.2.3. 创建默认拒绝所有网络策略 复制链接链接已复制到粘贴板!
此策略会阻止由配置其他部署的网络策略和主机网络 pod 间的网络流量允许的所有跨 pod 网络。此流程通过在 my-project
命名空间中应用 deny-by-default
策略来强制实施强大的拒绝策略。
如果没有配置允许流量通信的 NetworkPolicy
自定义资源(CR),以下策略可能会导致集群中的通信问题。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建以下 YAML,以定义
deny-by-default
策略,以拒绝所有命名空间中的所有 pod 的入口流量。将 YAML 保存到deny-by-default.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建
的状态。oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建
的状态。
6.3.2.4. 创建网络策略以允许来自外部客户端的流量 复制链接链接已复制到粘贴板!
使用 deny-by-default
策略,您可以继续配置策略,允许从外部客户端到带有标签 app=web
的 pod 的流量。
如果使用具有 cluster-admin
角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
按照以下步骤配置策略,以直接从公共互联网允许外部服务,或使用 Load Balancer 访问 pod。只有具有标签 app=web
的 pod 才允许流量。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建策略,以直接从公共互联网的流量或使用负载均衡器访问 pod。将 YAML 保存到
web-allow-external.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建
的状态。oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建
的状态。此策略允许来自所有资源的流量,包括下图所示的外部流量:
6.3.2.5. 创建网络策略,允许从所有命名空间中到应用程序的流量 复制链接链接已复制到粘贴板!
如果使用具有 cluster-admin
角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
按照以下步骤配置允许从所有命名空间中的所有 pod 流量到特定应用程序的策略。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建一个策略,允许从所有命名空间中的所有 pod 流量到特定应用。将 YAML 保存到
web-allow-all-namespaces.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,如果您没有在策略对象中指定
namespaceSelector
参数,则不会选择命名空间。这意味着策略只允许从网络策略部署的命名空间的流量。输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建
的状态。oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建
的状态。
验证
输入以下命令在
default
命名空间中启动 web 服务:oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在
secondary
命名空间中部署alpine
镜像并启动 shell:oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察该服务是否允许请求:
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.2.6. 创建网络策略,允许从一个命名空间中到应用程序的流量 复制链接链接已复制到粘贴板!
如果使用具有 cluster-admin
角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
按照以下步骤配置允许从特定命名空间中到带有 app=web
标签的 pod 的策略。您可能需要进行以下操作:
- 将流量限制为部署了生产工作负载的命名空间。
- 启用部署到特定命名空间的监控工具,以从当前命名空间中提取指标。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建一个策略,允许来自特定命名空间中所有 pod 的流量,其标签为
purpose=production
。将 YAML 保存到web-allow-prod.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建
的状态。oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建
的状态。
验证
输入以下命令在
default
命名空间中启动 web 服务:oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
prod
命名空间:oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
prod
命名空间:oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
dev
命名空间:oc create namespace dev
$ oc create namespace dev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
dev
命名空间:oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在
dev
命名空间中部署alpine
镜像并启动 shell:oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察请求的原因。例如,预期的输出状态为
wget:下载超时
。wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
prod
命名空间中部署alpine
镜像并启动 shell:oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察是否允许请求:
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. 查看网络策略 复制链接链接已复制到粘贴板!
以具有 admin
角色的用户,您可以查看命名空间的网络策略。
6.3.3.1. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
6.3.3.2. 使用 CLI 查看网络策略 复制链接链接已复制到粘贴板!
您可以检查命名空间中的网络策略。
如果使用具有 cluster-admin
角色的用户登录,您可以查看集群中的任何网络策略。
前提条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
admin
权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
列出命名空间中的网络策略:
要查看命名空间中定义的网络策略对象,请输入以下命令:
oc get networkpolicy
$ oc get networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要检查特定的网络策略,请输入以下命令:
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>
- 指定要检查的网络策略的名称。
<namespace>
- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
例如:
oc describe networkpolicy allow-same-namespace
$ oc describe networkpolicy allow-same-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe
命令的输出Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您使用 cluster-admin
权限登录到 web 控制台,您可以选择在集群中的任何命名空间中以 YAML 或 web 控制台的形式查看网络策略。
6.3.4. 编辑网络策略 复制链接链接已复制到粘贴板!
作为具有 admin
角色的用户,您可以编辑命名空间的现有网络策略。
6.3.4.1. 编辑网络策略 复制链接链接已复制到粘贴板!
您可以编辑命名空间中的网络策略。
如果使用具有 cluster-admin
角色的用户登录,则可以在集群中的任何命名空间中编辑网络策略。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
admin
权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
可选: 要列出一个命名空间中的网络策略对象,请输入以下命令:
oc get networkpolicy
$ oc get networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>
- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
编辑网络策略对象。
如果您在文件中保存了网络策略定义,请编辑该文件并进行必要的更改,然后输入以下命令。
oc apply -n <namespace> -f <policy_file>.yaml
$ oc apply -n <namespace> -f <policy_file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>
- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
<policy_file>
- 指定包含网络策略的文件的名称。
如果您需要直接更新网络策略对象,请输入以下命令:
oc edit networkpolicy <policy_name> -n <namespace>
$ oc edit networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>
- 指定网络策略的名称。
<namespace>
- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
确认网络策略对象已更新。
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>
- 指定网络策略的名称。
<namespace>
- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
如果您使用 cluster-admin
权限登录到 web 控制台,您可以选择在集群中的任何命名空间中以 YAML 或通过 Actions 菜单从 web 控制台中的策略编辑网络策略。
6.3.4.2. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
6.3.5. 删除网络策略 复制链接链接已复制到粘贴板!
以具有 admin
角色的用户,您可以从命名空间中删除网络策略。
6.3.5.1. 使用 CLI 删除网络策略 复制链接链接已复制到粘贴板!
您可以删除命名空间中的网络策略。
如果使用具有 cluster-admin
角色的用户登录,您可以删除集群中的任何网络策略。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
要删除网络策略对象,请输入以下命令。成功输出列出了策略对象的名称以及
已删除的
状态。oc delete networkpolicy <policy_name> -n <namespace>
$ oc delete networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>
- 指定网络策略的名称。
<namespace>
- 可选参数。如果您在与当前命名空间不同的命名空间中定义了对象,则参数会特定于命名空间。
成功输出列出了策略对象的名称以及
已删除的
状态。
如果使用 cluster-admin
权限登录到 web 控制台,您可以选择在集群上以 YAML 或通过 Actions 菜单从 web 控制台中的策略删除网络策略。
6.3.6. 为项目定义默认网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在创建新项目时修改新项目模板,使其自动包含网络策略。如果您还没有新项目的自定义模板,则需要首先创建一个。
6.3.6.1. 为新项目修改模板 复制链接链接已复制到粘贴板!
作为集群管理员,您可以修改默认项目模板,以便使用自定义要求创建新项目。
创建自己的自定义项目模板:
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。
流程
-
以具有
cluster-admin
特权的用户身份登录。 生成默认项目模板:
oc adm create-bootstrap-project-template -o yaml > template.yaml
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用文本编辑器,通过添加对象或修改现有对象来修改生成的
template.yaml
文件。 项目模板必须创建在
openshift-config
命名空间中。加载修改后的模板:oc create -f template.yaml -n openshift-config
$ oc create -f template.yaml -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Web 控制台或 CLI 编辑项目配置资源。
使用 Web 控制台:
-
导航至 Administration
Cluster Settings 页面。 - 单击 Configuration 以查看所有配置资源。
- 找到 Project 的条目,并点击 Edit YAML。
-
导航至 Administration
使用 CLI:
编辑
project.config.openshift.io/cluster
资源:oc edit project.config.openshift.io/cluster
$ oc edit project.config.openshift.io/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
更新
spec
部分,使其包含projectRequestTemplate
和name
参数,再设置您上传的项目模板的名称。默认名称为project-request
。带有自定义项目模板的项目配置资源
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改后,创建一个新项目来验证是否成功应用了您的更改。
6.3.6.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
$ oc edit template <project_template> -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<project_template>
替换为您为集群配置的缺省模板的名称。默认模板名称为project-request
。在模板中,将每个
NetworkPolicy
对象作为一个元素添加到objects
参数中。objects
参数可以是一个或多个对象的集合。在以下示例中,
objects
参数集合包括几个NetworkPolicy
对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:创建一个新项目,并确认您的网络策略对象成功创建。
创建一个新项目
oc new-project <project>
$ oc new-project <project>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<project>
替换为您要创建的项目的名称。
确认新项目模板中的网络策略对象存在于新项目中:
oc get networkpolicy
$ oc get networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出:
NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7s
NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.7. 使用网络策略配置多租户隔离 复制链接链接已复制到粘贴板!
作为集群管理员,您可以配置网络策略以为多租户网络提供隔离功能。
如果使用 OpenShift SDN 网络插件,请按照本节所述配置网络策略,提供类似于多租户模式的网络隔离,但设置了网络策略模式。
6.3.7.1. 使用网络策略配置多租户隔离 复制链接链接已复制到粘贴板!
您可以配置项目,使其与其他项目命名空间中的 pod 和服务分离。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如 OVN-Kubernetes 网络插件或设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。此模式是 OpenShift SDN 的默认模式。 -
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
admin
权限的用户登陆到集群。
流程
创建以下
NetworkPolicy
对象:名为
allow-from-openshift-ingress
的策略。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意policy-group.network.openshift.io/ingress: ""
是 OpenShift SDN 的首选命名空间选择器标签。您可以使用network.openshift.io/policy-group: ingress
命名空间选择器标签,但这是一个比较旧的用法。名为
allow-from-openshift-monitoring
的策略:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名为
allow-same-namespace
的策略:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名为
allow-from-kube-apiserver-operator
的策略:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多详细信息,请参阅 新的
kube-apiserver-operator
Webhook 控制器验证 Webhook 的健康状况。
可选: 要确认当前项目中存在网络策略,请输入以下命令:
oc describe networkpolicy
$ oc describe networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow