對應自訂網域

設定自訂網域,用於存取 Knative 服務。您可以將一或多個自訂網域對應至個別服務,也可以將單一網域對應至叢集,供所有服務使用。自訂網域對應可以是基本網域 (例如 your-domain.com),也可以是子網域 (例如 your-subdomain.your-domain.com)。

根據預設,您部署至 Knative serving 叢集的服務會設為 nip.io 基本網域。這樣一來,您就能立即在下列網址測試服務:

http://{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io

進一步瞭解測試網域

事前準備

對應自訂網域

您可以使用 Google Cloud 主控台或指令列工具對應自訂網域。

一般來說,設定自訂網域的步驟如下:

  1. 選用:保留負載平衡器的 IP 位址。
  2. 在 Knative serving 中,將服務或叢集對應至自訂網域。
  3. 在網域註冊商中更新 DNS 記錄。

保留負載平衡器 IP 位址

安裝 Knative Serving 時,Istio Ingress 控制器會建立具有可用 IP 位址的負載平衡器。

視 GKE 叢集而定,您可能需要為 Istio Ingress 控制器保留負載平衡器的 IP 位址:

外部 Google Cloud
請參閱執行 GKE 叢集環境的說明文件,瞭解 IP 位址的管理方式,以及負載平衡器的 IP 位址是否為靜態。另請參閱GKE 叢集的設定頁面。舉例來說,視您為 Google Distributed Cloud 設定負載平衡的方式而定,您可能已保留這些 IP 位址。
在 Google Cloud

您必須保留負載平衡器的外部 IP 位址,確保在刪除 Ingress 服務後,該位址仍維持不變。 視叢集設定而定,IP 位址可能僅供內部使用,例如私人叢集,也可能對外開放。

內部負載平衡器 (開啟) Google Cloud
如要瞭解如何保留內部負載平衡器的 IP 位址,請參閱下列頁面: 保留靜態內部 IP 位址
外部負載平衡器 (開啟) Google Cloud
如要保留外部負載平衡器的 IP 位址,請按照下列步驟操作:
  1. 取得負載平衡器的 IP 位址:

    控制台

    如要透過 Google Cloud 控制台取得負載平衡器的外部 IP 位址,請按照下列步驟操作:
    1. 前往 Google Cloud 控制台的 GKE 頁面:
      前往 GKE
    2. 按一下「服務和 Ingress」
    3. 找出叢集 Istio Ingress 的服務。服務的「類型」會是「外部負載平衡器」,「名稱」會是 istio-ingressgateway
    4. 找到叢集的 Istio Ingress 服務後,請複製其「端點」。這是指不含通訊埠號碼的 IP 位址。舉例來說,您可能會看到 00.000.000.000:11 列為端點,但您只需要複製 00.000.000.000

    kubectl

    如要取得負載平衡器的外部 IP,請執行下列指令:

    kubectl get svc istio-ingressgateway -n ASM-INGRESS-NAMESPACE

    ASM-INGRESS-NAMESPACE 替換為 Cloud Service Mesh Ingress 所在的命名空間。如果您使用預設設定安裝 Cloud Service Mesh,請指定 istio-system

    輸出結果類似如下:

    NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP  PORT(S)
    istio-ingressgateway   LoadBalancer   XX.XX.XXX.XX   pending      80:32380/TCP,443:32390/TCP,32400:32400/TCP

    其中,EXTERNAL-IP 值是負載平衡器的外部 IP 位址。

  2. 將 IP 位址保留為靜態 IP:

    gcloud compute addresses create ADDRESS-NAME --addresses EXTERNAL-IP --region REGION

    取代:

    • ADDRESS-NAME 改成您要為靜態 IP 取的名稱。
    • EXTERNAL-IP 替換為您在上一個步驟中取得的負載平衡器外部 IP 位址。
    • REGION 替換為叢集所在的區域

取得負載平衡器的 IP 位址後,即可用來對應自訂網域:

地圖服務

請選擇下列其中一種方法,將自訂網域對應至 Knative serving 服務。每項服務可對應至多個網域。

