接著我們要來介紹同樣基本的 Service 。
通常大部分的服務都需要有資訊輸入及輸出,例如網頁前後端、資料庫之類的,而我們的 Pod 在啟動時都會有個 IP 由 Kubernetes 自動分配,那麼問題就來了,我們不知道每次分配的 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 做連線。
這樣我們的 Service 就做好了,接著我們就使用以下指令來讓我們的服務建立起來。
$ kubectl apply -f service.yaml
我們的服務建立起來之後,就可以再任意一台機器上(Master 或 Worker)透過瀏覽器在 http://localhost:30000 瀏覽我們建立起來的服務了。
如果要查看我們所有的 Service ,可以透過以下指令。
$ kubectl get service
# or
$ kubectl get svc
更詳細的設定可參考 官方文件
那麼就先到這邊,因為是面向新手的教學,因此暫時沒有講到比較細節的東西。
大家掰~掰~