安裝部署Istio

K8s集羣版本:1.16.8

通過Istio的官網查找對應支持的版本:1.7.3

  1. 首先下載Istio
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.7.3 TARGET_ARCH=x86_64 sh -

 該命令會自動下載istio-1.7.3的tar文件,並解壓

2. 設置環境變量

export PATH=/root/istio/istio-1.7.3/bin:$PATH

3. 通過Istio客戶端安裝Istio

istioctl install --set profile=demo -y

安裝完成後,可以查看對應的Pod等K8s資源

4. 設置sidecar自動注入的標籤

kubectl label namespace default istio-injection=enabled

上面的意思是:給default的命名空間打上自動注入啓用的label

5. 部署Bookinfo應用

#下載Bookinfo的yaml文件
curl -O https://raw.githubusercontent.com/istio/istio/1.7.3/samples/bookinfo/platform/kube/bookinfo.yaml
#運行
kubectl apply -f bookinfo.yaml

Bookinfo是Istio官網的demo項目,模擬的是一個在線書店的網站,包含一個產品頁面,涉及4個微服務,其中的調用關係如下所示:

 

通過Istio自動注入sidecar接管流量之後變成如下所示:

 

所有的微服務都和 Envoy sidecar 集成在一起,被集成服務所有的出入流量都被 sidecar 所劫持,這樣就爲外部控制準備了所需的 Hook,然後就可以利用 Istio 控制平面下發對應的 XDS 協議從而使 Envoy Sidecar 爲應用提供服務路由、遙測數據收集以及策略實施等功能。

6. 模擬請求,執行如下命令

kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"

7. 如果想在集羣外訪問該網站服務,還需要通過Istio的gateway功能來設置外網訪問

#下載yaml文件
curl -O https://raw.githubusercontent.com/istio/istio/1.7.3/samples/bookinfo/networking/bookinfo-gateway.yaml

#運行
kubectl apply -f bookinfo-gateway.yaml

由於本地測試環境未使用外部負載均衡器,這裏用NodePort來實現局域網訪問

需要設置INGRESS_HOST 和  INGRESS_PORT變量,執行如下命令

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
export INGRESS_HOST=cos1

其實對應的就是istio-system的istio-ingressgateway服務

所以,局域網內部,只要在瀏覽器中訪問:http://INGRESS_HOST:INGRESS_PORT/productpage

這裏也就是http://cos1:31185/productpage或者https://cos1:30173/productpage

 

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