雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
在Kubernetes中,服務是一個核心概念。在本文中,将介紹如何調試K8S服務,這些服務是由多個Pod組成的工作負載的抽象接口(主機+端口)。
在我們深入探索debug方法之前,我們先簡單回顧一下網絡,這是Kubernetes服務的基礎。
- 在一個pod中的容器共享相同的網絡空間和IP。
- 所有的pod都能通過IP彼此通信。
- 每個節點都能看到所有的Pod,反之亦然。
- Pod可以看到所有的服務。
那麼,在實踐中這些意味着什麼呢?

在圖中:
- 位于Pod1中的容器B可以直接作為localhost尋址容器A
- 容器B可以通過其IP直接尋址Pod2(kubectl get pod -o wide)。我們知道當pod2出現故障時着不是一個可靠的通信管道,并且一個新的pod可以出現在其位置中。但是我們無法追逐不斷變化的目标。
- 接下來,容器B可以通過Service x通路pod 2和pod 3,後者将它們的IP與負載均衡捆綁在一起;是以,在K8S上支援基于微服務的應用程式起着至關重要的作用
盡管對Kubernetes的内部網絡結構的檢查不在本文的讨論範圍内,但我稍後會釋出一些參考資料以供大家進一步研究。
對于當下,我還是鼓勵你花費一點時間在實踐中經曆和了解Kubernetes中的網絡。例如,你可以啟動一個Kubernetes測試pod并且嘗試從該pod中通路其他pod、節點和服務。此處顯示的指令将在Pod内彈出一個Linux shell。
kubectl run -it networktest --image=alpine bin/ash --restart=Never --rm
現在你在Kubernetes網絡空間内并且你可以随意使用wegt、ping、nslookup之類的指令進行實驗。例如,測試你的Kubernetes叢集中先前列出的網絡要求,nslookup <servicename>, ping <PodIP>。
現在讓我們回到我們的話題,troubleshooting Kubernetes服務,這實際上是一種網絡結構。
Step1:檢查服務是否存在
kubectl get svc
如果服務不存在,應該是服務建立出現了故障,是以要去檢查你的服務定義。
Step2:測試你的服務
請記住,一個内部的Kubernetes ClusterIP服務是無法在叢集外部通路的。是以,有兩種方法可以對其進行測試。方法一,你可以啟動一個測試Pod,通過SSH進入該pod,然後嘗試像這樣通路你的服務:
kubectl run -it testpod --image=alpine bin/ash --restart=Never --rm
在本文中我們啟動一個alpine Docker鏡像作為pod來從其内部測試服務:
works for http services
wget :
Confirm there is a DNS entry for the service!
nslookup
或者,你可以轉發到本地計算機并在本地進行測試。
kubectl port-forward 8000:8080
現在,你可以通過localhost:8000通路服務。
Step3:檢查服務是否target相關Pod
Kubernetes服務會根據标簽selector将入站流量路由到其中一個pod,流量通過其IP路由到目标Pod。是以,請檢查服務是否綁定到那些pod。
kubectl describe service | grep Endpoints
執行上述指令之後,你應該看到與列出的工作負載相關的所有Pod的IP。如果沒有看到,請執行Step4。
Step4:檢查Pod标簽
確定在Kubernetes服務中的selector與pod的标簽相比對。
kubectl get pods --show-labels
kubectl describe svc
從下面的截圖的中可以看到,pod的标簽在右邊。四個pod被标記為app=tinywebsite和tier=frontend,這些标簽與下面“described”的服務selector相比對。
在這四個比對的Pod中,隻有三個正在運作,其IP在突出顯示的行中被列為服務的端點(endpoint)。你還可以在IP列中看到相同的IP。
Step5:确認服務端口與pod相比對
最後,確定在你的pod中的代碼能夠監聽到你為服務指定的targetPort(例如,你在上方截圖中看到的port8001)!
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-06-10
本文作者:Ram Rai
本文來自:“
dockone”,了解相關資訊可以關注“dockone”