8.6. 使用构建时网络策略生成器
构建网络策略生成只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
构建时网络策略生成器可以根据应用程序 YAML 清单自动生成 Kubernetes 网络策略。在在集群中部署应用程序前,您可以使用它来开发网络策略,作为持续集成/持续部署(CI/CD)管道的一部分。
红帽开发了此功能,与 NP-Guard 项目 开发人员兼容。首先,build-time 网络策略生成器分析本地文件夹中的 Kubernetes 清单,包括服务清单、配置映射和工作负载清单,如 Pod、Deployment、ReplicaSet、Job、DaemonSet 和 StatefulSet。然后,它会发现所需的连接,并创建 Kubernetes 网络策略来实现 pod 隔离。这些策略不允许超过所需的入口和出口流量。
8.6.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>)?
(http(s)?://)?<svc>(.<ns>(.svc.cluster.local)?)?(:<portNum>)?1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在这种模式中,
- <svc> 是服务名称。
- <ns> 是定义该服务的命名空间。
- <portNum> 是公开的服务端口号。
以下是与模式匹配的一些示例:
-
wordpress-mysql:3306 -
redis-follower.redis.svc.cluster.local:6379 -
redis-leader.redis -
http://rating-service.
流程
运行 help 命令验证构建网络策略生成功能是否可用:
roxctl generate netpol -h
$ roxctl generate netpol -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
generate netpol命令生成策略:roxctl generate netpol <folder-path>
$ roxctl generate netpol <folder-path>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定具有 Kubernetes 清单的文件夹路径。
roxctl generate netpol 命令支持以下选项:
|
| 描述 |
|
|
查看 |
|
| 将生成的策略保存到目标文件夹中。每个策略有一个文件。 |
|
| 将生成的策略保存并合并到单个 YAML 文件中。 |
|
|
在第一次遇到的错误时失败。默认值为 |
|
| 删除输出路径(如果已存在)。 |
|
|
将警告视为错误。默认值为 |
生成策略后,您必须检查它们以确保完整性和准确性,以防 YAML 文件中未按预期指定任何相关网络地址。最重要的是,验证所需的连接是否没有被隔离策略阻止。为了帮助进行此检查,您可以使用 RHACS 模拟生成的网络策略。
红帽建议将网络策略应用到集群,作为使用自动化工作负载部署的一部分。您可以使用 Pull Requests 提交生成的策略来遵循 GitOps 方法,为团队提供在部署作为管道的一部分前查看策略的机会。