使用 istioctl 验证并调试 Istio 安装
在配置错误咬你一口之前就发现它:analyze、validate、proxy-status,以及网格悄悄依赖的那个标签。
配置错误的网格往往不会大声失败,流量只是没有按你的预期路由,或者某个 Pod 从未获得你以为它会有的 sidecar。istioctl 有专门的命令来处理这类问题:在它们引起令人困惑的症状之前就捕获它们。本指南涵盖值得例行运行的那些。
istioctl analyze:在问题咬人之前发现配置问题
istioctl analyze
istioctl analyze -n my-namespace
istioctl analyze -A
analyze 检查你集群实际的 Istio 配置,而不仅仅是你即将应用的文件,并报告真实的问题:你明明打算启用注入、但没有为其打标签的命名空间,引用了不存在主机的 VirtualService,两个资源之间冲突的配置。不带命名空间参数运行时,检查当前上下文的默认命名空间;用 -n 检查特定命名空间,用 -A 检查集群中的每个命名空间。请在任何配置变更之后都养成运行它的习惯,而不仅仅是在明显出问题的时候;它经常能在问题变成症状之前就将其捕获。
istioctl validate:在应用之前检查文件
istioctl validate -f my-virtualservice.yaml
analyze 检查的是已经在集群中生效的内容,而 validate 则在你应用清单之前检查它,捕获 schema 错误和无效的字段值。在对任何与 Istio 相关的内容执行 kubectl apply 之前,把它作为常规步骤运行,这与对普通 Kubernetes 资源运行 kubectl apply --dry-run 是同样的反射动作。
istioctl proxy-status:每个 sidecar 都同步了吗?
istioctl proxy-status
这会列出 istiod 知道的每个 sidecar,以及每个 sidecar 是拥有最新配置(SYNCED)还是落后了(STALE,或显示错误)。当你刚应用的路由变更似乎没有在某个特定 Pod 上生效时,卡在 STALE 的 sidecar 往往就是真正的解释,在断定配置本身有误之前值得先检查。
istioctl proxy-config:这个 sidecar 实际在运行什么?
要直接深入某个 Pod 的 Envoy 配置,而不是靠行为去猜:
istioctl proxy-config routes <pod-name> -n <namespace>
istioctl proxy-config clusters <pod-name> -n <namespace>
istioctl proxy-config listeners <pod-name> -n <namespace>
这与本资料库中 Envoy 指南关于检查运行配置的底层思路相同,只是通过 Istio 自己的包装器,而不是直接使用 Envoy 的原始管理 API。
app 标签:容易漏掉,会悄悄破坏可视化
有一个特定的陷阱常见到值得单独指出。Istio(以及构建在它之上的工具,如下一篇指南介绍的 Kiali)依赖你的 Deployment 和 Service 上的 app 标签,来构建对哪些工作负载与哪些通信的准确描绘:
metadata:
labels:
app: reviews
省略它,不会有任何东西大声报错:Pod 仍会部署,sidecar 仍会注入,流量仍会流动。悄悄停止工作的是任何依赖该标签来识别工作负载的东西:Kiali 的服务图无法正确渲染连接,而某些以 app 为键的流量管理和遥测功能行为变得不可预测。如果网格在其他方面看起来健康,但它的可观测性工具显示的是令人困惑或不完整的画面,那么底层 Deployment 和 Service 上缺少 app 标签,是首先值得检查的事情之一,恰恰因为这种失败模式没有任何错误信息指向原因。
值得养成的合理习惯
在任何配置变更之后运行 istioctl analyze,在应用任何新内容之前运行 istioctl validate,并且每当某个变更似乎在某个特定位置没有生效时运行 istioctl proxy-status。这些都不能捕获一切,Istio 的配置面很大,但合在一起,它们能捕获那些既常见、又让人仅靠盯着 YAML 去调试而感到乏味的错误。
热门指南
-
Istio 架构:Sidecar、数据平面与控制平面 istiod 究竟做什么,Envoy sidecar 如何融入,以及为什么你的应用及其清单都不需要知道 Istio 的存在。 -
使用 istioctl 安装 Istio 并启用 Sidecar 注入 在本地集群上运行网格,确认它健康,并让你的第一个工作负载注入 sidecar。 -
使用 Helm 安装并定制 Istio 官方推荐的生产环境运行 Istio 的方式,以及取代已被移除的 Istio Operator 的方案。 -
观测你的网格:Prometheus、Grafana、追踪与 Kiali 每个 sidecar 已经在发出指标和追踪 —— 安装那些能把它变成你真正可以查看的东西的插件。