在 Day26 我們建立了 Ingress,使服務能透過 Domain Name 連線,但因為少了 SSL 憑證,只能使用 HTTP 連線,若要提供 HTTPS 加密連線,就需建立憑證提供 Kubernetes 使用。
建立 SSL 憑證有很多方式,可以使用 CertBot
、Acme.sh
等工具自我簽發,Kubernetes 也有提供 cert-manager
憑證管理工具,而今天要介紹的是 Google 管理的 SSL 憑證,可以在 Ingress 上快速的建立、更新、管理 Certificates。
本篇參考 Using Google-managed SSL certificates ,我們會在 Helm Chart 建立相關 yaml 檔案,讓服務可以透過 HTTPS 連線。
進入 Cloud Shell 網站
點擊倒三角形->點選專案的 PROJECT_ID
,開啟專案 Terminal
certificate.yaml
以及 frontendConfig.yaml
檔案cd ~/webapp && touch templates/certificate.yaml templates/frontendConfig.yaml
Explorer -> Open Folder -> 選擇 webapp 資料夾 -> Open
建立 ManagedCertificate
元件,需要指定 Domain 名稱,這裡會從 Values 檔案的參數引入。
certificate.yaml
貼上以下內容apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
name: {{ .Release.Name }}
spec:
domains:
- {{ .Values.ingress.domain }}
當使用者透過 HTTP 連線時,會強制轉向到 HTTPS 連線已保證安全性,在 GCE Ingress 需要建立 FrontendConfig
元件啟用 redirectToHttps
功能。
frontendConfig.yaml
貼上以下內容apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
name: {{ .Release.Name }}
spec:
redirectToHttps:
enabled: true
responseCodeName: PERMANENT_REDIRECT
接著需要在 Ingress 上對 ManagedCertificate
與 FrontendConfig
元件建立關聯。
ingress.yaml
的 annotations
增加以下內容 networking.gke.io/managed-certificates: {{ .Release.Name }}
networking.gke.io/v1beta1.FrontendConfig: {{ .Release.Name }}
相關 yaml 檔案都設定完成,就可以更新 Dev 環境,測試看看有無問題。
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>
指令查看。
managedCertificate
kubectl get managedCertificate
(輸出結果)
NAME AGE STATUS
webapp-dev 13m Active
當 STATUS 顯示 Active 憑證就建立完成了,可以輸入網址測試看看。
<your dev domain name>
憑證成功掛上去,並且強制用 HTTPS 連線。
在這幾天的教學中,我們在 Helm Chart 建立了 Database 、 Ingress 、 Certificate 等元件,並且在 Dev 環境都已經完成測試,接著就可以將更新上傳到 Manifests 的 Git Repo ,透過 ArgoCD 就會自動將 Helm Chart 同步到 Stage 以及 Production 環境。
cd ~/webapp
git add .
git commit -m "update helm chart"
因為之前 GitLabCI 有更新 values 檔案,需要先 pull 下來合併一下。
git pull origin master
values 檔案有可能會發生 Conflict ,可以在編輯器點擊 Accept Current Change 來處理衝突。
處理完 Conflict 就可以 Push 到 GitLab 上面。
git push origin master
在 ArgoCD 查看,等待一段時間就會同步完成。
檢查 Stage 以及 Production 網站,憑證已成功掛上去。
經過這幾天的教學,專案所需的 Kubernetes 元件都已建置完成,並且已推送至所有環境,明天開始將會以開發者的角度繼續建置專案。