控制台

  1. 在 Google Cloud 控制台中開啟網域對應頁面:

    前往「網域對應」頁面

    請注意,當顯示視窗太小時,畫面未顯示「Mapping Custom Domains」(對應自訂網域) 按鈕時,您必須按一下頁面右下角的三點垂直刪節號圖示。

  2. 按一下「新增對應」,然後選取「新增服務網域對應」,將網域對應至個別服務。您可以將多個網域對應至各項服務。

  3. 從「Add Mapping」(新增對應) 表單的下拉式清單中,選取要對應自訂網域的服務:

  4. 輸入網域名稱,例如 your-domain.comsubdomain.your-domain.com。網域規定:

    • 系統不支援基本路徑對應。基本路徑是指網域名稱後方的網址路徑名稱。舉例來說,usersyour-domain.com/users 的基本路徑。Knative serving 只允許您將網域對應至 /,而非特定基本路徑。因此,任何路徑轉送都必須在服務的容器中使用路由器處理,或是使用 Firebase Hosting
    • 您無法將網域對應至與服務網址相符的子網域。服務的網址定義為 http://{service}.{namespace}.{your-domain.com},因此如果服務位於 test.default.your-domain.com,您就不得建立對應至相同子網域 test.default.your-domain.com 的網域對應。

  5. 按一下「繼續」

  6. 前往網域註冊商網站,使用最後一步顯示的 DNS 記錄更新您的 DNS 記錄。您隨時都可以顯示記錄,只要在網域對應 [...] 動作選單中按一下「DNS 記錄」即可。

  7. 按一下 [完成]

gcloud

  1. 將您的服務對應至自訂網域:

    gcloud run domain-mappings create --service SERVICE --domain DOMAIN

    取代:

    • SERVICE 改為您的服務名稱。
    • DOMAIN 改為您的自訂網域。例如 your-domain.comsubdomain.your-domain.com。網域規定:
      • 系統不支援基本路徑對應。基本路徑是指網域名稱後方的網址路徑名稱。舉例來說,usersyour-domain.com/users 的基本路徑。Knative serving 只允許您將網域對應至 /,而非特定基本路徑。因此,任何路徑轉送都必須在服務的容器中使用路由器處理,或是使用 Firebase Hosting
      • 您無法將網域對應至與服務網址相符的子網域。服務的網址定義為 http://{service}.{namespace}.{your-domain.com},因此如果服務位於 test.default.your-domain.com,您就不得建立對應至相同子網域 test.default.your-domain.com 的網域對應。

自訂網域現在已對應至 Knative 服務,您必須在網域註冊商處新增 DNS 記錄

對應叢集

選擇下列其中一種方法,將自訂網域對應至叢集:

控制台

  1. 在 Google Cloud 控制台中開啟網域對應頁面:

    前往「網域對應」頁面

    請注意,當顯示視窗太小時,畫面未顯示「Mapping Custom Domains」(對應自訂網域) 按鈕時,您必須按一下頁面右下角的三點垂直刪節號圖示。

  2. 按一下「新增對應」,然後選取「新增預設網域」,將網域對應至叢集中的所有服務。根據預設,您部署的新服務會使用對應的網域。

  3. 按一下核取方塊,將新的網域對應關係套用至叢集中的所有現有服務。

  4. 從「Add Mapping」(新增對應) 表單的下拉式清單中,選取要對應自訂網域的叢集:

  5. 輸入網域名稱,例如 your-domain.comsubdomain.your-domain.com。網域規定:

    • 系統不支援基本路徑對應。基本路徑是指網域名稱後方的網址路徑名稱。舉例來說,usersyour-domain.com/users 的基本路徑。Knative serving 只允許您將網域對應至 /,而非特定基本路徑。因此,任何路徑轉送都必須在服務的容器中使用路由器處理,或是使用 Firebase Hosting
    • 您無法將網域對應至與服務網址相符的子網域。服務的網址定義為 http://{service}.{namespace}.{your-domain.com},因此如果服務位於 test.default.your-domain.com,您就不得建立對應至相同子網域 test.default.your-domain.com 的網域對應。

  6. 按一下「繼續」

  7. 前往網域註冊商網站,使用最後一步顯示的 DNS 記錄更新您的 DNS 記錄。您隨時都可以顯示記錄,只要在網域對應 [...] 動作選單中按一下「DNS 記錄」即可。

  8. 按一下 [完成]

kubectl

  1. 執行下列指令,從 config-domain ConfigMap 移除現有基礎網域,並換成自訂網域:

    kubectl patch configmap config-domain --namespace knative-serving --patch \
    '{"data": {"nip.io": null, "DOMAIN": ""}}'

    DOMAIN 替換成您的自訂網域。例如 your-domain.comsubdomain.your-domain.com。網域規定:

    • 系統不支援基本路徑對應。基本路徑是指網域名稱後方的網址路徑名稱。舉例來說,usersyour-domain.com/users 的基本路徑。Knative serving 只允許您將網域對應至 /,而非特定基本路徑。因此,任何路徑轉送都必須在服務的容器中使用路由器處理,或是使用 Firebase Hosting
    • 您無法將網域對應至與服務網址相符的子網域。服務的網址定義為 http://{service}.{namespace}.{your-domain.com},因此如果服務位於 test.default.your-domain.com,您就不得建立對應至相同子網域 test.default.your-domain.com 的網域對應。

