安裝
提前准備好k8s環境,下載Istio安裝包,我這里使用的1.6.14版本,k8s版本為v1.19.8
tar zxvf istio-1.6.14-linux-amd64.tar.gz
cd istio-1.6.14/
cp bin/istioctl /usr/bin
查看不同安裝模式的配置文件列表
istioctl profile list
可以打印配置文件內容(選做)
istioctl profile dump [配置文件名稱]
使用demo模式的配置安裝
[root@ istio-1.6.14]# istioctl manifest apply --set profile=demo
Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details.
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Egress gateways installed
✔ Addons installed
✔ Installation complete
驗證是否安裝成功
[root@ istio-1.6.14]# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-7647cf9c74-lvbhp 1/1 Running 0 6m51s
istio-egressgateway-6999674db4-tsm28 1/1 Running 0 6m55s
istio-ingressgateway-66757b946f-qqvms 1/1 Running 0 6m55s
istio-tracing-7fcc6f5848-n99wt 1/1 Running 0 6m50s
istiod-7c966f79c4-76zl2 1/1 Running 0 7m38s
kiali-7f575d9c4c-ndlc6 1/1 Running 0 6m50s
prometheus-fcbb8cbdd-vdm2v 2/2 Running 0 6m50s
以端口轉發模式臨時暴露20001端口,進入kiali界面
kubectl port-forward --address 0.0.0.0 kiali-7f575d9c4c-ndlc6 20001 -n istio-system
若想直接暴露端口,則設置以NodePort暴露端口
kubectl -n istio-system edit svc kiali
改為下圖部分
ports:
- name: http-kiali
nodePort: 32660
port: 20001
protocol: TCP
targetPort: 20001
selector:
app: kiali
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
查看istio里安裝的其他服務,比如grafana、Jaeger(tracing)也可以這樣暴露出來
kubectl -n istio-system get svc
卸載
istioctl manifest generate --set profile=demo | kubectl delete -f -
運行示例微服務Bookinfo
Bookinfo - 在線圖書商店
架構圖:
Bookinfo 應用分為四個單獨的微服務, 這些服務對 Istio 並無依賴,但是構成了一個有代表性的服務網格的例子:它由多個不同語言編寫的服務構成,並且其中有一個應用會包含多個版本。
productpage
會調用details
和reviews
兩個微服務,用來生成頁面。details
中包含了書籍的信息。reviews
中包含了書籍相關的評論。它還會調用ratings
微服務。ratings
中包含了由書籍評價組成的評級信息。
reviews
微服務有 3 個版本,可用來展示各服務之間的不同的調用鏈路:
- v1 版本不會調用
ratings
服務。 - v2 版本會調用
ratings
服務,並使用 1 到 5 個黑色星形圖標來顯示評分信息。 - v3 版本會調用
ratings
服務,並使用 1 到 5 個紅色星形圖標來顯示評分信息。
創建命名空間
kubectl create ns bookinfo
Istio] 默認自動注入 Sidecar,為 bookinfo
命名空間打上標簽 istio-injection=enabled
:
kubectl label ns bookinfo istio-injection=enabled
部署服務
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
查看pod
kubectl get po -n bookinfo
部署網關
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo
查看暴露的端口
kubectl get svc -n istio-system
訪問,就可以看到頁面
http://主機ip:端口/productpage
加壓
for i in {1..100}; do curl -I http://主機ip:端口/productpage/productpage; sleep 1; done
然后查看kiali、grafana、Jaeger(tracing)就會出現數據,kiali默認賬戶密碼都是admin