當我們建立服務時,通常會涉及到資訊的輸入和輸出,例如網頁前後端、資料庫等。每當 Pod 啟動時,Kubernetes 會自動分配一個 IP 給它。然而,我們通常不知道每次分配的 IP,那麼該如何存取這個服務呢?
Kubernetes 已經考慮到這一點,提供了一個基本的 Service 供我們連接服務。同樣地,我們需要編寫一個 YAML 檔案來定義我們的服務,這次以 Nginx 為例。
# service.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod # 這邊的 Label ,key 跟 value 基本上隨便取即可。
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport-service
spec:
type: NodePort
selector:
app: nginx-pod # 要跟這邊對應
ports:
- name: nginx
port: 3306
targetPort: 80
nodePort: 30000 # 30000 ~ 32767
在這個例子中,我們的 Pod 使用 Nginx 並開啟 Port 80。接著,我們的 Service 使用 Port 3306 連接到 Pod 的 Port 80,並在所有 Node 上開啟 Port 30000,供外部連線。NodePort 意味著 Service 會在所有 Worker Node 上開放相同的 nodePort 供外部連線,否則預設僅提供給 Kubernetes 內部連線。
別忘了對我們的 Pod 使用 Label 進行標記,並且 Service 會使用 Label Selector 去選擇對應 Label 的 Pod 進行連線。
接下來,我們使用以下指令讓我們的服務建立起來:
$ kubectl apply -f service.yaml
一旦服務建立起來,我們可以在任何一台機器上(Master 或 Worker)透過瀏覽器訪問 http://localhost:30000,查看我們建立起來的服務。
如果想查看所有的 Service,可以使用以下指令:
$ kubectl get service
# 或
$ kubectl get svc