Istio 部署Bookinfo 應用

2022-05-17 04:29:34 字數 4046 閱讀 9844

bookinfo 應用分為四個單獨的微服務:

reviews微服務有 3 個版本:

下圖展示了這個應用的端到端架構。

bookinfo 應用中的幾個微服務是由不同的語言編寫的。 這些服務對 istio 並無依賴,但是構成了乙個有代表性的服務網格的例子:它由多個服務、多個語言構成,並且reviews服務具有多個版本。

要在 istio 中執行這一應用,無需對應用自身做出任何改變。 您只要簡單的在 istio 環境中對服務進行配置和執行,具體一點說就是把 envoy sidecar 注入到每個服務之中。 最終的部署結果將如下圖所示:

所有的微服務都和 envoy sidecar 整合在一起,被整合服務所有的出入流量都被 sidecar 所劫持,這樣就為外部控制準備了所需的 hook,然後就可以利用 istio 控制平面為應用提供服務路由、遙測資料收集以及策略實施等功能。

注意,按照官方文件,在2步中,啟動了自動注入 sidecar。這一步千萬不要執行。

你會發現,乙個pod都沒有執行,是不是很絕望啊,這pod到底跑**去了呢???

1. 正確的做法是,使用手動注入sidecar

2. 檢視svc

[root@k8s-master ~]# kubectl get svc

name type cluster-ip external-ip port(s) age

details clusterip

10.1.1.81

9080/tcp 18m

kubernetes clusterip

10.1.0.1

443/tcp 28m

productpage clusterip

10.1.114.106

9080/tcp 18m

ratings clusterip

10.1.231.95

9080/tcp 18m

reviews clusterip

10.1.198.180

9080/tcp 18m

3. 檢視pod

[root@k8s-master ~]# kubectl get pods

name ready status restarts age

details-v1-7c954bd65b-6wx2t 2/2 running 0

18mproductpage-v1-6c47684d7-sxhkw 2/2 running 0

18mratings-v1-7545898bd4-pjmm4 2/2 running 0

18mreviews-v1-5b676dc848-7tcjv 2/2 running 0

18mreviews-v2-5797d46b9-q4vrq 2/2 running 0

18mreviews-v3-86d796848b-gkbdt 2/2 running 0 18m

注意:耐心等待幾分鐘,狀態就會轉換為running

4. 要確認 bookinfo 應用是否正在執行,請在某個 pod 中用curl命令對應用傳送請求,例如ratings

') -c ratings -- curl productpage:9080/productpage | grep -o ".*"

輸出:現在 bookinfo 服務啟動並執行中,您需要使應用程式可以從外部訪問 kubernetes 集群,例如使用瀏覽器。可以用 istio gateway 來實現這個目標。

1. 為應用程式定義 ingress 閘道器:

2. 確認閘道器建立完成

[root@k8s-master ~]# kubectl get gateway

name age

bookinfo-gateway 61s

3. 根據文件設定訪問閘道器的ingress_hostingress_port變數。確認並設定。

在istio 的安裝文件中,我已經通過nodeport 方式來暴露istio-ingressgateway 服務,現在根據如下命令來獲取 ingress ports:

export ingress_port=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='')

export secure_ingress_port=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='

')

export ingress_host=$(kubectl get po -l istio=ingressgateway -n istio-system -o '

jsonpath=

')

設定 gateway_url:

[root@k8s-master ~]# export gateway_url=

$ingress_host:$ingress_port

[root@k8s-master ~]# echo $gateway_url

192.168.31.16:32223

可以用curl命令來確認是否能夠從集群外部訪問 bookinfo 應用程式:

輸出:還可以用瀏覽器開啟**http://$gateway_url/productpage,來瀏覽應用的 web 頁面。如果重新整理幾次應用的頁面,就會看到productpage頁面中會隨機展示reviews服務的不同版本的效果(紅色、黑色的星形或者沒有顯示)。reviews服務出現這種情況是因為我們還沒有使用 istio 來控制版本的路由。

訪問url

效果如下:

如果重新整理幾次應用的頁面,就會看到頁面中會隨機展示 reviews 服務的不同版本的效果(紅色、黑色的星形或者沒有顯示)。reviews 服務出現這種情況是因為我們還沒有使用 istio 來控制版本的路由。

gateway 配置資源允許外部流量進入 istio 服務網格,並使 istio 的流量管理和策略功能可用於邊緣服務。

在前面的步驟中,我們在 istio 服務網格中建立了乙個服務,並展示了如何將服務的 http 端點暴露給外部流量。

在使用 istio 控制 bookinfo 版本路由之前,您需要在目標規則中定義好可用的版本,命名為 subsets 。

執行以下命令為 bookinfo 服務建立的預設的目標規則:

如果沒有啟用雙向 tls,請執行以下命令:

等待幾秒鐘,以使目標規則生效。

您可以使用以下命令檢視目標規則:

kubectl get destinationrules -o yaml

istio 命名空間bookinfo部署

1 建立命名空間 kubectl create ns bookinfo 2 新增label,開啟自動注入proxy kubectl label ns bookinfo istio injection enabled 檢視lable kubectl describe ns bookinfo 4 獲取 ...

istio部署 sidecar注入

工作負載的 pod 必須有關聯的 service 準備測試用 yaml 檔案 cd 新的 yaml 檔案中多出了 sidecar 容器,並且出現了1個初始化容器 initcontainers istio init 初始化容器即用來劫持應用通訊到 sidecar 容器的工具 istioctl kube...

k8s安裝部署Istio

istio簡介 istio 的安裝檔案中包括如下幾個子 chart。ingress ingressgateway egressgateway sidecarinjectorwebhook galley mixer pilot security citadel grafana prometheus s...