Google雲端部署 k8s https 服務

延續 k8s 部署系統到 Google 雲端的文章,此篇強化 Web 系統,讓其使用 TLS 加密連線,並為系統申請一個網域。

台灣交通大學有提供免費網域服務,但是之後要為我們的系統網域申請憑證時,會發現網域已達到我們要請求的憑證授權商所能提供的憑證上限。

因此我們到 Freenom 新增一個我們的免費網域,可使用12個月:

申請完之後,打開 Terminal 下載 certbot:

brew install certbot

輸入以下指令產生簽章與RSA Key

certbot -d YOUR_DOMAIN_NAME --manual --logs-dir certbot --config-dir certbot --work-dir certbot --preferred-challenges dns certonly

一直回答到這如下畫面出現,先停在這畫面,要去新增 DNS TXT Record:

-----------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.YOUR_DOMAIN_NAME with the following value:
L4fR0TaGC0YdA6dZjgKX07vbREMG15L1l-_rC5TbcfE
Before continuing, verify the record is deployed.
-----------------------------------------------------------------

回到Freenom,點選 Services -> My Domain -> 點選剛新增的網域那一列的Manage Domain -> Manage Freenom DNS ,然後新增一筆Domaind TXT Record:

另開一個 Terminal 輸入以下指令檢查是否已經生效:

dig +trace _acme-challenge.YOUR_DOMAIN TXT

生效後,回到原本運行certbot的 Terminal,按Enter:

如此就產生簽章跟RSA KEY了。

切到簽章跟RSA KEY 所在的目錄下面:

cd certbot/live/YOUR_DOMAIN_NAME

產生 k8s Secret 包進簽章跟RSA KEY:

kubectl create secret tls tls-certs --cert fullchain.pem --key privkey.pem

修改 ingress.yml,讓他知道我們要使用 Https 連線,並提供他剛剛包好的Secret ,並且關閉一般 http 連線:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: fanout-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: ingress-ip
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- hosts:
- YOUR_DOMAIN_NAME
secretName: tls-certs
rules:
- host: YOUR_DOMAIN_NAME
http:
paths:
- path: /*
backend:
serviceName: web-service
servicePort: 8080

啟動 ingress

kubectl apply -f ingress.yml

打開瀏覽器輸入 https://YOUR_DOMAIN_NAME

成功~~


有了設定好的 https 連線網址後,就可以使用 Line Bot API 提供更多服務了。