Istio學習筆記——部署示例工程Bookinfo

項目介紹

Bookinfo是Istio官方提供的一個微服務風格的書店應用,作為實驗對象,用于演示Istio的各種特性。(顯然,在做Istio實驗前,還要自己先寫一個微服務應用,學習路徑就太不友好了。)

系統(tǒng)架構(gòu)

Bookinfo包含4個獨立的微服務:

  • Ratings (評分服務)
  • Details(詳情服務)
  • Reviews (評論服務,依賴Ratings,同時提供評論和評分)
  • Productpage(產(chǎn)品頁面,展示產(chǎn)品詳情,評論和評分)

其中Reviews有3個版本:

  • v1只提供評論
  • v2同時提供評論和評分,評分以黑色星星展現(xiàn)
  • v3同時提供評論和評分,評分以紅色星星展現(xiàn)

依賴關(guān)系如下圖所示:

image.png

安裝步驟

istio的安裝包自帶了bookinfo的部署腳本,以下命令均在istio-1.2.0目錄下執(zhí)行。

  1. 對default namespace使用自動注入sidecar功能
kubectl label namespace default istio-injection=enabled
  1. 部署B(yǎng)ookinfo
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

部署內(nèi)容包括4個service,以及6個deployment(Reviews每個版本各有一個deployment)

  1. 檢查service和pod狀態(tài),確認啟動成功。

  2. 嘗試在ratings pod中調(diào)用productpage,確認應用運行正常。

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>"

預期輸出為<title>Simple Bookstore App</title>

源碼分析

對Bookinfo的源碼分析,主要關(guān)注點在于,開發(fā)人員需要做什么特定的調(diào)整,才可以把應用部署到Istio,并自動獲得Istio的各種特性。

  1. 部署腳本

部署腳本即samples/bookinfo/platform/kube/bookinfo.yaml,可以看到里面定義的均為標準Kubernetes Deployment和Service對象,并不需要為Istio做特殊定制(前提是為當前namespace啟動了sidecar自動注入)。

  1. 服務間通訊

Bookinfo的服務間通過HTTP通訊。以Reviews調(diào)用Ratings為例,Reviews通過GET ratings(.default.svc.cluster.local):9080/ratings/{productId}訪問Ratings,得到某個特定產(chǎn)品的評分。

其中domain部分通過環(huán)境變量SERVICE_DOMAIN傳入(若為空,則認為與調(diào)用者在同一namespace下)。

這就是kubernetes服務發(fā)現(xiàn)的方式,在代碼層面,并不需要為Istio做額外的事情。

  1. Tracing

在4個微服務中能發(fā)現(xiàn)類似的代碼:

從訪問本服務的HTTP Request中獲得以下header,如果需要調(diào)用其他服務,那么在請求中,也把這些header加上。

incomming_headers = [
  'x-request-id',
  'x-b3-traceid',
  'x-b3-spanid',
  'x-b3-parentspanid',
  'x-b3-sampled',
  'x-b3-flags',
  'x-ot-span-context'
]

request = Net::HTTP::Get.new(uri.request_uri)
incomming_headers.each { |header, value| request[header] = value }
response = http.request(request)

這是為了對接OpenTracing,是屬于需要特殊的部分(但這部分特定代碼是為了使用OpenTracing,不管是否部署到Istio,如果服務需要通過OpenTracing監(jiān)控,那么這部分代碼就必須實現(xiàn))。

結(jié)論,開發(fā)人員并不需要為對接Istio做特殊的定制開發(fā),Istio確實做到了它的目標,提供強大的服務治理功能的同時,對應用開發(fā)人員透明。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容