8.2. 关于从网络图形生成策略
Kubernetes 网络策略控制哪些 pod 接收传入的网络流量,以及哪些 pod 可以发送传出流量。通过使用网络策略来启用和禁用 pod 的流量,您可以限制网络攻击面。
这些网络策略是 YAML 配置文件。通常很难深入了解网络流,并手动创建这些文件。您可以使用 RHACS 生成这些文件。当您自动生成网络策略时,RHACS 遵循以下准则:
RHACS 为命名空间中的每个部署生成一个网络策略。策略的 pod 选择器是部署的 pod 选择器。
如果部署已经有网络策略,RHACS 不会生成新策略或删除现有的策略。
生成的策略只将流量限制到现有部署。
- 除非为它们创建或生成新的网络策略,否则稍后创建的部署不会没有任何限制。
- 如果新部署需要与具有网络策略的部署联系,您可能需要编辑网络策略以允许访问。
-
每个策略的名称与部署名称相同,前缀为
stackrox-generated-。例如,生成的网络策略中的部署depABC的策略名称为stackrox-generated-depABC。所有生成的策略也都有一个标识标签。 如果满足以下条件之一,RHACS 会生成一条规则,允许来自任何 IP 地址的流量:
- 部署在所选时间内具有来自集群外部的连接
- 部署通过节点端口或负载均衡器服务公开
RHACS 为每个来自有传入连接的部署生成一个
入口规则。- 对于同一命名空间中的部署,此规则使用来自其他部署的 pod 选择器标签。
-
对于不同命名空间中的部署,此规则使用命名空间选择器。为了实现此目的,RHACS 会自动将标签
namespace.metadata.stackrox.io/name添加到每个命名空间中。
在个别情况下,如果独立 pod 没有任何标签,则生成的策略允许来自或到 pod 的整个命名空间的流量。
8.2.1. 在网络图中生成网络策略 复制链接链接已复制到粘贴板!
RHACS 允许您根据环境中观察到的网络通信流自动生成网络策略。
您可以从网络图生成网络策略。
生成的策略应用到当前选择的集群中存在的所有部署,它们允许基准发现期间内观察到的所有网络流量。
流程
- 在 RHACS 门户中,导航到 Network Graph。
- 选择一个集群,然后选择一个或多个命名空间。
- 在网络图形标头中,选择 Simulate 网络策略。RHACS 为所选集群中存在的所有部署生成策略。
- 可选:在打开的信息面板中,如果您不希望在 RHACS 生成的策略中限制 端口和协议,请选择 Exclude ports & amp; protocol。
- 选择 Generate and simulate network policies。生成的网络策略配置 YAML 文件在同一面板中打开,网络图则显示策略的影响。
8.2.2. 在网络图中保存生成的策略 复制链接链接已复制到粘贴板!
您可以从 RHACS 下载并保存生成的网络策略。使用此选项下载策略,以便您可以将策略提交到 Git 等版本控制系统中。
流程
- 生成网络策略后,点 Network Policy Simulator 面板中的 Download YAML 图标。
8.2.3. 在网络图中测试生成的策略 复制链接链接已复制到粘贴板!
下载 RHACS 生成的网络策略后,您可以通过将它们应用到集群来测试它们。
流程
直接应用网络策略可能会导致运行应用程序出现问题。在将网络策略应用到生产工作负载之前,始终在开发环境或测试集群中下载并测试网络策略。
8.2.4. 在网络图中应用生成的策略 复制链接链接已复制到粘贴板!
您不能直接在网络图中应用生成的网络策略。作为自动化流程的一部分应用 Kubernetes 网络策略。
8.2.5. 在网络图中恢复到之前应用的策略 复制链接链接已复制到粘贴板!
您可以删除策略并恢复到之前应用的策略。
流程
- 在 RHACS 门户中,导航到 Network Graph。
- 从顶部栏中的菜单中选择集群名称。
- 选择一个或多个命名空间和部署。
- 选择 Simulate 网络策略。
- 选择 View active YAMLS。
在 Actions 菜单中,选择 Revert 规则来之前应用的 YAML。
警告直接应用网络策略可能会导致运行应用程序出现问题。在将网络策略应用到生产工作负载之前,始终在开发环境或测试集群中下载并测试网络策略。
8.2.6. 删除网络图中自动生成的所有策略 复制链接链接已复制到粘贴板!
您可以使用 RHACS 从集群中删除所有自动生成的策略。
流程
运行以下命令:
$ oc get ns -o jsonpath='{.items[*].metadata.name}' | \ xargs -n 1 oc delete networkpolicies -l \ 'network-policy-generator.stackrox.io/generated=true' -n1 - 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。