本篇大綱
這篇要來嘗試 Service 之間的連線,用 MySQL 建立 DB 掛 Service,再用 Wordpress 連線到 MySQL 的 Service 上,並且使用 Port forward 把 Wordpress 轉出去。
內文
這裡先做個聲明:
- Wordpress 有官方建議的安裝方式,如果想要在正式環境使用,請參考 Wordpress 建議安裝,這裡只是為了展示 Pod 與 Service 之間的溝通和 Secret 的運作方式。
- MySQL 想要用 ReplicaSet,請使用 MySQL 官方指定的 K8s 建議安裝方式,請不要使用 Deployment 方式作為安裝。
今天要實作 Wordpress + MySQL 架設服務,以下是這次的架構圖:
用 mysql-deployment
建立 mysql-pod
,儲存資料用 emptyDir,傳 mysql-pass-secret
進去當作資料庫的密碼,再用 mysql-svc
對外開 Port。
接下來用 wordpress-deployment
建立 Wordpress Pod,儲存資料用 emptyDir,傳入 mysql-pass-secret
作為連接資料庫的密碼,再用 Service 對外出去連線。
那就先來建立 Secret 作為 MySQL 的密碼:
1
| kubectl create secret generic mysql-pass --from-literal=password='My5tr0ngP@s5w0rd'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deploy labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage emptyDir: {}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: ClusterIP
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-deploy labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: frontend strategy: type: Recreate template: metadata: labels: app: wordpress tier: frontend spec: containers: - image: wordpress:4.8-apache name: wordpress env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html volumes: - name: wordpress-persistent-storage emptyDir: {}
|
那先把 MySQL 安裝上去:
1 2
| kubectl apply -f mysql-deploy.yaml -f mysql-svc.yaml kubectl get all
|
再來把 WordPress 安裝上去:
1 2
| kubectl apply -f wordpress-deploy.yaml -f wordpress-svc.yaml kubectl get all
|
這裡面的 Service 都採用 ClusterIP 連線,那要怎麼連上去?
我這裡可以偷偷開個 port forward 從 bastion-host
轉發出去:
1 2
| kubectl port-forward service/wordpress 8000:80 --address='0.0.0.0'
|
後面加個 --address='0.0.0.0'
代表所有主機皆可連線,預設是 127.0.0.1
,按下 enter 就會掛著。
那記得把 OpenStack 安全性群組 Public SSH
的 8080 Port 打開,這樣 Bastion Host 才能連線。
那我們就可以在網址上輸入:http://103.122.116.3:8000
試試連線
有辦法顯示這樣畫面就代表簡單服務已經完成了!
那就可以回到 Console 按下 ctrl+c
回到 bastion-host
(瀏覽器端就會停止連線了)
記得把剛剛的設定檔刪除:
1 2
| kubectl delete -f . kubectl delete secret mysql-pass
|
也要記得把 8000 Port 連線刪掉
這樣每次安裝上去都有點麻煩,都要去重新命名,有沒有比較方便的工具可以讓我們直接 apply 這些設定呢?
其實是有的,那個工具叫做 Helm,後面就要來介紹它怎麼安裝使用了。
本系列內容也會同步貼到我的 iT 邦幫忙 https://ithelp.ithome.com.tw/users/20112934 歡迎來點一下追蹤,那我們就下一篇文章見啦!
Source