8.3. 生成网络策略
Kubernetes 网络策略控制哪些 pod 接收传入的网络流量,以及哪些 pod 可以发送传出流量。通过使用网络策略来启用和禁用 pod 的流量,您可以限制网络攻击面。
这些网络策略是 YAML 配置文件。通常很难深入了解网络流,并手动创建这些文件。Red Hat Advanced Cluster Security for Kubernetes 允许您根据环境中实际观察的网络流量流来自动生成这些网络策略。
您可以从网络图形视图生成网络策略。
生成的策略应用到网络图中显示的部署,它们允许所选时间观察到的所有网络流量。
流程
- 在 RHACS 门户中,从左侧导航菜单中选择 Network Graph。
- 如果还没有选择正确的,请在顶栏的菜单中选择集群名称。
- 选择一个或多个命名空间。
- 如果只想为某些部署生成策略,请使用 Add one or multiple deployment filters 字段来添加用于过滤部署的条件。如果没有添加过滤器,Red Hat Advanced Cluster Security for Kubernetes 会为集群中的所有部署生成策略。
- 从顶栏的菜单中,选择适当的时间。如果选择的时间太短,它会留下定期或不经常的网络通信。
- 选择 Network Policy Simulator。
- 在打开的面板中,如果您不希望在 Red Hat Advanced Cluster Security for Kubernetes 生成的策略中限定端口和协议,请选择 Exclude 端口 & amp; 协议。
- 选择 Generate and simulate network policies。生成的网络策略配置 YAML 在同一个面板中打开,网络图则显示策略的影响。
8.3.1. 保存生成的策略 复制链接链接已复制到粘贴板!
您可以从 Red Hat Advanced Cluster Security for Kubernetes 下载并保存生成的网络策略。使用此选项将策略提交到 Git 等版本控制系统中。
流程
- 选择 Network Policy Simulator 面板中的 Download YAML 图标。
8.3.2. 测试生成的策略 复制链接链接已复制到粘贴板!
下载 Red Hat Advanced Cluster Security for Kubernetes 生成的网络策略后,您可以通过将其应用到集群来测试它们。
流程
要使用保存的 YAML 文件创建策略,请使用以下命令:
oc create -f "<generated_file>.yaml"
$ oc create -f "<generated_file>.yaml"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
如果生成的策略造成问题,您可以通过运行以下命令来删除它们:
oc delete -f "<generated_file>.yaml"
$ oc delete -f "<generated_file>.yaml"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
8.3.3. 应用生成的策略 复制链接链接已复制到粘贴板!
您可以从 RHACS 门户应用生成的网络策略。
流程
- 要在 Red Hat Advanced Cluster Security for Kubernetes 中直接应用生成的策略,请选择 Apply Network Policies。
直接应用网络策略可能会导致运行应用程序出现问题。在将网络策略应用到生产工作负载之前,始终在开发环境或测试集群中下载并测试网络策略。
8.3.4. 删除生成的策略 复制链接链接已复制到粘贴板!
如果您直接应用生成的策略并希望删除它们,请在 Network Policy Simulator 面板中选择 Revert 最近应用的 YAML 图标。
流程
- 在 RHACS 门户中,从左侧导航菜单中选择 Network Graph。
- 如果还没有选择正确的,请在顶栏的菜单中选择集群名称。
- 选择一个或多个命名空间。
- 选择 Network Policy Simulator。
- 选择 View active YAMLS。
- 选择 Revert 最近应用的 YAML 图标。
8.3.5. 删除所有自动生成的策略 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Advanced Cluster Security for Kubernetes 从您创建的集群中删除所有生成的策略。
流程
运行以下命令:
在 OpenShift Container Platform 中:
oc get ns -o jsonpath='{.items[*].metadata.name}' | xargs -n 1 oc delete networkpolicies -l 'network-policy-generator.stackrox.io/generated=true' -n$ oc get ns -o jsonpath='{.items[*].metadata.name}' | xargs -n 1 oc delete networkpolicies -l 'network-policy-generator.stackrox.io/generated=true' -nCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Kubernetes:
kubectl get ns -o jsonpath='{.items[*].metadata.name}' | xargs -n 1 kubectl delete networkpolicies -l 'network-policy-generator.stackrox.io/generated=true' -n$ kubectl get ns -o jsonpath='{.items[*].metadata.name}' | xargs -n 1 kubectl delete networkpolicies -l 'network-policy-generator.stackrox.io/generated=true' -nCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.6. 策略生成策略 复制链接链接已复制到粘贴板!
当您自动生成网络策略时:
Red Hat Advanced Cluster Security for Kubernetes 为命名空间中的每个部署生成一个网络策略。策略的 pod 选择器是部署的 pod 选择器。
- 如果部署已有网络策略,Red Hat Advanced Cluster Security for Kubernetes 不会生成新的策略或删除现有的策略。
生成的策略只将流量限制到现有部署。
- 您稍后创建的部署不会有任何限制,除非您为它们创建或生成新的网络策略。
- 如果新部署需要与具有网络策略的部署联系,您可能需要编辑网络策略以允许访问。
-
每个策略的名称与部署名称相同,前缀为
stackrox-generated-。例如,生成的网络策略中的部署depABC的策略名称为stackrox-generated-depABC。所有生成的策略也都有一个标识标签。 Red Hat Advanced Cluster Security for Kubernetes 会生成一条规则,允许来自任何 IP 地址的流量(如果:
- 部署在所选时间内具有来自集群外部的传入连接,或者
- 部署通过节点端口或负载均衡器服务公开。
Red Hat Advanced Cluster Security for Kubernetes 为每个有传入连接部署生成一个
入口规则。- 对于同一命名空间中的部署,此规则使用来自其他部署的 pod 选择器标签。
-
对于不同命名空间中的部署,此规则使用命名空间选择器。为了实现此目的,Red Hat Advanced Cluster Security for Kubernetes 会自动为每个命名空间添加一个标签
namespace.metadata.stackrox.io/name。
在个别情况下,如果独立 pod 没有任何标签,则生成的策略允许来自或到 pod 的整个命名空间的流量。