如果大家正在学习或使用 Istio,那么以下有关 Istio 的十个技巧,可能会对大家进一步了解 Istio 和 Envoy Proxy 有所帮助。

使用 Kubectl Sniff 和 Wireshark

不知道大家有没有听说过 Wireshark。Sniff 提供了一种抽象概念,让我们可以侦听那些通过 Wireshark 进入离开 Istio 代理的数据包。Sniff 非常适合于底层分析,它可以将问题的根本原因隔离到应用程序级和 Envoy 级。首先通过 global.proxy.privileged=true 在 IstioOperator CRD 上启用特权模式,然后将以下注释添加到 Deployment。

在 Wireshark 中,我们可以捕捉 GRPC 请求并进行过滤,然后通过请求的生命周期来确定 ingress 和 egress,最后移植本地服务,使用 BloomRPC 或 Postman 隔离连接问题。

Wireshark 中的筛选 GRPC 请求

首先使用 Envoy

通过在 docker-compose 文件中运行 Envoy 了解如何配置 Envoy 过滤器链(filter chain),可以更容易地对请求镜像和 WASM 等更改进行原型改变(prototype change)。在将 Envoy 转换为 Istio 配置的过程中,对 Envoy 足够了解可以提供很多帮助。

认真阅读发行说明

在之前的 Istio 升级过程中,很多人不小心错过了一个更改,即 Envoy 状态端口修改(15020->15021)。

Istio 网站上的发行说明和升级指南

在 Istio Operator 上使用 Istioctl 生成声明文件

最近有人从 v1.6 到 v1.7 进行了升级,并注意到 Operator 由于结构(标签->实物标签:EnvoyFilter)的更改而无法完成调协(reconciliation loop),希望 Operator 能够以向后兼容的方式处理此升级。生成的声明文件很容易通过 Istio Overlay API 或 Kustomize 来处理未通过 Operator CRD 公开的字段。

找到示例声明文件后,确认示例与代理容器中的 Envoy API/Protobuf 版本对齐。

如果将 Istio Ingress Gateway 用作 GKE 上集群的 Ingress,并要启用 HTTPS,请在 Istio Ingress Gateway 服务的单个上游设置一个 Ingress 对象。

添加静态 IP 计算地址(Static IP Compute Address)、证书管理(Managed Certificate)和 BackendConfig(设置运行状况检查),可以方便我们通过负载均衡器提供安全访问。

请求镜像是在生产环境中进行测试的有力手段。

如果在安装中启用了此功能,但出现下游服务拒绝请求的情况,注意查看主机头(Host Header)。Envoy 将 “-shadow” 附加到主机头。如果使用的是 Vanilla Envoy,那可以通过创建一个单独的侦听器来解决该问题。我们也可以通过 Istio 添加一个单独的 Envoy 部署来重写标头。同样,如果要使用 istio-ingressgateway 集群镜像在边缘实现请求镜像,要在 mesh 虚拟服务中添加本地服务名称和关键字。