昨天跟各位介紹完關於 Service 的一些基本觀念後,今天來為各位介紹要如何實作一個自己的 Service 吧!那我們今天的目的是將我們前幾天實作的 Pod 與 Service 連接服務,讓外部能夠成功接收到,而今天要實作的服務是 Nginx。
而這邊因為我們原本建立的 Pod 是以 ubuntu 的 image 建立的,所以今天我們必須進入 Pod 本身執行 shell 指令來安裝 Nginx。
那廢話不多說,我們開始今天的實作介紹吧!
首先,我們一樣需要先建立一個屬於這個 Service 的 YAML 檔,以下是範例:
# test_service.yaml
apiVersion: v1
kind: Service
metadata:
name: test-service
spec:
type: NodePort
selector:
app: test
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 30390
而這次的 YAML 檔大致上與建立 Pod 的那份差不多,只有幾個地方比較需要特別注意,第一點是 spec 裡的 type,由於我們使用的 Node 是 Master Node,如果我們沒有特別指定的話,它的預設值會是 Cluster IP,而這樣就會衝突到,所以必須將它指定成 NodePort。
下面 selector 必須要跟原本建立的 Pod 的值一樣,跟我們昨天介紹的一樣,這樣才能指定到需要的 Pod。
再往下的 ports 是需要開給你服務的埠號,因為 Nginx 預設是開在 80 port 所以這邊將 port 80 打開。但有些讀者這邊可能就會有一些疑問了,為什麼除了 port 以外,還有其他像 targetPort 與 nodePort,它們是什麼東西?那這邊我來為各位大致解釋這三個 port 分別代表的意義吧!
而這邊建立完 YAML 檔後,就可以執行下面這行指令:
kubectl apply -f test_service.yaml
service/test-service created
成功建立完之後,我們要先進入 Pod 內執行 Shell 指令將 Nginx 安裝起來:
kubectl exec -ti ubuntu-pod -- /bin/bash
root@ubuntu-pod:/#
並下以下指令:
apt update
apt install nginx
apt install systemctl
這邊依照上面的安裝指示完之後,你的 Pod 裡面就成功安裝 Nginx 了,不過我們要先確認我們的 Nginx 是開啟的狀態,若是關閉的,就要將它開啟。
root@ubuntu-pod:/# systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service, enabled)
Active: inactive (dead)
我們仔細看上面回傳的訊息,會發現 Nginx 並未開啟,所以我們需要下另一條指令:
systemctl start nginx
systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service, enabled)
Active: active (running)
這邊出現 active (running) 就代表已經成功啟用。
那我們這邊可以用外部的瀏覽器來驗證是否具有 Nginx 的網站了。
這時我們可以先查詢我們建立的 Service 的 VIP
kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19d <none>
test-service NodePort 10.107.109.58 <none> 80:30390/TCP 175m app=test
這邊我們查到 VIP 為 10.107.109.58,這時我們在瀏覽器上打上他的網址與埠號: 10.107.109.58:80,就會出現此畫面:
出現這畫面就代表你成功了!!
那我們今天實作就先到這邊,我們明天見~掰掰!