沿用第七篇的 web Deployment,這次建立同名 Service,將服務埠與目標埠都設為80。建立後查詢 Service,可以看到叢集內部位址。再查看 EndpointSlice,確認後端不是空的,這一步能把「入口存在」與「入口後方確實有服務」分開驗證。
接著啟動一個短暫的測試 Pod,從叢集內部透過 web 這個名稱發出請求。若輸出包含網站的網頁內容,表示服務名稱解析與基本連線路徑可用。測試 Pod 和 Service 位於同一命名空間,因此可以使用短名稱,不必填寫完整服務名稱。
如果請求失敗,先確認網站 Pod 是否就緒,再檢查 Service 選擇器與 Pod 標籤是否相符。若後端存在但仍無法連線,則應檢查目標埠與應用程式實際監聽位置,避免只盯著入口位址反覆嘗試。
最後以連接埠轉送從本機瀏覽網站。請注意,這項操作只是透過 Service 選到一個 Pod 進行轉送,不能用來證明叢集內負載平衡行為。完成後停止轉送並刪除測試 Pod,保留網站與 Service 供後續文章使用。
kubectl expose deployment web --port=80 --target-port=80
kubectl get service web
kubectl get endpointslices -l kubernetes.io/service-name=web
kubectl run service-check --image=busybox:1.37 --restart=Never -- wget -qO- <http://web>
kubectl logs service-check
若容器仍在啟動,稍候再讀日誌。完成後執行:
kubectl delete pod service-check
kubectl port-forward service/web 8080:80
參考: Service 與服務探索