9.3. 识别项目版本之间允许的连接的不同
构建时网络策略连接差异只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
此命令帮助您了解两个项目版本之间的允许连接差异。它分析了每个版本目录中的工作负载和 Kubernetes 网络策略清单,并以文本格式创建区别。
您可以使用各种输出格式查看连接差异报告,包括 文本、md 和 csv。
9.3.1. 使用 roxctl netpol connection diff 命令生成连接差异报告 复制链接链接已复制到粘贴板!
要生成连接差异报告,roxctl netpol connectivity diff 命令需要两个文件夹 dir1 和 dir2,每个包含 Kubernetes 清单,包括网络策略。
流程
运行以下命令,以确定指定目录中的 Kubernetes 清单之间的连接差异:
$ roxctl netpol connectivity diff --dir1=<folder_path_1> --dir2=<folder_path_2> [flags]1 - 1
- 指定文件夹的路径,其中可以包含用于分析的 YAML 资源和网络策略的子文件夹。命令可扫描两个目录的整个子文件夹树。例如,<
;folder_path_1>是netpol-analysis-example-minimal/,<folder_path_2> 是netpol-diff-example-minimal/。另外,您还可以指定参数来修改命令的行为。
有关可选参数的更多信息,请参阅 roxctl netpol connectivity diff 命令选项。
注意该命令考虑您可以使用
kubectl apply -f接受的所有 YAML 文件,然后它们成为roxctl netpol connectivity diff命令的有效输入。例 9.2. 输出示例
Expand diff-type source 目的地 dir 1 dir 2 workloads-diff-info changed
default/frontend[Deployment]
default/backend[Deployment]
TCP 9090
TCP 9090,UDP 53
added
0.0.0.0-255.255.255.255
default/backend[Deployment]
无连接
TCP 9090
与 dir1 中允许的连接相比,语义差异报告为您提供了在 dir2 中更改、添加或删除的连接的概述。当您查看输出时,每行都代表了与 dir1 相比,在 dir2 中添加、删除或更改的允许的连接。
以下是 roxctl netpol connectivity diff 命令以各种格式生成的输出示例:
如果适用,Workload-diff-info 提供了有关添加或删除与添加或删除连接相关的工作负载的更多详情。
例如,如果因为删除了工作负载 B,从工作负载 A 到工作负载 B 的连接已被删除,则 workload -diff-info 表示工作负载 B 已被删除。但是,如果因为网络策略更改以及工作负载 A 和 B 都删除了这样的连接,则 workload -diff-info 为空。
9.3.2. roxctl netpol connectivity diff 命令选项 复制链接链接已复制到粘贴板!
roxctl netpol connectivity diff 命令支持以下选项:
| 选项 | 描述 |
|---|---|
|
| 输入资源的第一个目录路径。这是强制选项。 |
|
| 要与第一个目录路径进行比较的输入资源的第二个目录路径。这是强制选项。 |
|
|
在第一次遇到的错误时失败。默认值为 |
|
|
查看 |
|
| 将连接差异输出保存到特定文件中。 |
|
|
配置输出格式。支持的格式有 |
|
|
删除输出路径(如果已存在)。默认值为 |
|
|
将连接差异输出保存到默认文件中。默认值为 |
|
|
将警告视为错误。默认值为 |
9.3.3. 区分语法和语义差异输出 复制链接链接已复制到粘贴板!
在以下示例中,dir1 是 netpol-analysis-example-minimal/,dir2 是 netpol-diff-example-minimal/。目录之间的区别在于网络策略 backend-netpol 中的小变化。
dir1 中的策略示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: backend-netpol
spec:
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 9090
protocol: TCP
podSelector:
matchLabels:
app: backendservice
policyTypes:
- Ingress
- Egress
status: {}
dir2 中的更改是在 ports 属性前添加的 -,这会产生不同的输出。
9.3.3.1. 语法不同输出 复制链接链接已复制到粘贴板!
流程
运行以下命令比较两个指定目录中的
netpols.yaml文件的内容:$ diff netpol-diff-example-minimal/netpols.yaml netpol-analysis-example-minimal/netpols.yaml输出示例
12c12 < - ports: --- > ports:
9.3.3.2. 语义差别输出 复制链接链接已复制到粘贴板!
流程
运行以下命令分析两个指定目录中的 Kubernetes 清单和网络策略之间的连接差异:
$ roxctl netpol connectivity diff --dir1=roxctl/netpol/connectivity/diff/testdata/netpol-analysis-example-minimal/ --dir2=roxctl/netpol/connectivity/diff/testdata/netpol-diff-example-minimal输出示例
Connectivity diff: diff-type: changed, source: default/frontend[Deployment], destination: default/backend[Deployment], dir1: TCP 9090, dir2: TCP 9090,UDP 53 diff-type: added, source: 0.0.0.0-255.255.255.255, destination: default/backend[Deployment], dir1: No Connections, dir2: TCP 9090