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 元件都已建置完成,并且已推送至所有环境,明天开始将会以开发者的角度继续建置专案。


<<:  TypeScript 能手养成之旅 Day 10 物件型别-扩充型别-列举(Enum)

>>:  Day18-内边距、外边距(CSS)

[DAY1]前言

前言 刚开始学习在docker架设环境,因此在练习制作image跟container的时候经常漏掉一...

用两支 API 实作新增资料与上传档案

实作新增资料与上传档案有两种做法 开一支 API 处理新增使用者,设定成 multipart/for...

Day 08 import 进阶

这篇主要是讲到有关 Python 中很重要的 import,因为如果後面在做大型专案时,常常需要 i...

Day15 - Ptt换页及新增文章列表项目

今天的内容算是当初一时没考虑到的东西。 主要是Ptt一页的文章最多列出20篇,若要搜寻到20篇以前的...

换了一个框架

今天学一下flask这个框架 因为django卡关所以不太想卡在那边 也没人可以问我就换框架看看 找...