Bookinfo 應(yīng)用
這個示例部署了一個用于演示多種 Istio 特性的應(yīng)用,該應(yīng)用由四個單獨的微服務(wù)構(gòu)成。
如安裝了 Istio,說明已安裝 Bookinfo。
這個應(yīng)用模仿在線書店的一個分類,顯示一本書的信息。 頁面上會顯示一本書的描述,書籍的細(xì)節(jié)(ISBN、頁數(shù)等),及書評。
Bookinfo 應(yīng)用分為四個單獨的微服務(wù):
-
productpage
:會調(diào)用details
和reviews
兩個微服務(wù),生成頁面 -
details
:包含書籍信息。 -
reviews
:包含書籍相關(guān)的評論。它還會調(diào)用ratings
微服務(wù) -
ratings
:包含由書籍評價組成的評級信息
reviews
微服務(wù)有 3 個版本:
- v1 不會調(diào)用
ratings
服務(wù)。 - v2 會調(diào)用
ratings
服務(wù),并使用 1 到 5 個黑星顯示評分信息 - v3 會調(diào)用
ratings
服務(wù),并使用 1 到 5 個紅星顯示評分信息
應(yīng)用的端到端架構(gòu)(Bookinfo Application without Istio):
Bookinfo 應(yīng)用中的幾個微服務(wù)是由不同的語言編寫的。 這些服務(wù)對 Istio 并無依賴,但是構(gòu)成了一個有代表性的服務(wù)網(wǎng)格的例子: 它由多個服務(wù)、多個語言構(gòu)成,并且 reviews
服務(wù)具有多個版本。
2 開始之前
Istio 包括了對 Kubernetes Gateway API 的 Beta 支持, 打算未來使其成為流量管理的默認(rèn) API。 以下說明指導(dǎo)您在網(wǎng)格中配置流量管理時如何選擇使用 Gateway API 或 Istio 配置 API。 請按照您的首選項遵循 Gateway API
或 Istio APIs
頁簽中的指示說明。
Kubernetes Gateway API CRD 不會默認(rèn)安裝在大多數(shù) Kubernetes 集群, 請確保在使用 Gateway API 之前已安裝好這些 CRD:
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
{ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | kubectl apply -f -; }
3 原生部署
要在 Istio 中運行這一應(yīng)用,無需對應(yīng)用自身做出任何改變。 只要簡單的在 Istio 環(huán)境中對服務(wù)進行配置和運行,具體一點說就是把 Envoy Sidecar 注入到每個服務(wù)之中。 最終部署結(jié)果:
所有的微服務(wù)都和 Envoy Sidecar 集成在一起,被集成服務(wù)所有的出入流量都被 Sidecar 所劫持, 這樣就為外部控制準(zhǔn)備了所需的 Hook,然后就可以利用 Istio 控制平面為應(yīng)用提供服務(wù)路由、遙測數(shù)據(jù)收集以及策略實施等功能。
3.1 啟動應(yīng)用服務(wù)
-
進入 Istio 安裝目錄
-
Istio 默認(rèn)自動注入 Sidecar。為
default
命名空間打上標(biāo)簽istio-injection=enabled
:$ kubectl label namespace default istio-injection=enabled
-
使用
kubectl
部署應(yīng)用:$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
如果您在安裝過程中禁用了 Sidecar 自動注入功能而選擇手動注入 Sidecar, 請在部署應(yīng)用之前使用
istioctl kube-inject
命令修改bookinfo.yaml
文件。$ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
上面的命令會啟動全部的四個服務(wù),其中也包括了 reviews 服務(wù)的三個版本(v1、v2 以及 v3)。
在實際部署中,微服務(wù)版本的啟動過程需要持續(xù)一段時間,并不是同時完成的。
-
確認(rèn)所有的服務(wù)和 Pod 都已經(jīng)正確的定義和啟動:
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.31 <none> 9080/TCP 6m kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 7d productpage ClusterIP 10.0.0.120 <none> 9080/TCP 6m ratings ClusterIP 10.0.0.15 <none> 9080/TCP 6m reviews ClusterIP 10.0.0.170 <none> 9080/TCP 6m
還有:
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
-
要確認(rèn) Bookinfo 應(yīng)用是否正在運行,請在某個 Pod 中用
curl
命令對應(yīng)用發(fā)送請求,例如ratings
:$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
3.2 確定 Ingress 的 IP 和端口
現(xiàn)在 Bookinfo 服務(wù)啟動并運行中,您需要使應(yīng)用程序可以從外部訪問 Kubernetes 集群, 例如使用瀏覽器。可以使用網(wǎng)關(guān)實現(xiàn)這個目標(biāo)。
-
為 Bookinfo 應(yīng)用程序定義一個網(wǎng)關(guān):
Istio APIsGateway API
這些說明假定您的 Kubernetes 集群支持外部負(fù)載均衡器(即
LoadBalancer
類型的服務(wù))。 請參考 Ingress 控制了解詳情。使用以下命令創(chuàng)建 Kubernetes Gateway:
$ kubectl apply -f samples/bookinfo/gateway-api/bookinfo-gateway.yaml gateway.gateway.networking.k8s.io/bookinfo-gateway created httproute.gateway.networking.k8s.io/bookinfo created
因為創(chuàng)建 Kubernetes
Gateway
資源也會 部署關(guān)聯(lián)的代理服務(wù), 所以運行以下命令等待網(wǎng)關(guān)就緒:$ kubectl wait --for=condition=programmed gtw bookinfo-gateway
從 bookinfo 網(wǎng)關(guān)資源處獲取網(wǎng)關(guān)地址和端口:
$ export INGRESS_HOST=$(kubectl get gtw bookinfo-gateway -o jsonpath='{.status.addresses[0].value}') $ export INGRESS_PORT=$(kubectl get gtw bookinfo-gateway -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
-
設(shè)置
GATEWAY_URL
:$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
4 kubesphere 部署
登錄控制臺并訪問項目 (demo-project
)。前往應(yīng)用負(fù)載下的應(yīng)用,點擊右側(cè)的部署示例應(yīng)用:
在出現(xiàn)的對話框中點擊下一步,其中必填字段已經(jīng)預(yù)先填好,相關(guān)組件也已經(jīng)設(shè)置完成:
無需修改設(shè)置,只需在最后一頁(路由設(shè)置)點擊創(chuàng)建:
KubeSphere 會自動創(chuàng)建主機名。若要更改主機名,請將鼠標(biāo)懸停在默認(rèn)路由規(guī)則上,然后點擊 進行編輯。
工作負(fù)載中,確保這四個部署都處于運行中
狀態(tài),這意味著該應(yīng)用已經(jīng)成功創(chuàng)建??赡苄枰葞追昼姴拍芸吹讲渴鹫_\行。
5 訪問 Bookinfo
在應(yīng)用中,訪問自制應(yīng)用,點擊應(yīng)用 bookinfo
查看其詳情頁面:
詳情頁面中顯示用于訪問 Bookinfo 應(yīng)用的主機名和端口號。
內(nèi)網(wǎng)服務(wù)器請求訪問:
由于將通過 NodePort 在集群外訪問該應(yīng)用,因此需在安全組中為出站流量開放上圖的端口,并按需設(shè)置端口轉(zhuǎn)發(fā)規(guī)則。
在本地 hosts 文件 (/etc/hosts
) 中添加一個條目將主機名映射到對應(yīng)的 IP 地址,如:
139.198.178.20 productpage.icv-data-demo.192.168.0.190.nip.io
請你替換成自己的 IP 地址與主機名。
完成后,點擊訪問服務(wù)訪問該應(yīng)用:
在應(yīng)用詳情頁面,點擊左下角的 Normal user。
Book Reviews 板塊僅出現(xiàn) Reviewer1 和 Reviewer2,并且沒有任何評級內(nèi)容,因為這是當(dāng)前應(yīng)用版本的狀態(tài)。
關(guān)注我,緊跟本系列專欄文章,咱們下篇再續(xù)!
作者簡介:魔都國企技術(shù)專家兼架構(gòu),多家大廠后臺研發(fā)和架構(gòu)經(jīng)驗,負(fù)責(zé)復(fù)雜度極高業(yè)務(wù)系統(tǒng)的模塊化、服務(wù)化、平臺化研發(fā)工作。具有豐富帶團隊經(jīng)驗,深厚人才識別和培養(yǎng)的積累。
參考:文章來源:http://www.zghlxwxcb.cn/news/detail-778748.html
- 編程嚴(yán)選網(wǎng)
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-778748.html
到了這里,關(guān)于使用KubeSphere輕松部署B(yǎng)ookinfo應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!