Istio 是什麼,原來是容器間通訊的妻管嚴嗎!? - 實作篇

本文章同時發佈於:

文章為自己的經驗與夥伴整理的內容,設計沒有標準答案,如有可以改進的地方,請告訴我,我會盡我所能的修改,謝謝大家~

大家好,今天要將 Istio 與 K8s 整合,整合之後會發現每個 K8s pod 都會從 1 個容器變為 2 個容器,

是因為容器都多了一個 envoy proxy 容器來管理流量,如圖,之後就可以再利用 envoy proxy 配合 Control Plane 來控制 Service Mesh。

安裝 Istio

官網已有相當清楚的教學,在我 Mac 上就是下載檔案並且加入執行的環境變數即可。

$ curl -L https://istio.io/downloadIstio | sh -
$ cd istio-1.7.3
$ export PATH=$PWD/bin:$PATH

開始整合

我們將以此Example-Code來說明,

Istio 至少需要 K8s 1.16 以上才支持,而之前的文章是使用 K8s 1.15,所以必須先刪除 minikube 的 K8s 1.15,

$ minikube delete

創建 1.16 的 K8s,並開起 ingress

$ minikube start --driver=hyperkit --kubernetes-version v1.16.0
$ minikube addons enable ingress

取得 minikube ip,

$ minikube ip

將特定api.backend.comweb.backend.com轉換成 minikube ip,以確保 ingress 正常運作,輸入以下指令開啟文件並儲存,

$ open /etc/hosts

安裝 Istio 至 K8s,

$ istioctl install --set profile=demo

啟用istio-injection,這會使在建立 pod 的時候,自動在 pod 中加入 envoy proxy 容器,

$ kubectl label namespace default istio-injection=enabled

再透過 Helm 啟動之前,因為 K8s 1.16 與 1.15 有一些breaking change,所以必須要在 deployment config 中加入 selector,如圖,

最後啟動 K8s 應用!

helm install . --generate-name

Work!而紅匡處中容器多了 envoy proxy,但綠匡處會發現一直啟動不了 envoy proxy,這導致api.backend.com也沒辦法正常運作,

不過不用擔心,因為 Istio 本身就是設計每個容器都要有個 sidecar envoy proxy 了,實在沒必要再設計一個 envoy 的 service,我們直接使用 Istio 原生的功能來設計即可,將在之後介紹。

參考

comments powered by Disqus