iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
Kubernetes

從零開始的 Kubernetes 基礎觀念與實作系列 第 13 篇

# 從零開始的 Kubernetes 基礎觀念與實作 DAY13

  • 分享至 

  • xImage
  •  

Service

Service用來提供Pod一個固定的連線入口。因為Pod重新建立後IP可能會改變,如果其他Pod直接使用Pod IP連線,就可能在Pod更新或故障後失效。
Service會依照Label 找到符合條件的Pod,並提供固定的IP與DNS名稱。其他應用程式只要連到Service,就不需要知道後方實際是哪一個Pod。
下面為常見的Service類型

  • ClusterIP :只能在 Kubernetes 叢集內部存取,也是預設類型。
  • NodePort :除了叢集內部外,也能透過 Node 的 IP 與指定連接埠從外部存取。
  • LoadBalancer:通常用於雲端環境,由雲端平台提供對外的 Load Balancer。
  • ExternalName:將 Service 名稱對應到外部網域名稱,不會建立實際的 Pod 連線規則。
    這裡使用ClusterIP和Deployment示範
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx-demo
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP

selector中的app: nginx-demo必須和Deployment建立的Pod Label相同,Service才能找到要轉送流量的 Pod。
port是Service對外提供的連接埠,targetPort則是實際轉送到Pod容器的連接埠。這個範例中兩者都是 80。
套用後輸入kubectl get service來查看Service
image
不過因為ClusterIP是只能從叢集內部存取,所以這裡建立一個測試用的Pod

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-pod
      image: busybox:1.36
      command: ["sh", "-c", "sleep 3600"]

套用後輸入kubectl exec -it test-pod -- sh進去Pod內部。
輸入wget -qO- http://nginx-service來測試Service。
會看到回傳的html這樣就代表這個Service是正常運作的


上一篇
從零開始的 Kubernetes 基礎觀念與實作 DAY12
下一篇
從零開始的 Kubernetes 基礎觀念與實作 DAY14
系列文
從零開始的 Kubernetes 基礎觀念與實作 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言