4.2. 运行 ovnkube-trace
运行 ovn-trace
以模拟 OVN 逻辑网络内的数据包转发。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。 -
您已在本地主机上安装了
ovnkube-trace
示例:测试 DNS 解析是否适用于部署的 pod
本例演示了如何从部署的 pod 测试 DNS 解析到集群中运行的核心 DNS pod。
流程
输入以下命令在 default 命名空间中启动 web 服务:
oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出在
openshift-dns
命名空间中运行的 pod:oc get pods -n openshift-dns
oc get pods -n openshift-dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下
ovnkube-trace
命令来验证 DNS 解析是否正常工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow src&dst
pod 在同一节点上放置时的输出示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow src&dst
pod 放置到另一个节点上时的输出示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow ouput 表示从部署的 pod 到 DNS 端口的成功,也表示它已成功返回其他方向。因此,如果我的 Web pod 想要从核心 DNS 进行 dns 解析,则 UDP 端口 53 上支持双向流量。
例如,如果无法正常工作,并且您想要获取 ovn-trace
、proto/trace
和 ovn-detrace
的 ovs-appctl
,以及更多故障排除类型信息,将日志级别增加到 2,然后再次运行命令,如下所示:
这个日志级别的输出太大,无法在此处列出。在故障情况下,此命令的输出显示哪个流丢弃了该流量。例如,可以在不允许该流量的集群中配置 egress 或 ingress 网络策略。
示例:使用 debug 输出来验证配置的默认拒绝
本例演示了如何使用入口默认拒绝策略阻断流量的 debug 输出来识别。
流程
创建以下 YAML,以定义
deny-by-default
策略,以拒绝所有命名空间中的所有 pod 的入口流量。将 YAML 保存到deny-by-default.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略:
oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
networkpolicy.networking.k8s.io/deny-by-default created
networkpolicy.networking.k8s.io/deny-by-default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令在
default
命名空间中启动 web 服务:oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
prod
命名空间:oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
prod
命名空间:oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
prod
命名空间中部署alpine
镜像并启动 shell:oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开另一个终端会话。
在这个新终端会话中,运行
ovn-trace
以验证在命名空间prod
中运行的源 podtest-6459
与在default
命名空间中的目标 pod 之间的通信失败:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ovn-trace source pod to destination pod indicates failure from test-6459 to web
ovn-trace source pod to destination pod indicates failure from test-6459 to web
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将日志级别增加到 2 以公开失败的原因:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 因为默认的 deny 策略被到位,所以入口流量会被阻止
创建一个策略,允许来自特定命名空间中所有 pod 的流量,其标签为
purpose=production
。将 YAML 保存到web-allow-prod.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略:
oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令运行
ovnkube-trace
来验证现在允许的流量:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在在第 6 步中打开的 shell 中运行以下命令,以将 nginx 连接到 web-server:
wget -qO- --timeout=2 http://web.default
wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow