服務網格Istio入門-詳細記錄Kubernetes安裝Istio並使用

我最新最全的文章都在 南瓜慢說 www.pkslow.com ,文章更新也只在官網,歡迎大家來喝茶~~

1 服務網格Istio

Istio是開源的Service Mesh實現,一般用於Kubernetes集羣容器中的連接、監控和保護。它的核心特性有:

  • 流量管理
    • 通過簡單配置實現服務之間的流量;
    • 簡化服務級屬性如熔斷、超時、重試;
    • 支持A/B測試、金絲雀發佈等。
  • 安全
    • 通信層面的安全控制;
    • 開發人員只需要專注於應用程序開發。
  • 可觀察性
    • Metrics;
    • Logging;
    • Tracing。
  • 平臺支持
    • Kubernetes;
    • 各種雲平臺。

Istio的架構分爲數據平臺和控制平面,數據平面通過Sidecar代理工作,如下:

2 Kubernetes安裝istio

2.1 創建服務器

爲了避免出現鏡像下載慢或無法下載的問題,我們使用阿里雲香港的服務器來做示例。爲了省錢,我使用的是搶佔式實例,8CPU 16GB內存,大概是0.28/小時,用完即刪就可以了。

  • CPU:8核

  • 內存:16GB

  • 系統:Ubuntu 20.04 64位

  • 價格:0.28/時

  • 分配公網IP:是

  • 帶寬計費模式:按使用流量

  • 帶寬峯值:最大

測試登陸如下:

ssh [email protected]

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       153Mi        15Gi       2.0Mi       325Mi        15Gi

正常連接,可以開始使用了。

2.2 安裝Kubernetes

我這裏不打算創建一個Kubernetes集羣,所以只用了一臺機,如果有興趣的可查看之間的文章《詳細記錄用kubeadm在Ubuntu上安裝Kubernetes集羣》。

這裏通過minikube來啓動kubernetes,我們一步一步來安裝吧:

# 必要的更新
$ apt-get update -y
$ apt-get upgrade -y

# 下載kubectl命令行工具
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 執行權限
$ chmod a+x kubectl
$ mv ./kubectl /usr/local/bin/kubectl

# 安裝Docker
$ apt-get install -y docker.io

# 檢測Docker安裝情況
$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu1~20.04.1

# 下載minikube
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

# 執行權限
$ chmod +x minikube
$ mv minikube /usr/local/bin

# 安裝conntrack依賴
$ apt-get install -y conntrack

# 啓動kubernetes,需要等待一小段時間,因爲要下載鏡像,啓動kubernetes
$ minikube start --driver=none

# 檢測啓動成功
kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}

我們看到對應的Pod也起來了:

2.3 安裝istio

安裝完Istio後,我們就可以開始安裝Istio了,過程如下:

# 下載安裝包:
$ curl -L https://istio.io/downloadIstio | sh -

# 添加到Path
$ export PATH="$PATH:/root/istio-1.10.3/bin"

# 檢測是否可以正常安裝
$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!

# 執行安裝
$ istioctl install

安裝成功後,會出現如下界面:

查看命名空間,會多出一個istio-system:

3 使用istio

我們通過安裝官方的示例來看如何使用。先要給對應的命令空間加標籤,這樣istio纔會識別,纔會注入代理:

$ kubectl label namespace default istio-injection=enabled

接着我們安裝對應的示例代碼:

kubectl apply -f istio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml

可以看到所有應用都起來了,而且每個Pod是有兩個Container的:

爲了更好地監控我們的應用,我們來添加一些組件或插件:

$ kubectl apply -f istio-1.10.3/samples/addons

這樣,我們就多了許多新的組件,如Grafana、Jaeger、Kiali、Prometheus等:

我們以Kiali以例,暴露服務出來,來看看它給我們帶來了什麼:

# 添加NodePort
$ kubectl expose deployment kiali --type=NodePort --name=kiali-nodeport -n istio-system

# 找到對應的端口
kubectl get service -n istio-system | grep kiali

# 在其它外部訪問,注意IP爲服務器的公網IP
$ curl 47.242.151.110:31015
<a href="/kiali/">Found</a>.

打開:http://47.242.151.110:31015/kiali ,不要用Chrome打開,對於非https的網頁,Chrome會打開失敗。我用Safari可以正常打開:

我們來模擬一些請求:

kubectl get svc
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.101.63.99     <none>        9080/TCP   77m
kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP    132m
productpage   ClusterIP   10.110.126.60    <none>        9080/TCP   77m
ratings       ClusterIP   10.104.252.123   <none>        9080/TCP   77m
reviews       ClusterIP   10.104.41.104    <none>        9080/TCP   77m

# 循環發送請求
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.101.63.99:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.110.126.60:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.104.252.123:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.104.41.104:9080"; done

查看Graph,就可以看到一些請求的線,紅色是失敗的,綠色是健康正常的:

當然還有其它更多的功能,這裏就不一一講解了。

4 總結

這篇爲入門體驗,以後更多細節我們再一一道來吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章