上次測式 Cloud Run 和 DNS 名稱解析還蠻順利的,
結果想要用自己的 SSL 憑證,一直測試失敗,
最後才赫然發現,Cloud Run 根本能不用自己的憑證啊啊!
說明文件在這裡:

看來必須使用 Load Balancer 了,
這裡做一個簡單的 Apache 和 PHP 網頁
vim index.php
<?php
echo "Hello World from web1 Dongdong";
?>

vim Dockerfile
# Use the official PHP image
FROM php:7.4-apache
# Copy the PHP file to the Apache document root
COPY index.php /var/www/html/
# Change the default Apache port to 8080
RUN sed -i 's/80/8080/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf
# Expose port 8080
EXPOSE 8080
# Set the ServerName to suppress warnings
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf

資料夾內只要這兩個檔案:
ls -l

先在 Arfitact Registry 建立 php 這個 Repository
建立 Docker Image
docker build -t asia-east1-docker.pkg.dev/dong-dong-gcp-3/php/web001 .

測試一下,用 8080 Port 看一下:

成功看到網頁了!

快速用 gcloud 部署,指令如下:
gcloud run deploy web001 \
--image asia-east1-docker.pkg.dev/dong-dong-gcp-3/php/web001 \
--platform managed \
--region asia-east1 \
--port 8080 \
--allow-unauthenticated \

看一下 Cloud Run 主頁:

點擊 web001

再點 URL,看到網頁了。

接下來去保留一個固定 IP,準備給 Load Balancer 用

取一下名字,我們用 Global IP

取得 IP 了。

去建立 Load Balancer

選擇 Application Load Balancer

公開的 Load Balancer (Public Facing)

選 Best for global

選 Global External ALB

再按 Create

先取個名字 lb-1, 也給 Frontend 取名字 fe-1, 然後 Protocol 選 HTTPS

IP 可以選擇剛剛建立的 IP

然後在憑證的部份,選擇 Create a new Certificate

取個名字 cert-web001,然後上傳自己做好的憑證檔案。
這兩個憑證檔案是使用 Letsencrypt 去申請的:
Certificate 使用 ssl_fullchain001.pem 這個檔案
Private Key 使用 ssl_privkey001.pem 這個檔案。
上傳格式如果正確,會看到 GCP 有針對到憑證的資訊,
沒問題就可以按 Create

你會看到憑證建立成功

它還可以讓你把 HTTP 轉到 HTTPS,勾選後按下 Done

接下來點擊後端,建立一個 Backend Service

取名字 bk-1, 重要的是 Backend type 要選 Serverless Network Endpoint Group:

然後在 New backend 選擇那個 Cloud Run

為 Serverless NEG 取名字

其他地方就保持預設,按下 Create

再按下 ok

Routing Rules 看一下,因為前端進來只到一個後端,
所以不用再設定。

再看一下 Review and finalize 檢查設定

如果都沒問題就按下 Create。
但是還沒完喔,我們要去設定 DNS
DNS 不一定在 GCP 上喔,這裡指的是你註冊 DNS (購買網域) 的地方,
你可能用的是 Hinet 的 DNS,或是國外的 GoDaddy 或 Namecheap 等等。
像我是在 GoDaddy 註冊 DNS 的,但是我已經轉移管理權限到 Cloud DNS 了。
我就點進我的網域:

然後再點 Add Standard

然後輸入要解析的子網域 web001,
使用 A Record,然後輸入 Load Balancer 使用的 IP,
再按下 Create。

完成後去 Google Admin Toolbox,
確認 Google 的解析結果有沒有設定正確,
看起來會像這樣:

那接下來就等待 Load Balancer 生效並且解析成功。
同時我們也看一下 Load balancer 頁面有兩個
上面那個是幫你把 HTTP 轉到 HTTPS 的

我們點下面 lb-1 進去看,
看到有 SSL 憑證,再點進去

會看到憑證是有效的,還有它的到期日。

最後我們在瀏覽器輸入網址 https://web001.dongdonggcp.com/

我們也開無痕模式,輸入 http://web001.dongdonggcp.com
也看到 http 成功轉 https 了

整個步驟機關很多,如果你做完發現一直都看不到網頁,
你可以從 Load Balancer 一層一層點擊到 Cloud Run,
如果秀不出 Cloud Run 的頁面,表示你可能有接錯服務。

在各個環境多檢查一下,
多點耐心就能設定成功喔!
官方文件可參考這裡。