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

被選召的 Gopher 們,從零開始探索 Golang, Istio, K8s 數碼微服務世界 — 第12屆iT邦幫忙鐵人賽

髒桶子
喜歡解決問題的髒桶子
3 min readOct 6, 2020

--

本文章同時發佈於:

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

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

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

安裝 Istio

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

開始整合

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

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

創建 1.16 的 K8s,並開起 ingress

取得 minikube ip,

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

安裝 Istio 至 K8s,

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

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

最後啟動 K8s 應用!

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

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

參考

Write Medium in Markdown? Try Markdium!

--

--