[zh] content/zh/docs/ops/diagnostic-tools/cni/index.md (#12881)

* content/zh/docs/ops/diagnostic-tools/cni/index.md

* content/zh/docs/ops/diagnostic-tools/cni/index.md

* add a line
This commit is contained in:
wlp1153468871 2023-03-13 17:57:23 +08:00 committed by GitHub
parent 604109a282
commit e22ffc9782
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,74 @@
---
title: Troubleshooting the Istio CNI plugin
description: 描述使用 Istio 和 CNI 插件诊断问题的工具和技术。
weight: 90
keywords: [debug,cni]
owner: istio/wg-networking-maintainers
test: n/a
---
本页介绍如何解决 Istio CNI 插件的问题。在阅读本文之前,您应该阅读 [CNI 安装和操作指南](/zh/docs/setup/additional-setup/cni/)。
## 日志{#log}
Istio CNI 插件日志基于 `PodSpec` 提供了有关插件如何配置应用程序 pod 流量重定向的信息。
该插件在容器运行时进程空间中运行,因此您可以在 `kubelet` 日志中看到 CNI 日志条目。
为了使调试更容易CNI 插件还将其日志发送到 `istio-cni-node` DaemonSet。
CNI 插件的默认日志级别是 `info`。要获得更详细的日志输出,可以通过编辑 `values.cni.logLevel` 安装选项并重新启动 CNI DaemonSet pod 来更改级别。
Istio CNI DaemonSet pod 日志还提供了有关 CNI 插件安装的信息,和 [race condition repairing](/zh/docs/setup/additional-setup/cni/#race-condition-mitigation)。
## 监控{#monitoring}
CNI DaemonSet [generates metrics](/zh/docs/reference/commands/install-cni/#metrics),可用于监视 CNI 的安装,准备就绪和竞争条件缓解。
默认情况下Prometheus 抓取注释 (`prometheus.io/port`, `prometheus.io/path`) 被添加到 `istio-cni-node` DaemonSet pod 中。
您可以通过标准 Prometheus 配置收集生成的指标。
## DaemonSet 准备就绪{#daemonset-readiness}
CNI DaemonSet 的就绪表明 Istio CNI 插件已正确安装和配置。
如果 Istio CNI DaemonSet 尚未准备好,则表明出现了问题。查看 `istio-cni-node` 守护进程日志进行诊断。
您还可以通过 `istio_cni_install_ready` 指标跟踪 CNI 安装准备情况。
## Race 条件修复{#race-condition-repair}
Istio CNI DaemonSet 默认启用 [race condition mitigation](/zh/docs/setup/additional-setup/cni/#race-condition-mitigation),这将驱逐在 CNI 插件准备就绪之前启动的 pod。
要了解哪些 pod 被驱逐,请查找如下所示的日志行:
{{< text plain >}}
2021-07-21T08:32:17.362512Z info Deleting broken pod: service-graph00/svc00-0v1-95b5885bf-zhbzm
{{< /text >}}
您还可以通过 `istio_cni_repair_pods_repaired_total` 指标追踪修复的 pod。
## 诊断 pod 启动失败{#diagnose-pod-start-up-failure}
CNI 插件的一个常见问题是由于容器网络设置失败pod 无法启动。
通常,失败原因会写入 pod 事件,并通过 pod 描述可见:
{{< text bash >}}
$ kubectl describe pod POD_NAME -n POD_NAMESPACE
{{< /text >}}
如果 pod 持续出现 init 错误,请检查 init 容器 `istio-validation` 日志
"连接被拒绝" 错误如下:
{{< text bash >}}
$ kubectl logs POD_NAME -n POD_NAMESPACE -c istio-validation
...
2021-07-20T05:30:17.111930Z error Error connecting to 127.0.0.6:15002: dial tcp 127.0.0.1:0->127.0.0.6:15002: connect: connection refused
2021-07-20T05:30:18.112503Z error Error connecting to 127.0.0.6:15002: dial tcp 127.0.0.1:0->127.0.0.6:15002: connect: connection refused
...
2021-07-20T05:30:22.111676Z error validation timeout
{{< /text >}}
`istio-validation` init 容器设置一个本地虚拟服务器,该服务器监听流量重定向目标入/出端口,并检查测试流量是否可以重定向到虚拟服务器。
当 CNI 插件未正确设置 pod 流量重定向时,`istio-validation` init 容器阻止 pod 启动,以防止流量绕过。
要查看是否有任何错误或意外的网络设置行为,在 `istio-cni-node` 中搜索pod ID。
CNI 插件出现故障的另一个症状是,在启动时,应用程序 pod 不断被逐出。
这通常是因为插件没有正确安装,因此无法设置 pod 流量重定向。
CNI [race repair logic](/zh/docs/setup/additional-setup/cni/#race-condition-mitigation) 认为 pod 由于竞争条件而损坏,并连续逐出 pod。
遇到此问题时,请检查 CNI DaemonSet 日志,以获取有关无法正确安装插件的信息。