使用自訂網域對映
網域映射提供 URL 路徑,讓您可以在專案中使用 Code Engine 應用程式或函式。 有了 Code Engine,每當您部署應用程式或建立函式時,預設會自動建立這些對應。 不過,您可以將自己的自訂網域對應到 Code Engine 應用程式或函式。 此選項可將自訂 URL 的要求路由至您的應用程式或函式。 您可以使用 Code Engine 主控台或 CLI。
如果您要將 Code Engine 應用程式或函數的目標設為您擁有的網域,則可以使用自訂網域對映。 在 Code Engine 中設定自訂網域名稱對應時,您可以定義完全合格網域名稱 (FQDN) 與專案中 Code Engine 應用程式或函式之間的一對一對應。
自訂網域對映只能指向一個 Code Engine 應用程式或函數。 不過,您可以配置多個網域對映至單一應用程式或功能。
若要在 Code Engine中使用自訂網域對映,請完成下列步驟。 請注意,部分步驟已在 Code Engine之外完成。
- 檢閱 在 Code Engine 中使用自訂網域對映之前的考量。
- 從網域登記員取得自訂網域 (在 Code Engine外部)。
- 在 Code Engine 中為您的 應用程式 或 功能 設定自訂網域對應 ( 從 Code Engine 主控台或 CLI )。
- 與您的網域名稱註冊商完成自訂網域名稱設定 ( Code Engine )。
與網域註冊商完成自訂網域設定,並在 Code Engine 中為應用程式或功能設定網域映射後,測試網域映射。
在 Code Engine中,您可以 檢視、更新 或 刪除 應用程式或函數的網域對映。
在 Code Engine 中使用自訂網域對映之前的考量
在 Code Engine中實作自訂網域對映之前,請注意下列考量:
- 對於使用 SSL/TLS 憑證保護的網域名稱,只能使用自訂網域名稱對應,該憑證由公開、可信賴的憑證授權機構 (CA) 簽署。
- 您可以定義指向公用網域名稱的自訂網域對映。
- 如果您的網域名稱只能透過非公開網域名稱系統 (DNS) 解析,請提供列出網域名稱並由公開、可信賴的 CA 簽署的憑證。
- 提供整個憑證鏈,從對應自訂網域的憑證開始,接著是所有中間憑證,直到根憑證。
- 您無法使用自簽憑證。
- 您無法使用未授信或非公用企業 CA 所簽署的憑證。
- 您的憑證必須已設定到期日。
取得自訂網域及其 TLS 憑證和私密金鑰
在 Code Engine中配置自訂網域對映之前,您必須先從網域登記員 (在 Code Engine 外部) 取得自訂網域。
- 從網域登記員中,取得您的自訂網域; 例如,
www.example.com
。 - 取得自訂網域的 SSL/TLS 憑證:
-
您可以使用 Let's Encrypt 服務和 Certbot 建立非自行認證的憑證。 如果自訂網域在您的控制範圍內,而且您想要快速建立證書,您可以使用 Certbot 和 Let's Encrypt 服務取得證書。
-
您可以從可信賴的授權機構取得已簽署的憑證。 這種類型的數位憑證是用來建立伺服器與用戶端之間的通訊隱私。 這些憑證包含用於在端點之間建立可信和安全連線的資訊。 您也必須取得與 TLS 憑證相符的私密金鑰。
您可以從 CA 取得您的憑證和金鑰。 為您的自訂網域取得已簽署的 SSL/TLS 憑證。 基於安全考量,Code Engine 只支援自訂網域對應,這些網域對應必須配置由公開、可信賴的 CA 簽署的 TLS/SSL 憑證。
您也可以從 Cloud Internet Services (CIS) 訂購來源憑證,如果您的自訂網域管理已委託給 CIS。 依照此方法,您就可以套用 端對端彈性 TLS 模式。
-
如何在我的自定义域中使用 Certbot 和 Let's Encrypt 服务?
在企業環境中,與您的公司網域管理者合作以取得必要的憑證。 但是,如果自訂網域在您的控制範圍內,而且您想要快速取得證書,那麼您可以使用 Certbot 和 Let's Encrypt 服務取得證書:
-
安裝 Certbot。 Certbot 是 自動憑證管理環境(ACME) 通訊協定的用戶端,用於自動化 CA 與伺服器之間的互動。 Let 's Encrypt 服務會使用此用戶端來驗證網域所有權並發出憑證。 從 Certbot 文檔中,選擇
Other
作為軟體,並選擇您工作站的作業系統,以獲得安裝 Certbot 命令列的適用資訊。 -
執行下列指令建立您的憑證。 此範例指令會建立
example.com
及www.example.com
自訂網域的憑證。 請務必更新您自己的自訂網域的指令。certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
-
若要驗證您是否擁有網域,請使用 Certbot 工具輸出隨附的值 (例如
_acme_challenge.example.com
及_acme_challenge.ww.example.com
),為您在前一個步驟中所要求的網域設定網域登記員的TXT
記錄。 設定TXT
記錄之後,請繼續使用 Certbot 指令。 -
Certbot 會擷取 Let 's Encrypt 所簽署的憑證。 儲存憑證的位置由 Certbot 輸出提供。 尋找
fullchain.pem
和privkey.pem
檔案。
在 Ubuntu 系統上執行 Certbot 的指令範例
sudo certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
example.com
和 www.example.com
的憑證申請輸出範例
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.example.com.
with the following value:
<MASKED>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.www.example.com
with the following value:
<MASKED>
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)
Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.www.example.com.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2023-02-01.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
您的憑證已備妥。
我如何在自訂網域中使用從 CIS 取得的來源憑證?
如果您從公開且可信賴的 CA 取得憑證和金鑰,那麼它們就已經受簽並安全了。 您與 CA 合作,取得自訂網域的 SSL/TLS 簽署憑證。
您也可以使用 Cloud Internet Services (CIS) 訂購來源憑證,然後設定 CIS,依照此流程將使用者 IP 位址轉送至您的應用程式或功能:
-
訂購您的原產地證書:
- 在 IBM Cloud 主控台中,移至 資源清單,篩選出您的
Internet Services
範例。 從搜尋結果中,按一下目標實例的名稱,即可看到其詳細頁面。 - 在 CIS 實例詳細資訊頁面上,移至 Origin 頁面 (Security>Origin ),然後按一下 Order。
- 在「訂購原產地證書」窗格中,保留所有預設值,並輸入您要使用的網域名稱。 例如,
myapp.example.com
。 按一下訂單以確認。 - 複製 Origin 憑證和私密金鑰值。 您在映射網域時需要此資訊。
- 在 IBM Cloud 主控台中,移至 資源清單,篩選出您的
-
設定並套用 端對端彈性 TLS 模式。
邊緣證書由 CIS 提供。 來源憑證只用於加密 CIS 與 Code Engine 應用程式或功能之間的流量。
在 CIS 中成功建立 DNS 記錄後,您設定 CIS 將使用者 IP 位址轉送至您的應用程式或功能。
在 Code Engine 中配置自訂網域對映
您現在已經熟悉使用自訂網域對應的概念,並從網域註冊商取得自訂網域。 您已準備好設定 Code Engine 應用程式或函式,以使用自訂網域映射。 請參閱:
檢視網域對映
從主控台檢視網域對映
您可以從主控台檢視應用程式或功能的所有自動產生及自訂網域對映的清單。 依預設,表格的內容以自訂網域對映為範圍。 使用 類型 過濾器來修改視圖。
此視圖顯示與對映相關聯之憑證有效期限的相關資訊。 當憑證到期時,無法再使用網域對映來呼叫到應用程式或函數,且此狀況會產生 SSL 錯誤。 如果您具有即將到期的憑證,請 更新自訂網域對映 以使用更新的憑證。
此視圖也會顯示與網域對映相關聯的特定應用程式或功能的相關資訊,以及網域對映的類型。 對於 Code Engine 產生的映射,類型可以是 System-public
, System-private
,或 System-internal
。 對於您建立的自訂網域對映,類型為 Custom
。
- 在專案處於 作用中 狀態之後,請在 Code Engine 專案頁面上按一下專案名稱。
- 從總覽頁面,按一下網域映射。
- 從網域對應頁面,檢視您現有應用程式或功能的已定義網域對應清單。
Type
指出是否自動產生對映,或是否為自訂網域對映。
使用 CLI 檢視網域對映
若要使用 CLI 來檢視應用程式或函數的所有自訂網域對映清單,請使用 ibmcloud ce domainmapping list
指令。 例如,
ibmcloud ce domainmapping list
輸出範例
Listing domain mappings...
OK
Name CNAME Target Target-Type Status Secret Name Age
www.example.com custom.abcdabcdabc.us-south.codeengine.appdomain.cloud myapp app ready mytlssecret 36m
若要檢視應用程式或函數的所有網域對映的清單 (包括您建立的自訂網域對映,以及 Code Engine 建立的自動產生網域對映),請在 ibmcloud ce domainmapping list
指令中指定 --all
選項。 自訂網域對映會顯示
CNAME
的值。
更新網域對映
當您建立自訂網域對映時,TLS 密鑰會一直有效,直到憑證到期為止。 從網域對映頁面中,您可以檢視憑證到期之前剩餘天數的相關資訊。
請務必知道與自訂網域搭配使用的憑證是否列出多個網域名稱,或是否使用萬用字元憑證。 當您的憑證接近到期(或已過期)時,請使用更新的憑證編輯網域對應的現有 TLS 秘密。 請勿使用更新的憑證為您的網域對應建立不同的 TLS 秘 密。
從主控台更新網域對映
假設 www.example.com
的自訂網域對映具有即將到期的憑證。 您可以從主控台更新網域對映,以使用已更新的憑證,甚至取代對映的 TLS 密鑰。 您也可以更新網域對映,以指向專案中的不同應用程式或功能。
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 網域對映。
- 從「網域對映」頁面中,按一下 動作 圖示
> 編輯,以編輯對映。 或者,您可以按一下已定義自訂網域的列,以更新對映。
- 從「更新網域映射」窗格,您可以變更與此網域映射相關聯的應用程式或功能。 或者,您可以替換或更新此對應的 TLS 秘密。
- 按一下更新,以儲存變更。
更新映射後,您可以檢視網域映射清單中最新的變更。
使用 CLI 更新網域對映
若要更新自訂網域對映,請使用 ibmcloud ce domainmapping update
指令。
假設 www.example.com
的自訂網域對映具有即將到期的憑證。 您可以更新網域對映以使用更新的憑證,甚至以 --tls-secret
選項取代對映的 TLS 密鑰。 您也可以使用 --target
選項更新網域對應,以指向專案中不同的應用程式或功能。
以下範例更新 www.example.com
自訂網域名稱對應,以使用更新的 TLS 秘密 mytlssecret
。
-
使用更新的憑證和私密金鑰資訊更新 TLS 秘密
mytlssecret
,這些資訊包含在您本機工作站上的mycertchain2.txt
和myprivatekey2
檔案中。ibmcloud ce secret update --name mytlssecret --cert-chain-file mycertchain2.txt --private-key-file myprivatekey2.txt
輸出範例
Updating secret mytlssecret.. OK
-
更新網域對映以使用更新的 TLS 密鑰。
ibmcloud ce domainmapping update --domain-name www.example.com --tls-secret mytlssecret2
輸出範例
Getting domain mapping 'www.example.com.org'... Updating domain mapping 'www.example.com.org'...
刪除網域對映
當您刪除網域對映時,會移除 Code Engine 應用程式或函數與 Code Engine內自訂網域對映的關聯。 此動作不會刪除相關聯的應用程式、函數或 TLS 密鑰。
刪除網域映射中引用的應用程式或函式,也會刪除與應用程式或函式相關的任何自訂網域映射。
當您刪除自訂網域映射,而網域 DNS 設定仍然保留時,您的流量仍會路由到 Code Engine 專案。 例如,仍可設定 CNAME 指向 Code Engine 專案。 不過,會以 404 (找不到) 錯誤訊息來回答要求。 請確定網域登記員已在 DNS 設定中更新完整網域名稱的相關聯 CNAME 記錄。
從主控台刪除網域對映
從主控台中,您只能刪除 Custom
類型的網域對映。 Code Engine 自動產生的網域映射無法刪除。
若要從主控台刪除自訂網域對映,請執行下列動作:
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 網域對映,以檢視已定義網域對映的清單。
- (選用) 按一下 類型,依類型來過濾網域對映。
- 從「網域對映」頁面中,刪除您要從應用程式或函數中移除的自訂網域對映。 按一下 動作 圖示
> 刪除,以刪除對映。
使用 CLI 刪除網域對映
若要使用 CLI 刪除自訂網域對映,請使用 ibmcloud ce domainmapping delete
指令。
您只能刪除自訂的網域映射;您不能刪除 Code Engine 生成的網域映射。 執行 ibmcloud ce domainmapping list
指令,以使用 CLI 顯示自訂網域對映的清單。 自訂網域對映具有產生的 CNAME
記錄。 在
CLI 中,您可以使用 ibmcloud ce domainmapping get
指令,針對指定的自訂網域對映取得產生的 CNAME
值。
ibmcloud ce domainmapping delete --domain-name www.example.com -f
輸出範例
Deleting domain mapping 'www.example.com'...
OK
下一步
取得自訂網域名稱對應的 CNAME 記錄
Code Engine 為您定義的自訂網域對映提供 CNAME 目標。
若要從 Code Engine 主控台取得 CNAME 記錄,請開啟已定義的自訂網域對映,並檢視「更新網域對映」頁面。 以下列其中一種方式開啟「更新網域對映」頁面:
- 從「網域對映」表格中,按一下已定義自訂網域的列。
- 按一下 動作 圖示
> 編輯,以編輯對映。
從 更新網域對映 頁面中,您可以取得 CNAME target
值。 例如,www.example.com
對映具有 custom.abcdabcdabc.us-east.codeengine.appdomain.cloud
CNAME 值,其中 abcdabcdabc
是自動產生的唯一 ID,us-east
是專案的區域。
若要使用 CLI 取得 CNAME 記錄,請使用 ibmcloud ce domainmapping get
指令。 例如:
ibmcloud ce domainmapping get --domain-name www.example.com
輸出範例
Getting domain mapping 'www.example.com'...
OK
Domain Name: www.example.com
CNAME: custom.abcdabcdabc.us-south.codeengine.appdomain.cloud
Target Name: myapp
Target Type: app
TLS Secret: mytlssecret
Status: ready
具有 CNAME 目標之後,您已準備好將 CNAME 記錄項目新增至自訂網域的 DNS 設定。 請注意,使用網域登記員來發佈 CNAME 記錄可能需要一些時間來移入網際網路中的 DNS 變更。
在 CIS 中加入 DNS 記錄,將流量導向您的 Code Engine 應用程式
如果您有 CIS 範例來管理自訂網域名稱,請更新 DNS 記錄以指向您的 Code Engine 專案,如下所示。 請注意,對於非 CIS 網域註冊商,步驟有所不同,但目標相同:建立 CNAME 類型的 DNS 記錄,指向 Code Engine 專案 CNAME 端點:
-
在 CIS 範例詳細資訊頁面,移至可靠度 >DNS。 捲動至 DNS 記錄,然後按一下新增。
-
在「新增記錄」窗格中:
- 選擇 CNAME 作為類型。
- 設定您的子網域;例如
myapp
. - 提供您先前複製的 CNAME 目標值,作為別名網域名稱。
- 驗證 DNS 記錄的詳細資料輸出是否顯示您的網域映射是別名。 例如,尋找類似:
myapp.example.com is an alias of custom.<id>.<region>.codeeng.appdomain.cloud
. 按一下「新增」確認新增 DNS 記錄。
如果您需要註冊多個網域和子網域,例如
example.com
和www.example.com
,則必須為每個子網域重複步驟。 您可以考慮建立涵蓋多個網域的單一憑證。 但是,您只能在一個區域內使用該單一憑證一次。 如果您打算在單一區域的多個專案中使用自訂網域,請將它們分開。
現在您已熟悉使用自訂網域對應,並取得自訂網域及其 TLS 憑證和私密金鑰。 您已準備好在 Code Engine 中為您的 應用程式 或 功能 設定自訂網域映射。