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

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

Tags
Kubernetes
ithome 2020 ironman
Date
Oct 6, 2020
本文章同時發佈於:
文章為自己的經驗與夥伴整理的內容,設計沒有標準答案,如有可以改進的地方,請告訴我,我會盡我所能的修改,謝謝大家~

大家好,今天要將 Istio 與 K8s 整合,整合之後會發現每個 K8s pod 都會從 1 個容器變為 2 個容器,
notion image
是因為容器都多了一個 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
notion image
安裝 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,如圖,
notion image
最後啟動 K8s 應用!
helm install . --generate-name
notion image
Work!而紅匡處中容器多了 envoy proxy,但綠匡處會發現一直啟動不了 envoy proxy,這導致api.backend.com也沒辦法正常運作,
不過不用擔心,因為 Istio 本身就是設計每個容器都要有個 sidecar envoy proxy 了,實在沒必要再設計一個 envoy 的 service,我們直接使用 Istio 原生的功能來設計即可,將在之後介紹。

參考