如何调试 Istio 网络配置

以下我会告诉大家,每次我为 Istio 的设置调试时所按照的步骤,而且进行这些步骤其实无需有部署的经验。我常常都在 Istio 上犯了简单又愚蠢的错误,所以制作了一份清单,可以让我更迅速地找出问题所在。不多说,马上进入我平常调试的步骤吧。

1. 在句法逻辑上有没有错误呢?

  • “istioctl analyze” 会准确地替你解析并验证配置当中的句法。

2. 它有设定到状态吗?

  • 查找 istiod 设定的警告或错误,或者用 istioctl analyze 也能找到(可使用两种不同方法,一是将它导向你的实时集群处运行,实质上跟 istiod 相同;或者在本地运行,只是这样的验证能力有限)。
  • istioctl analyze 会进行很多常常漏掉的引用检查,例如,它会检查你在 VirtualService 用的主机名称是否与跟它绑定的 Gateway 相同。 说实话,Istio 上的错误百分之九十九都是配置上的小错, istioctl analyze 固然能找出不少,但也无法全部抓获。所以下一步我们会从基础开始,由下而上检查起。

3. 名称正确吗?资源是放在对的命名空间里吗?

  • 自从 Istio 1.4 版本,几乎所有资源都是根据命名空间控制范围的,包括像 VirtualService、EnvoyFilter、Gateway 和 ServiceEntry 等的网络配置。确保这些配置与你正在作业的服务处于同一个命名空间当中。
  • 这点非常重要,因为选择器是以命名空间为准的。其中一个常见配置错误就是在应用的命名空间(例如在 default)中发布针对 istio: ingressgateway 选择器的 VirtualService,用来将 VirtualService 绑定到 istio-system 命名空间中的istio-ingressgateway 部署。这种做法只有当你的 VirtualService 同时在 istio-system 命名空间中才会有效。
  • 或者,在从应用的命名空间中汇入 VirtualService 的 istio-system 命名空间中,写入一个 Sidecar 资源。但一般情况下不建议这么做,只须于每个需要入口的应用中,部署一组 Envoy 入口就可以了。

4. 资源选择器正确吗?

  • 检查你部署中的 pod,确保它们有正确的、一字不差的标签。
  • 正如上面所说,紧记资源选择器必须绑定到发布资源的命名空间。

到了这步,配置基本上都确保准确了,那接下来就看看运行时间系统如何处理配置吧。

你可以使用实验指令 istioclt describe 来大量自动进行这种分析。不过由于它还在实验阶段,我们并没有将它收录作为主要的调试方式,等到它的稳定性有所提升时,我们将会着墨更多。不过由于这个方法实在是非常容易操作,所以我们也在下面详细讲解。但 istioclt describe 更好的原因是,只有对 Envoy 有深入了解或者对 Envoy 文档有做过详细调研(这本来就是个好习惯)的人,才会觉得这些方法非常容易操作。

5. Envoy 有接受(ACK)这个配置吗?

istioctl proxy-status pod_name -n pod_namespace

6. 这个配置在 Envoy 中有如预期般地表现出来吗?

istioctl proxy-config type podname -n namespace
/config_dump
istioctl proxy-config routes pod_name -n pod_namespace

记得除非主机设有 ServiceEntry,否则 DestinationRules 是不会出现的。

  • EnvoyFilters 会在你向 Istio 指定的位置出现。通常错误的 EnvoyFilter 会呈现为一个拒绝配置的 Envoy(亦即没有上述的 SYNCED 状态),这时候你就要检查 istiod(Pilot)日志,来查询 Envoy 因拒绝配置而产生的错误。
  • Sidecar 决定配置使用的范围,所以你一般只需要看上面的配置是否存在,就能知道 Sidecar 是否被正确使用。

7. istiod(Pilot)会在日志上记录错误吗?

如果你想看看 Pilot 有没有在日志上记录配置当中某个部份的错误,可以在检查前快速地把它删除再重新建立,就能确保它们会被记录到日志上。

istioctl analyze

Zack Butcher 是 Tetrate 的创始工程师,也是 @IstioMesh 的核心贡献者和 Istio: Up and Running 的联合作者。 Tetrate 专注于开源以及提供服务与产品,帮助企业更轻松地投入使用 Istio 和 Envoy。如有任何有关服务网格的问题,欢迎发送电邮到 learn@tetrate.io。

Cloud Native(云原生)
我还没有学会写个人说明!
上一篇

岁月无声,经典有声,腾讯音乐娱乐集团「华语金曲10,20,30」返场专题完美收官

下一篇

特斯拉明年将在上海建新厂,初期规划年产10000根超级充电桩

你也可能喜欢

评论已经被关闭。

插入图片