3.2.6. 创建网络策略,允许从一个命名空间中到应用程序的流量
您可以配置允许从特定命名空间中到带有 app=web 标签的 pod 的策略。
这个配置在以下情况下很有用:
- 将流量限制为部署了生产工作负载的命名空间。
- 启用部署到特定命名空间的监控工具,以从当前命名空间中提取指标。
如果使用具有 cluster-admin 角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
不要将 network.openshift.io/policy-group: ingress 标签应用到自定义命名空间或项目。该标签是 Operator 管理,为 Red Hat OpenShift Service on AWS 网络功能保留。不应在系统创建命名空间上更改。
使用此标签可能会导致网络连接不稳定、系统 NetworkPolicies 资源的意外应用程序,或者在 Operator 尝试协调状态时配置偏移。对于自定义流量分组,请始终使用唯一的、用户定义的标签,如以下步骤所示。
流程
创建一个策略,允许来自特定命名空间中所有 pod 的流量,其标签为
purpose=production。将 YAML 保存到web-allow-prod.yaml文件中:kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: web-allow-prod namespace: default spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: purpose: production其中:
app-
仅将策略应用到 default 命名空间中的
app:webpod。 目的-
将流量仅限制为具有标签
purpose=production的命名空间中的 pod。
输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建的状态。$ oc apply -f web-allow-prod.yaml
验证
输入以下命令在
default命名空间中启动 web 服务:$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80运行以下命令来创建
prod命名空间:$ oc create namespace prod运行以下命令来标记
prod命名空间:$ oc label namespace/prod purpose=production运行以下命令来创建
dev命名空间:$ oc create namespace dev运行以下命令来标记
dev命名空间:$ oc label namespace/dev purpose=testing运行以下命令在
dev命名空间中部署alpine镜像并启动 shell:$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh在 shell 中运行以下命令,并观察请求的原因。例如,预期的输出状态为
wget:下载超时。# wget -qO- --timeout=2 http://web.default运行以下命令,在
prod命名空间中部署alpine镜像并启动 shell:$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh在 shell 中运行以下命令,并观察是否允许请求:
# wget -qO- --timeout=2 http://web.default<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>