iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

昨天跟各位介紹完關於 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 分別代表的意義吧!

  • port : 代表的是 Service 開出來的 Port。
  • targetPort : 代表的是 Container 上開出來的 Port。
  • NodePort : 代表的是 Node 開出來的 Port。而預設值在 30000-32768之間。

而這邊建立完 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,就會出現此畫面:

出現這畫面就代表你成功了!!

那我們今天實作就先到這邊,我們明天見~掰掰!


上一篇
Day21 Kubernetes 的溝通橋樑 – Service
下一篇
Day23 何謂 Deployment?
系列文
被容器束縛住的小宇宙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言