我最新最全的文章都在 南瓜慢說 www.pkslow.com 串远,文章更新也只在官網(wǎng),歡迎大家來喝茶~~
1 服務(wù)網(wǎng)格Istio
Istio是開源的Service Mesh實(shí)現(xiàn)寺枉,一般用于Kubernetes集群容器中的連接抑淫、監(jiān)控和保護(hù)。它的核心特性有:
- 流量管理
- 通過簡(jiǎn)單配置實(shí)現(xiàn)服務(wù)之間的流量姥闪;
- 簡(jiǎn)化服務(wù)級(jí)屬性如熔斷始苇、超時(shí)、重試筐喳;
- 支持A/B測(cè)試函喉、金絲雀發(fā)布等。
- 安全
- 通信層面的安全控制荣月;
- 開發(fā)人員只需要專注于應(yīng)用程序開發(fā)。
- 可觀察性
- Metrics;
- Logging抱婉;
- Tracing档叔。
- 平臺(tái)支持
- Kubernetes;
- 各種云平臺(tái)蒸绩。
Istio的架構(gòu)分為數(shù)據(jù)平臺(tái)和控制平面衙四,數(shù)據(jù)平面通過Sidecar代理工作,如下:
2 Kubernetes安裝istio
2.1 創(chuàng)建服務(wù)器
為了避免出現(xiàn)鏡像下載慢或無法下載的問題患亿,我們使用阿里云香港的服務(wù)器來做示例届搁。為了省錢,我使用的是搶占式實(shí)例窍育,8CPU 16GB內(nèi)存卡睦,大概是0.28/小時(shí),用完即刪就可以了漱抓。
CPU:8核
內(nèi)存:16GB
系統(tǒng):Ubuntu 20.04 64位
價(jià)格:0.28/時(shí)
分配公網(wǎng)IP:是
帶寬計(jì)費(fèi)模式:按使用流量
帶寬峰值:最大
測(cè)試登陸如下:
ssh root@xx.xxx.xxx.xxx
$ free -h
total used free shared buff/cache available
Mem: 15Gi 153Mi 15Gi 2.0Mi 325Mi 15Gi
正常連接表锻,可以開始使用了。
2.2 安裝Kubernetes
我這里不打算創(chuàng)建一個(gè)Kubernetes集群乞娄,所以只用了一臺(tái)機(jī)瞬逊,如果有興趣的可查看之間的文章《詳細(xì)記錄用kubeadm在Ubuntu上安裝Kubernetes集群》。
這里通過minikube來啟動(dòng)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"
# 執(zhí)行權(quán)限
$ chmod a+x kubectl
$ mv ./kubectl /usr/local/bin/kubectl
# 安裝Docker
$ apt-get install -y docker.io
# 檢測(cè)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
# 執(zhí)行權(quán)限
$ chmod +x minikube
$ mv minikube /usr/local/bin
# 安裝conntrack依賴
$ apt-get install -y conntrack
# 啟動(dòng)kubernetes确镊,需要等待一小段時(shí)間,因?yàn)橐螺d鏡像范删,啟動(dòng)kubernetes
$ minikube start --driver=none
# 檢測(cè)啟動(dòng)成功
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"}
我們看到對(duì)應(yīng)的Pod也起來了:
2.3 安裝istio
安裝完Istio后蕾域,我們就可以開始安裝Istio了,過程如下:
# 下載安裝包:
$ curl -L https://istio.io/downloadIstio | sh -
# 添加到Path
$ export PATH="$PATH:/root/istio-1.10.3/bin"
# 檢測(cè)是否可以正常安裝
$ istioctl x precheck
? No issues found when checking the cluster. Istio is safe to install or upgrade!
# 執(zhí)行安裝
$ istioctl install
安裝成功后,會(huì)出現(xiàn)如下界面:
查看命名空間旨巷,會(huì)多出一個(gè)istio-system:
3 使用istio
我們通過安裝官方的示例來看如何使用巨缘。先要給對(duì)應(yīng)的命令空間加標(biāo)簽,這樣istio才會(huì)識(shí)別采呐,才會(huì)注入代理:
$ kubectl label namespace default istio-injection=enabled
接著我們安裝對(duì)應(yīng)的示例代碼:
kubectl apply -f istio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml
可以看到所有應(yīng)用都起來了若锁,而且每個(gè)Pod是有兩個(gè)Container的:
為了更好地監(jiān)控我們的應(yīng)用,我們來添加一些組件或插件:
$ kubectl apply -f istio-1.10.3/samples/addons
這樣斧吐,我們就多了許多新的組件又固,如Grafana、Jaeger煤率、Kiali口予、Prometheus等:
我們以Kiali以例,暴露服務(wù)出來涕侈,來看看它給我們帶來了什么:
# 添加NodePort
$ kubectl expose deployment kiali --type=NodePort --name=kiali-nodeport -n istio-system
# 找到對(duì)應(yīng)的端口
kubectl get service -n istio-system | grep kiali
# 在其它外部訪問,注意IP為服務(wù)器的公網(wǎng)IP
$ curl 47.242.151.110:31015
<a href="/kiali/">Found</a>.
打開:http://47.242.151.110:31015/kiali 煤辨,不要用Chrome打開裳涛,對(duì)于非https的網(wǎng)頁,Chrome會(huì)打開失敗众辨。我用Safari可以正常打開:
我們來模擬一些請(qǐng)求:
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
# 循環(huán)發(fā)送請(qǐng)求
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端三,就可以看到一些請(qǐng)求的線,紅色是失敗的鹃彻,綠色是健康正常的:
當(dāng)然還有其它更多的功能郊闯,這里就不一一講解了。
4 總結(jié)
這篇為入門體驗(yàn)蛛株,以后更多細(xì)節(jié)我們?cè)僖灰坏纴戆伞?/p>