第 9 章 构建时网络策略工具
build-time 网络策略工具可让您使用 roxctl
CLI 在开发和操作工作流中自动创建和验证 Kubernetes 网络策略。这些工具可用于包含项目工作负载和网络策略清单的指定文件目录,且不需要 RHACS 身份验证。
命令 | 描述 |
---|---|
| 通过分析指定目录中的项目的 YAML 清单来生成 Kubernetes 网络策略。如需更多信息 ,请参阅使用构建时网络策略生成器。 |
|
通过检查工作负载和 Kubernetes 网络策略清单,列出项目目录中工作负载间允许的连接。您可以使用各种文本格式或图形 |
|
在允许两个项目版本之间的连接中创建一系列变化。这由每个版本的 目录中的工作负载和 Kubernetes 网络策略清单决定。此功能显示执行源代码(syntactic) |
9.1. 使用构建时网络策略生成器
构建时网络策略生成器可以根据应用程序 YAML 清单自动生成 Kubernetes 网络策略。在在集群中部署应用程序前,您可以使用它来开发网络策略,作为持续集成/持续部署(CI/CD)管道的一部分。
红帽开发了此功能,与 NP-Guard 项目 开发人员兼容。首先,build-time 网络策略生成器分析本地文件夹中的 Kubernetes 清单,包括服务清单、配置映射和工作负载清单,如 Pod
、Deployment
、ReplicaSet
、Job
、DaemonSet
和 StatefulSet
。然后,它会发现所需的连接,并创建 Kubernetes 网络策略来实现 pod 隔离。这些策略不允许超过所需的入口和出口流量。
9.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 资源的子目录。命令扫描整个子文件夹树。另外,您还可以指定参数来修改命令的行为。
有关可选参数的更多信息,请参阅 roxctl netpol generate 命令选项。
后续步骤
- 生成策略后,您必须检查它们以确保完整性和准确性,以防 YAML 文件中未按预期指定任何相关网络地址。
-
最重要的是,验证所需的连接是否没有被隔离策略阻止。为了帮助进行这个检查,您可以使用
roxctl netpol connectivity map
工具。
作为工作负载部署的一部分,使用自动化将网络策略应用到集群可节省时间并确保准确性。您可以使用拉取请求提交生成的策略来遵循 GitOps 方法,为团队提供在部署作为管道的一部分前查看策略的机会。
9.1.2. roxctl netpol generate 命令选项
roxctl netpol generate
命令支持以下选项:
选项 | 描述 |
---|---|
|
查看 |
| 将生成的策略保存到目标文件夹中。每个策略有一个文件。 |
| 将生成的策略保存并合并到单个 YAML 文件中。 |
|
在第一次遇到的错误时失败。默认值为 |
| 删除输出路径(如果已存在)。 |
|
将警告视为错误。默认值为 |