從零搭建乙個基於Istio的服務網格

2021-09-11 12:57:37 字數 3771 閱讀 2842

上篇文章從微服務1.0時代的三大痛點(技術門檻高,多語言支援不足和**侵入性強)說起,由此引出服務網格的起源和演化歷史。但古語有云紙上得來終覺淺,絕知此事要躬行,不親自擼一遍命令,怎敢跟人提服務網格?本篇我將教大家如何在本地從零搭建乙個基於istio的服務網格,從而對服務網格有乙個更直觀的認識。

無論是kubernetes、minikube還是istio,官方提供的安裝文件都非常詳盡,只要英文過關,依葫蘆畫瓢基本上都能跑通。但如果你在國內,還得加乙個必要條件,學會如何突破網路審查,俗稱翻牆。

kubernetes是istio首推的執行平台,因此作為第一步,我們首先來安裝kubectl,kubernetes的命令列工具,用來控制kubernetes集群。根據官方文件,mac下安裝kubectl只需要一行命令,brew install kubectl,這簡單、極致的使用者體驗讓你感動的想哭。but wait...

你敲完命令,躊躇滿志的按下回車之後,可能會發現,螢幕遲遲沒有輸出,10秒,30秒,1分鐘,3分鐘,10分鐘。。。恭喜你,你被牆了!

brew預設的映象源是github,而github時不時會被牆,即使不被牆訪問速度有時也慢的令人髮指,導致brew命令也常常超時甚至失敗。解決辦法要麼換源,要麼給github配上socks5**。對碼農而言,我更推薦後一種,方法如下:

開啟~/.gitconfig檔案,如果不存在則新建

在檔案末尾新增如下配置並儲存:

複製**

配上socks5**之後,一般就可以妥妥的執行brew命令了。

curl -lo minikube  && \

chmod +x minikube && \

sudo mv minikube /usr/local/bin/

複製**

minikube預設使用的vm driver是virutalbox,因此啟動minikube之前,還要安裝virtualbox。

安裝好minikube和virutalbox之後,可執行如下命令第一次啟動minikube:

minikube start --docker-env http_proxy=http://《本機ip>:1087 --docker-env https_proxy=http://《本機ip>:1087

注:官方文件給出的啟動命令帶有--vm-driver=xhyve,而事實上最新版本的minikube已經廢棄了xhyve driver,應去除。

你可能已經注意到,上面的啟動命令中帶了兩個--docker-env引數,都指向了shadowsocks開啟的http**,為啥呢?還是因為牆。minikube預設使用docker作為容器執行時,並在vm中內建了乙個docker守護程序,使用的映象源是dockerhub。如果你經常使用docker,那你一定知道在國內使用docker一般都要修改映象源(比如阿里雲的容器映象服務)或者使用**,否則拉取速度也是慢的令人髮指。由於minikube使用的是內建的docker守護程序,使用**更為方便,但要注意,開啟shadowsocks http**時,需要修改**的偵聽位址為本機ip,而不是預設的127.0.0.1,否則在vm中的docker守護程序是無法訪問到這個**的。

注:--docker-env引數只有在第一次啟動minikube時需要,之後啟動直接執行minikube start即可。如果需要修改**位址,可編輯~/.minikube/machines/minikube/config.json檔案。

安裝完minikube之後,就可以試著建立第乙個kubernetes服務了,具體步驟參考官方文件。

拿到了kubectl和minikube兩大神器,搭建istio可以說是水到渠成了。基本步驟如下,

啟動minikube

minikube start \

--extra-config=controller-manager.clustersigningcertfile="/var/lib/localkube/certs/ca.crt" \

--extra-config=controller-manager.clustersigningkeyfile="/var/lib/localkube/certs/ca.key" \

--extra-config=apiserver.admission.pluginnames=namespacelifecycle,limitranger,serviceaccount,persistentvolumelabel,defaultstorageclass,defaulttolerationseconds,mutatingadmissionwebhook,validatingadmissionwebhook,resourcequota \

--kubernetes-version=v1.9.0

複製**

curl -l | sh -

進入安裝目錄(假設為istio-0.7),將bin/目錄新增到path環境變數

cd istio-0.7

export path=$pwd/bin:$path

複製**

部署istio的核心元件(包括外部流量閘道器ingress, 管理envoy例項生命週期的pilot以及執行訪問控制和使用策略的mixer)到kubernetes

至此,乙個基於istio的服務網格就算安裝完成了。one more thing,還記得上篇文章提到的服務網格所獨有的邊車模式嗎?為了將乙個具體的服務接入istio,需要為每乙個服務例項建立乙個配套的邊車程序。根據官方文件,istio提供手動和自動兩種方式來建立邊車程序,前者發生於部署階段,而後者發生於pod建立階段,推薦使用後者,具體步驟參考官方文件,限於篇幅,這裡就不再贅述。

安裝完istio之後,可執行kubectl get pods -n istio-system檢視所有istio相關的pods,確保這些pods都處於running狀態。然後,你就可以開始istio的探索之旅了,建議從官方提供的bookinginfo示例應用起步,這裡就不再展開。

name                                      ready     status    restarts   age

istio-ca-59f6dcb7d9-5mll5 1/1 running 18 42d

istio-ingress-779649ff5b-x2qmn 1/1 running 26 42d

istio-mixer-7f4fd7dff-6l5g5 3/3 running 54 42d

istio-pilot-5f5f76ddc8-6867m 2/2 running 36 42d

istio-sidecar-injector-7947777478-gzcfz 1/1 running 9 41d

複製**

使用Django從零搭建乙個小型站點

建立乙個基本的project,這樣我們才能開始工作 django admin startproject 工程名 將所有靜態資源全部放入templates,得到的檔案結構如下 外鏈轉存失敗 img oaixjbvi 1566125816335 home floyd config typora typo...

輕鬆搭建乙個自己的Windows SVN伺服器

目前較為簡單的方案是visualsvn server。該svn伺服器是免費的,支援windows nt,2000,xp and 2003等環境,安裝非常簡單。安裝的時候可以選擇svn走http協議還是https協議,http協議速度快一些,而https協議安全性好。兩者均可以從瀏覽器直接訪問svn專...

如何從零搭建乙個外網能夠訪問的部落格

對於搞技術的學生來說,相信有不少人都想有乙個完全屬於自己的部落格,但自己又沒有學過這方面的知識,怎麼辦?下面我詳細地給大家分享個人的經驗,希望對大家有幫助!準備材料 pc電腦 路由器 搭建乙個外網能夠訪問的部落格步驟有下 1.搭建環境 這裡主要是配置伺服器 2.內網外接,實現外網能夠訪問 3.安裝部...