自訂網域現在已對應至 Knative 服務,您必須在網域註冊商處新增 DNS 記錄

將 DNS 記錄新增到網域註冊商的系統中

將服務對應至 Knative Serving 中的自訂網域之後,接著必須更新您放在網域註冊商的 DNS 記錄。為方便作業,Knative serving 會產生並顯示您需要輸入的 DNS 記錄。您必須將這些指向 Knative serving 服務的記錄新增到網域註冊商那裡,以使對應生效。

如果您使用 Cloud DNS 做為 DNS 供應商,請參閱「新增記錄」。

  1. 使用以下方式,擷取網域對應的 DNS 記錄資訊:

    控制台

    1. 前往 Knative serving 網域對應頁面:

      前往「網域對應」頁面

    2. 按一下服務右側三點垂直刪節號圖示,然後按一下 [DNS RECORDS] (DNS 記錄) 顯示所有的 DNS 記錄:

    gcloud

    gcloud run domain-mappings describe --domain DOMAIN

    DOMAIN 替換成您的自訂網域。例如 your-domain.comsubdomain.your-domain.com

    您需要顯示在 resourceRecords 標題底下的所有記錄。

  2. 在網域註冊商服務中登入您的帳戶,然後開啟 DNS 設定頁面。

  3. 前往您網域的設定頁面並找出「主機記錄」部分,然後新增您將網域對應到 Knative serving 服務時取得的每一筆資源記錄。

  4. 將上述 DNS 記錄全部新增至您在 DNS 供應商的帳戶時:

    • 選取上一步傳回的 DNS 記錄類型:AAAAACNAME
    • 使用名稱 www 對應至 www.your-domain.com
    • 使用名稱 @ 對應 your-domain.com
    • 使用萬用字元 * 對應至 *.your-domain.com
  5. 儲存您在網域帳戶 DNS 設定頁面上所做的變更。 通常這些變更只要幾分鐘就能生效,不過在某些情況下可能要耗費數小時,時間長短取決於註冊商,以及網域中任何之前 DNS 記錄的存留時間 (TTL)。你可以使用 dig 工具 (例如這個線上dig版本),確認 DNS 記錄已成功更新。

  6. 前往服務的新網址 (例如 https://www.your-domain.com),測試是否成功。請注意,核發代管 SSL/TLS 憑證可能需要幾分鐘的時間。

將已驗證的網域擁有者新增至其他使用者或服務帳戶

當使用者驗證網域時,系統只會對這個使用者帳戶驗證該網域。也就是說,只有這位使用者可以新增更多使用該網域的網域對應。因此,如要讓其他使用者能新增使用該網域的對應,您必須將其他使用者新增為已驗證的擁有者。

如要將網域的已驗證擁有者新增至其他使用者或服務帳戶,請透過 Search Console 頁面新增權限:

  1. 在網路瀏覽器中前往以下網址:

    https://search.google.com/search-console/welcome

  2. 在「Properties」(屬性) 底下,按一下您要新增使用者或服務帳戶的網域。

  3. 向下捲動到「Verified owners」(已驗證擁有者) 清單,按一下 [Add an owner] (新增擁有者),然後輸入 Google 帳戶電子郵件地址或服務帳戶 ID。

    如要查看服務帳戶清單,請在 Google Cloud 控制台中開啟「Service Accounts」(服務帳戶) 頁面:

    前往「Service Accounts」(服務帳戶) 頁面

在 Knative Serving 控制台中,使用 Cloud Domains 註冊網域

如要透過 Knative 服務控制台使用 Cloud Domains 註冊網域,請按照下列步驟操作:

  1. 前往 Knative serving 網域對應頁面:

    前往「網域對應」頁面

  2. 按一下「註冊網域」

  3. 按照「註冊網域」一文中的說明完成註冊程序。

  4. 完成本頁稍早的步驟,將網域對應至 Knative serving,然後在網域註冊機構新增 DNS 記錄

疑難排解

如要查看常見問題,請參閱「排解自訂網域和受管理 TLS 的疑難」。