第 8 章 构建时网络策略工具
构建时网络策略工具可让您使用 roxctl
CLI 在开发和操作工作流中自动创建和验证 Kubernetes 网络策略。这些工具与包含项目工作负载和网络策略清单的指定文件目录一起工作,不需要 RHACS 身份验证。
命令 | 描述 |
---|---|
| 通过分析指定目录中的项目的 YAML 清单来生成 Kubernetes 网络策略。如需更多信息,请参阅使用 build-time 网络策略生成器。 |
|
通过检查工作负载和 Kubernetes 网络策略清单,列出项目目录中工作负载之间允许的连接。您可以使用各种文本格式或图形 |
|
在两个项目版本之间,创建允许连接的变体列表。这由每个版本目录中的工作负载和 Kubernetes 网络策略清单决定。此功能显示语义差异,这在执行源代码(syntic) |
8.1. 构建时网络策略生成器
构建时网络策略生成器可以根据应用程序 YAML 清单自动生成 Kubernetes 网络策略。在在集群中部署应用程序前,您可以使用它来开发网络策略作为持续集成/持续部署(CI/CD)管道的一部分。
红帽在与 NP-Guard 项目的开发人员 合作开发了此功能。首先,构建时网络策略生成器会分析本地文件夹中的 Kubernetes 清单,包括服务清单、配置映射和工作负载清单,如 Pod
、Deployment
、ReplicaSet
、Job
、DaemonSet
和 StatefulSet
。然后,它会发现所需的连接,并创建 Kubernetes 网络策略来实现 pod 隔离。这些策略不允许多于所需的入口和出口流量。
8.1.1. 使用构建时网络策略生成器
build-time 网络策略生成器包含在 roxctl
CLI 中。对于构建网络策略生成功能,roxctl
CLI 不需要与 RHACS Central 通信,因此您可以在任何开发环境中使用它。
先决条件
-
build-time 网络策略生成器递归扫描您在运行命令时指定的目录。因此,在运行该命令前,您必须已具有服务清单、配置映射和工作负载清单,如
Pod
、Deployment
、ReplicaSet
、Job
、DaemonSet
和StatefulSet
作为指定目录中的 YAML 文件。 -
使用
kubectl apply -f
命令验证这些 YAML 文件。build-time 网络策略生成器不适用于使用 Helm 样式模板的文件。 验证服务网络地址没有硬编码。需要连接到服务的每个工作负载都必须将服务网络地址指定为变量。您可以使用工作负载的资源环境变量或配置映射来指定此变量。
服务网络地址必须与以下官方正则表达式模式匹配:
(http(s)?://)?<svc>(.<ns>(.svc.cluster.local)?)?(:<portNum>)? 1
- 1
- 在这种模式中,
- <svc> 是服务名称。
- <ns> 是定义该服务的命名空间。
- <portNum> 是公开的服务端口号。
以下是与模式匹配的一些示例:
-
wordpress-mysql:3306
-
redis-follower.redis.svc.cluster.local:6379
-
redis-leader.redis
-
http://rating-service.
流程
运行 help 命令验证构建网络策略生成功能是否可用:
$ roxctl netpol generate -h
使用
netpol generate
命令生成策略:$ roxctl netpol generate <folder_path> [flags] 1
- 1
- 指定文件夹的路径,其中可以包含包含用于分析的 YAML 资源的子文件夹。命令扫描整个子文件夹树。另外,您还可以指定参数来更改命令的行为。
后续步骤
- 在生成策略后,您必须检查它们的完整性和准确性,以防 YAML 文件中未指定相关的网络地址。
-
最重要的是,验证隔离策略不会阻止所需的连接。为了帮助进行此检查,您可以使用
roxctl netpol connectivity map
工具。
使用自动化将网络策略应用到集群,作为使用自动化的工作负载部署的一部分,并确保准确性。您可以通过使用拉取请求提交生成的策略来遵循 GitOps 方法,让团队有机会在将策略部署为管道的一部分前查看策略。