初探 Istio Ambient 模式

語言: CN / TW / HK

Ambient 是 Istio 剛剛宣佈支援的一種新的資料面模式,在本篇文章中,我們將嘗試安裝 Istio 的 ambient 模式,並採用 bookinfo demo 來體驗 ambient 提供的 l4 和 l7 能力。

安裝 Istio ambient 模式

根據 ambient 模式的 README 文件 ,目前 ambient 支援了 Google GKE,AWS EKS 和 kind 三種 k8s 部署環境。經過我的嘗試,在 Ubuntu 上的 kind 是最方便搭建的部署環境。可以參照(Get Started with Istio Ambient Mesh)[https://istio.io/latest/blog/2022/get-started-ambient/]搭建支援 ambient 的 Istio 試驗版本。如果你無法訪問官方的下載地址,可以參照下面的步驟從我在國內搭建的映象地址下載安裝:

  1. 首先在一個 Ubuntu 虛機上安裝 docker 和 kind

  2. 建立一個 kind k8s 叢集:

kind create cluster --config=- <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: ambient
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
  1. 然後下載並解壓支援 ambient 模式的 Istio 試驗版本。
wget https://zhaohuabing.com/download/ambient/istio-0.0.0-ambient.191fe680b52c1754ee72a06b3e0d3f9d116f2e82-linux-amd64.tar.gz

tar -xvf istio-0.0.0-ambient.191fe680b52c1754ee72a06b3e0d3f9d116f2e82-linux-amd64.tar.gz
  1. 安裝 Istio,需要指定 profile 為 ambient,注意需要指定 hub,否則相關的容器映象可能由於網路原因拉取失敗。
cd istio-0.0.0-ambient.191fe680b52c1754ee72a06b3e0d3f9d116f2e82
./bin/istioctl install --set profile=ambient --set hub=zhaohuabing

ambient profile 在叢集中安裝了 Istiod, ingress gateway, ztunnel 和 istio-cni 幾個元件。其中 ztunnel 和 istio-cni 以 daemonset 方式部署在每個 node 上。istio-cni 用於檢測哪些應用 pod 處於 ambient 模式,並會建立 iptables 規則將這些 pod 出向流量和入向流量重定向到 node 的 ztunnel。istio-cni 會持續監控 node 上 pod 的變化,並更新相應的重定向邏輯。

$ kubectl -n istio-system get pod
NAME                                    READY   STATUS    RESTARTS   AGE
istio-cni-node-27f9k                    1/1     Running   0          85m
istio-cni-node-nxcnf                    1/1     Running   0          85m
istio-cni-node-x2kjz                    1/1     Running   0          85m
istio-ingressgateway-5c87575d87-5chhx   1/1     Running   0          85m
istiod-bdddf595b-tn9px                  1/1     Running   0          87m
ztunnel-5nnnl                           1/1     Running   0          87m
ztunnel-dk42c                           1/1     Running   0          87m
ztunnel-ff26n                           1/1     Running   0          87m

部署 Demo 應用程式

執行下面的命令,部署 Demo 應用程式。

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f https://zhaohuabing.com/download/ambient/sleep.yaml
kubectl apply -f https://zhaohuabing.com/download/ambient/notsleep.yaml

上面的命令將 Demo 應用程式部署在 default namespace,由於 default namespace 沒有打上相關的標籤,此時 Demo 應用的流量並不經過 ztunnel,pod 之間通過 k8s 的service 機制進行通訊,pod 之間的流量沒有經過 mTLS 認證和加密。

未納入 ambient 模式的應用之間的未加密通訊