iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
DevOps

DevOps 好想學!新手也能打造雲端 Study Lab系列 第 27

Day27 - 在 Kubernetes Ingress 掛上 Google SSL 憑證

取得 SSL 憑證的方式

Day26 我們建立了 Ingress,使服務能透過 Domain Name 連線,但因為少了 SSL 憑證,只能使用 HTTP 連線,若要提供 HTTPS 加密連線,就需建立憑證提供 Kubernetes 使用。

https://ithelp.ithome.com.tw/upload/images/20210927/20139235WgjbNeHPO9.png

圖片取至 How to secure applications running on Kubernetes

建立 SSL 憑證有很多方式,可以使用 CertBotAcme.sh 等工具自我簽發,Kubernetes 也有提供 cert-manager 憑證管理工具,而今天要介紹的是 Google 管理的 SSL 憑證,可以在 Ingress 上快速的建立、更新、管理 Certificates。

建立 Google-Managed Certificate

本篇參考 Using Google-managed SSL certificates ,我們會在 Helm Chart 建立相關 yaml 檔案,讓服務可以透過 HTTPS 連線。

  1. 進入 Cloud Shell 網站

  2. 點擊倒三角形->點選專案的 PROJECT_ID,開啟專案 Terminal

  1. 在 Helm chart 建立 certificate.yaml 以及 frontendConfig.yaml 檔案
cd ~/webapp && touch templates/certificate.yaml templates/frontendConfig.yaml 
  1. 點擊左上 Explorer -> Open Folder -> 選擇 webapp 資料夾 -> Open

建立 ManagedCertificate 元件,需要指定 Domain 名稱,這裡會從 Values 檔案的參數引入。

  1. certificate.yaml 貼上以下內容
  • certificate.yaml
apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
  name: {{ .Release.Name }}
spec:
  domains:
    - {{ .Values.ingress.domain }}

當使用者透過 HTTP 連線時,會強制轉向到 HTTPS 連線已保證安全性,在 GCE Ingress 需要建立 FrontendConfig 元件啟用 redirectToHttps 功能。

  1. frontendConfig.yaml 貼上以下內容
  • frontendConfig.yaml
apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: {{ .Release.Name }}
spec:
  redirectToHttps:
    enabled: true
    responseCodeName: PERMANENT_REDIRECT 

接著需要在 Ingress 上對 ManagedCertificateFrontendConfig 元件建立關聯。

  1. ingress.yamlannotations 增加以下內容

https://ithelp.ithome.com.tw/upload/images/20210926/20139235A2nPABFpz9.png

    networking.gke.io/managed-certificates: {{ .Release.Name }}
    networking.gke.io/v1beta1.FrontendConfig: {{ .Release.Name }}

相關 yaml 檔案都設定完成,就可以更新 Dev 環境,測試看看有無問題。

  1. 更新 Helm Chart
cd ~/webapp
helm upgrade webapp-dev .

(輸出結果)

Release "webapp-dev" has been upgraded. Happy Helming!
NAME: webapp-dev
LAST DEPLOYED: Sun Sep 26 13:59:10 2021
NAMESPACE: default
STATUS: deployed
REVISION: 4
TEST SUITE: None

Certificate 約需要 10 - 20 分鐘建立,使用 kubectl get <type> 指令查看。

  1. 查看 managedCertificate
kubectl get managedCertificate

(輸出結果)

NAME         AGE   STATUS
webapp-dev   13m   Active

當 STATUS 顯示 Active 憑證就建立完成了,可以輸入網址測試看看。

  1. 到瀏覽器輸入網址
<your dev domain name>

https://ithelp.ithome.com.tw/upload/images/20210926/20139235gJspLJi8ZU.png

憑證成功掛上去,並且強制用 HTTPS 連線。

更新 Stage 以及 Production 環境

在這幾天的教學中,我們在 Helm Chart 建立了 Database 、 Ingress 、 Certificate 等元件,並且在 Dev 環境都已經完成測試,接著就可以將更新上傳到 Manifests 的 Git Repo ,透過 ArgoCD 就會自動將 Helm Chart 同步到 Stage 以及 Production 環境。

  1. 建立 Git Commit
cd ~/webapp
git add .
git commit -m "update helm chart"

因為之前 GitLabCI 有更新 values 檔案,需要先 pull 下來合併一下。

  1. 將遠端 master pull 下來
git pull origin master

values 檔案有可能會發生 Conflict ,可以在編輯器點擊 Accept Current Change 來處理衝突。

https://ithelp.ithome.com.tw/upload/images/20210926/20139235CVXECbceyC.png

處理完 Conflict 就可以 Push 到 GitLab 上面。

  1. Push 到 GitLab 上
git push origin master

在 ArgoCD 查看,等待一段時間就會同步完成。

https://ithelp.ithome.com.tw/upload/images/20210926/20139235GEVM25s7Xg.png

檢查 Stage 以及 Production 網站,憑證已成功掛上去。

https://ithelp.ithome.com.tw/upload/images/20210926/20139235p6ifdLMPAh.png

總結

經過這幾天的教學,專案所需的 Kubernetes 元件都已建置完成,並且已推送至所有環境,明天開始將會以開發者的角度繼續建置專案。


上一篇
Day26 - 替 Kubernetes 服務掛上心愛的 Domain
下一篇
Day28 - 開發者的環境變數設置
系列文
DevOps 好想學!新手也能打造雲端 Study Lab30

尚未有邦友留言

立即登入留言