使用 Istio 的十个技巧

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

使用 Kubectl Sniff 和 Wireshark安全

不知道你们有没有据说过 Wireshark。Sniff 提供了一种抽象概念,让咱们能够侦听那些经过 Wireshark 进入离开 Istio 代理的数据包。Sniff 很是适合于底层分析,它能够将问题的根本缘由隔离到应用程序级和 Envoy 级。首先经过 global.proxy.privileged=true 在 IstioOperator CRD 上启用特权模式,而后将如下注释添加到 Deployment。负载均衡

在 Wireshark 中,咱们能够捕捉 GRPC 请求并进行过滤,而后经过请求的生命周期来肯定 ingress 和 egress,最后移植本地服务,使用 BloomRPC 或 Postman 隔离链接问题。工具

Wireshark 中的筛选 GRPC 请求oop

首先使用 Envoy学习

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

认真阅读发行说明网站

在以前的 Istio 升级过程当中,不少人不当心错过了一个更改,即 Envoy 状态端口修改(15020->15021)。编码

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

在 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 虚拟服务中添加本地服务名称和关键字。

JWT 验证提供了一个有趣的抽象概念,它容许 service 知道它是否经过身份验证。

与“退出(opt out)”基于工做负载选择器标签方案相比,“加入(opt in)”可能会暴露的通过身份验证的 service。使用 Open Policy Agent 之类的工具能够在工做负载上强制使用必需的标签,以确保全部 service 上都带有身份验证标签。

GRPC JSON 转码器能够帮助工程师将程序代码从 JSON 转码为 GRPC。

不过,将部署更改到 proto descriptor 的过程有些笨重。有种解决方法是用 base64 编码 proto descriptor 并将其做为 secret 安装,但因为在 Protobuf 定义更改时,须要对二进制文件进行 base64 编码,这很是麻烦,所以这种方法不太好。有种稍微好一点的方法是使用描述符(descriptor)构建容器镜像,并将其做为具备共享内存量的 initContainer 运行。在 pod 启动后,initContainer 会将二进制文件复制到共享卷空间中,而且 Istio 代理容器能够进行访问。

Envoy 为过滤器(filter)提供了一种修改虚拟主机特定配置的方法。

从 Istio 来讲,这意味着能够更改特定虚拟主机路径上现有过滤器功能。此功能适用于特定过滤器,但不适用于 WASM 等过滤器。

原文连接:https://shrayk.medium.com/ten...

相关文章
相关标签/搜索