iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0

現在我有三個 Pod 在跑,但真的要連它們的時候問題就來了。Pod 的 IP 是動態的,自癒重建會換一個,昨天做滾動更新更是整批換掉,所以拿 Pod IP 當入口這件事不成立

Service 就是來解這個問題的。它是一個固定不動的入口,後面掛哪些 Pod 由 selector 決定,Pod 換了它自己會跟上

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: ithome-lab
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
  • Service 是核心資源,所以 apiVersion 又回到 v1
  • selector:它沒有像 Deployment 那樣包一層 matchLabels,直接寫鍵值對就好
  • port & targetPort:port 是 Service 自己對外開的埠,targetPort 是 Pod 裡面 Container 實際在聽的埠。這兩個不一定要一樣,寫成 port 8080 配 targetPort 80 也可以,只是 nginx 剛好兩邊都是 80
  • type 寫 ClusterIP 其實是預設值,意思是只有叢集內部連得到。另外還有 NodePort 跟 LoadBalancer 可以對外開
kubectl apply -f manifests/base/service.yaml
kubectl get service -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20260924/20176154zk1mQHgH8G.png

那個 CLUSTER-IP 就是固定入口。它是虛擬的,不對應任何一台實體機器,K8s 在每個節點上做轉發,把打到這個 IP 的流量導去後面的 Pod

kubectl get endpointslices -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20260924/20176154dZz7EUFP6T.png

EndpointSlice 記錄的是這個 Service 現在實際指到哪些 Pod。Service 本身並沒有記住 Pod 清單,是另外有個控制器一直拿 selector 去比對 Label,比對到的 Pod IP 就寫進 EndpointSlice

這件事為什麼重要,因為 Service 的 selector 打錯字的時候,get service 看起來完全正常,CLUSTER-IP 也還在,只有 EndpointSlice 會是空的。

先確認現在是通的

kubectl port-forward -n ithome-lab service/web 8080:80

https://ithelp.ithome.com.tw/upload/images/20260924/20176154F6xThEDogX.png

一樣是 port-forward,但這次接的是 service/web 而不是某一個特定的 Pod。不過要注意,port-forward 只是幫你從目前的 Pod 裡面挑一個出來打,挑定之後整個 session 都固定連同一個,那個 Pod 沒了 session 就直接斷掉,它本身沒有負載平衡這回事。真正會依 selector 分散到不同 Pod 的,是叢集內部走 ClusterIP 的流量,也就是下面這個做法

叢集內部要連的話還有更方便的方式,因為 Service 會有 DNS 名稱

kubectl run tmp -n ithome-lab --rm -it --image=curlimages/curl -- sh
curl http://web
curl http://web.ithome-lab.svc.cluster.local

https://ithelp.ithome.com.tw/upload/images/20260924/20176154Q1RSdGAsZh.png

那個 --rm 是離開的時候順便把這個 Pod 刪掉,-it 進互動模式。同一個 namespace 裡面直接用 Service 名字就連得到,跨 namespace 才需要寫完整的那一長串。測完打 exit,Pod 就會自己清掉

今天到這裡,明天見 :D


上一篇
Day 9 rollout
下一篇
Day 11 ConfigMap
系列文
讓Claude Code當我的 K8s 助教:部署、故障排查與入門可觀測性 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
justin_log
iT邦新手 4 級 ‧ 2026-09-24 17:07:37

學長!我9/21有在您的文章下面留幾個問題,若學長有空的話請再幫我撥冗回覆,謝謝學長!

看更多先前的回應...收起先前的回應...
noalowo iT邦新手 4 級 ‧ 2026-09-24 17:08:21 檢舉

學長別鬧了

已檢舉

noalowo iT邦新手 4 級 ‧ 2026-09-24 17:09:41 檢舉

不要拉

https://ithelp.ithome.com.tw/upload/images/20260924/20178130y7nkLxyZDh.png

mengbai iT邦新手 5 級 ‧ 2026-09-24 19:10:03 檢舉


為什麼不行QAQ

我要留言

立即登入留言