Ambient 是 Istio 刚刚宣布支持的一种新的数据面模式,在本篇文章中,我们将尝试安装 Istio 的 ambient 模式,并采用 bookinfo demo 来体验 ambient 提供的 L4 和 L7 能力。
备注: L4 指 OSI 标准网络模型的四层,即 TCP 层的处理。 L7 指 OSI 标准网络模型的七层,即应用层的处理,一般指的是 HTTP 协议的处理。
安装 Istio ambient 模式根据 ambient 模式的 README 文档,目前 ambient 支持了 Google GKE,AWS EKS 和 kind 三种 k8s 部署环境。经过我的尝试,在 Ubuntu 上的 kind 是最方便搭建的部署环境。可以参照Get Started with Istio Ambient Mesh 搭建支持 ambient 的 Istio 试验版本。如果你无法访问官方的下载地址,可以参照下面的步骤从我在国内搭建的镜像地址下载安装:
首先在一个 Ubuntu 虚机上安装 docker 和 kind。 创建一个 kind k8s 集群: 代码语言:javascript复制kind create cluster --config=- productpage):代码语言:javascript复制kubectl -n istio-system logs ztunnel-ff26n -cistio-proxy --tail 1[2023-09-10T10:18:23.497Z] "CONNECT - HTTP/2" 200 - via_upstream - "-" 84 1839 2 - "-" "-" "6300b128-3a4d-472e-b573-e14743b6c981" "10.244.2.9:9080" "10.244.2.9:9080" virtual_inbound 10.244.1.3:48053 10.244.2.9:15008 10.244.1.3:36748 - - inbound hcm我们可以看到 outbound 流量的日志中有(no waypoint proxy)字样,这是因为 ambient 目前的实现中缺省只进行 L4 处理,没有进行 L7 处理。因此此时流量只会通过 ztunnel ,不会经过 waypoint proxy。此时应用程序的流量路径如下图所示:
应用之间通过 ztunnel 安全覆盖层进行通信
为 ambient mode 启用 L7 功能目前 ambient 模式需要通过定义一个 gateway 来显示启用某个服务的七层处理。创建下面的 gateway,为 productpage 服务开启七层处理。
代码语言:javascript复制kubectl apply -f - waypoint proxy :代码语言:javascript复制kubectl logs bookinfo-productpage-waypoint-proxy-7dc7c7ff6-6q6l7 --tail 3[2023-09-10T10:51:36.375Z] "GET / HTTP/1.1" 200 - via_upstream - "-" 0 1683 2 2 "-" "curl/7.85.0-DEV" "fe3ba798-4ace-4891-b919-c3ea924f8cb9" "productpage:9080" "envoy://inbound_CONNECT_originate/10.244.2.9:9080" inbound-pod|9080||10.244.2.9 envoy://internal_client_address/ envoy://inbound-pod|9080||10.244.2.9/ envoy://internal_client_address/ - default[2023-09-10T10:51:36.374Z] "GET / HTTP/1.1" 200 - via_upstream - "-" 0 1683 3 3 "-" "curl/7.85.0-DEV" "fe3ba798-4ace-4891-b919-c3ea924f8cb9" "productpage:9080" "envoy://inbound-pod|9080||10.244.2.9/" inbound-vip|9080|http|productpage.default.svc.cluster.local envoy://internal_client_address/ envoy://inbound-vip|9080||productpage.default.svc.cluster.local/ envoy://internal_client_address/ - default[2023-09-10T10:51:36.374Z] "CONNECT - HTTP/2" 200 - via_upstream - "-" 84 1894 4 - "-" "-" "eb705930-8b73-4c29-870e-ead523143278" "10.96.250.29:9080" "envoy://inbound-vip|9080||productpage.default.svc.cluster.local/" inbound-vip|9080|internal|productpage.default.svc.cluster.local envoy://internal_client_address/ 10.244.2.12:15006 10.244.1.5:47829 - -productpage node 上的 ztunnel -> productpage
代码语言:javascript复制kubectl -n istio-system logs ztunnel-ff26n -cistio-proxy --tail 1[2023-09-10T10:51:36.376Z] "CONNECT - HTTP/2" 200 - via_upstream - "-" 699 1839 1 - "-" "-" "3e0eaa80-7c72-4d46-909a-233a6bd6073e" "10.244.2.9:9080" "10.244.2.9:9080" virtual_inbound 10.244.2.12:41893 10.244.2.9:15008 10.244.2.12:38336 - - inbound hcm在 ambient 模式中启用 L7 功能后,应用之间的流量路径如下图所示:
启用 waypoint L7 处理后的应用流量路径
对流量进行七层路由现在我们来尝试在 ambient 模式中对流量进行七层路由。ambient 模式的路由规则和 sidecar 模式是相同的,也是采用 Virtual service。
首先通过创建 gateway 为 review 服务启用 L7 能力。
代码语言:javascript复制kubectl apply -f -