GCP VM 設定 https 及 SSL

Compute Engine 及 Load Balancer 建立 Https 服務

Chris Lee
工程隨寫筆記
7 min readMay 5, 2022

--

Secure Sockets Layer 簡稱 SSL,是一種通訊安全協定,簡單來說就是讓你網址前面有 https 的東西,讓你在傳輸敏感資料上更為安全。坊間有許多免費的 SSL 憑證可以申請,但基於風控概念,如果想讓網站正式一點,通常會選擇付費憑證。

其中最簡約的方法,就是找到雲端商,使用他們的代管服務。

202406 因GCP畫面修改太多,更新最新內容及畫面

前置作業 - 網域

要綁定 VM 跟 SSL 出口,通常會使用 Load Balancer 負載平衡器的方式,因此會需要有個網域來操作,常見的 Godaddy 或是 Namecheap 都是不錯的選擇,本次以 Godaddy 作為示範。

前置作業 - 對外服務

通常對外的後端會是網頁,這邊使用 Docker Container 的方式在 VM 建立一個 port 為 8888 的網站,Docker 安裝及使用可以參考下面。

VM 在設定時記得允許流量及負載平衡器檢查健康狀態。

如果想跟著手把手做,可以用下面的docker-compose來跟著建立一個簡易的網站,資料目錄如下:

.
├── docker-compose.yaml
└── html
└── index.html
version: '3'
services:
web:
image: httpd:alpine
ports:
- "8888:80"
volumes:
- ./html:/usr/local/apache2/htdocs/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo Website</title>
</head>
<body>
<h1>Welcome to the Demo Website</h1>
<p>這是用來示範GCP的Load Balancer 負載平衡器網頁</p>
</body>
</html>

然後執行 docker-compose up -d就可以建立服務了。

IP 記得改成自己的對外 IP 才會顯示唷,然後也記得開 8888 防火牆。

建立網路端點群組

重要的起手式,先將 VM 的服務 加入一個執行個體群組,選單在 compute engine>網路端點群組>建立網路端點群組。

群組類型選擇 NEG 全域,下面的通訊埠就是你 VM 服務的 port,因此是8888,新的網路端點 IP 則是你 VM 對外的 IP。

加入後點進群組應該可以看到你的 VM 在成員清單中。

建立好放著即可,這就會是我們負載平衡的後端

負載平衡器

本次重點功能 GCP 的 Load Balancing 負載平衡器,它的功能很多,顧名思義可以進行流量控制,但我們要使用比較基礎的功能,就是幫我們建立連線入口跟SSL憑證即可。

從左邊選單找網路服務>負載平衡>建立負載平衡器:

GCP 改版更新的頻率很高,現在(202406)的畫面如下,選擇可以參考:

  • 負載平衡器類型 -> 應用程式負載平衡器 (HTTP/HTTPS)
  • 公開或內部 -> 公開 (外部)
  • 全域或單一區域部署 -> 最適合全域工作負載
  • 負載平衡器代別 -> 全域外部應用程式負載平衡器

前端設定

接下來進到前後端的設定,通訊協定選https,IP位置建立一個新的固定IP,不要使用臨時的。

憑證我們建立一個新的 google 代管憑證,首先到你的網域商畫面,將你的網域名稱填到憑證內的,例如我在 Godaddy 的網域是 chrislee.site:

我上面多填一個 test.chrislee.site 是因為我想讓 VM 的網頁對應到這個子網域,如果你有多個子網域,就要在這邊也加進去。

後端設定

後端設定要建立新的後端服務,基本上就是指定到你的 VM 群組。如果你的VM 有多個port對應多個服務,例如有 3 個網站對應 8888、8889、9000 不同 port,你就要建立 3 個網路端點群組,並且在這邊對應過去。

轉送規則

最後一個轉送規則,顧名思義就是把前端設定跟後端設定綁定,例如我要靶子網域 test.chrislee.site 對應到我的 VM 8888 port 後端,設定如下,中間路徑都寫/即可。

都完成後就能送出了,基本上要跑個幾分鐘:

網域DNS設定

離開 GCP 到網域商的網站,因為我們要跟子網域作連動,要去 DNS 增加:

  1. 設定紀錄A,名稱@,值為負載平衡器的IP位置,如34.111.231.90
  2. 設定紀錄CNAME,名稱為子網域前贅test,值為網域名稱chrislee.site
IP可以在負載平衡器的前端查

通常生效要一段時間,幾分鐘到幾小時不等,你可以去What’s My DNS網站打上你的網域看IP是否修正。

等了約莫10分鐘後,我們的網頁已經完成囉:

憑證看起來也很正常,因為我們服務是使用 docker container 技術做的,所以未來的可以對接各種網站框架。

最後可以用 SSL 測試網站 來檢查憑證,就可以看到完整的檢查紀錄囉,如果覺得 TLS1.0 的憑證不夠,都是能去 GCP 改其他等級的。

許多資料科學家或工程師在使用 GCP 進行 POC 實驗,SSL 憑證是令人頭痛的問題,建議透過 GCP 代管可以省下很多時間,讓心思放在 Application 開發上吧。

--

--

Chris Lee
工程隨寫筆記

隱身在金融業的資料科學家,部分文章會在個人部落格唷 https://chrisnote.com/