跳至內容

設定自訂網域

功能可用性:自 Knative v0.24 以來為 beta
  • beta 功能經過良好測試,啟用它們被認為是安全的。 對於整體功能的支援不會被刪除,但細節可能會以不相容的方式變更。

每個 Knative 服務在建立時都會自動分配一個預設網域名稱。 但是,您可以使用網域對應,將您擁有的任何自訂網域名稱對應到 Knative 服務。

您可以建立 DomainMapping 物件,將單一、非萬用字元的網域對應到特定的 Knative 服務。

例如,如果您擁有網域名稱 example.org,並且您將網域 DNS 設定為參考您的 Knative 叢集,則可以使用 DomainMapping 在此網域提供 Knative 服務。

注意

如果您建立網域對應以對應到私有 Knative 服務,則私有 Knative 服務可從公共網際網路透過網域對應的自訂網域存取。

提示

此主題說明如何自訂每個服務的網域,無論預設網域為何。 如果您想要自訂網域範本以指派預設網域名稱,請參閱變更預設網域

先決條件

  • 您必須可以存取已安裝 Knative Serving 和 Ingress 實作的 Kubernetes 叢集。 如需詳細資訊,請參閱Serving 安裝文件
  • 您必須在叢集上啟用網域對應功能。
  • 您必須可以存取Knative 服務,您可以將網域對應到該服務。
  • 您必須擁有或可以存取要對應的網域名稱,並且能夠使用網域註冊商提供的工具變更網域 DNS 以指向您的 Knative 叢集。

程序

若要建立 DomainMapping,您必須先擁有 ClusterDomainClaim。 此 ClusterDomainClaim 會將網域名稱委派給您想要在其中建立 DomainMapping 的命名空間,這使得該命名空間中的 DomainMappings 可以使用網域名稱。

  1. 手動建立 ClusterDomainClaim 或設定自動建立 ClusterDomainClaims

    • 手動建立 ClusterDomainClaim

      1. 使用下列範本建立 YAML 檔案

        apiVersion: networking.internal.knative.dev/v1alpha1
        kind: ClusterDomainClaim
        metadata:
          name: <domain-name>
        spec:
          namespace: <namespace>
        
      2. 執行下列命令來套用 YAML 檔案

        kubectl apply -f <filename>.yaml
        
        其中 <filename> 是您在上一個步驟中建立的檔案名稱。

    • 若要自動建立 ClusterDomainClaims:在 knative-serving 命名空間中的 config-network ConfigMap 中將 autocreate-cluster-domain-claims 屬性設為 true。 這允許任何使用者,在任何命名空間中,對應任何網域名稱,包括其他命名空間中的網域名稱或他們未擁有的網域名稱。

  2. 建立 DomainMapping 物件

    1. 使用下列範本建立 YAML 檔案

      apiVersion: serving.knative.dev/v1beta1
      kind: DomainMapping
      metadata:
        name: <domain-name>
        namespace: <namespace>
      spec:
        ref:
          name: <service-name>
          kind: Service
          apiVersion: serving.knative.dev/v1
        tls:
          secretName: <cert-secret>
      
      其中

      • <domain-name> 是您想要將服務對應到的網域名稱。
      • <namespace> 是包含 DomainMappingService 物件的命名空間。
      • <service-name> 是對應到網域的服務名稱。
      • <cert-secret> 是保存 TLS 通訊伺服器憑證的 Secret 名稱。 如果提供此選用的 tls: 區段,則通訊協定會從 HTTP 切換為 HTTPS。

      提示

      您也可以對應到其他目標,只要它們符合可定址合約,且其解析的 URL 格式為 <name>.<namespace>.<clusterdomain>,其中 <name><namespace> 是 Kubernetes 服務的名稱和命名空間,而 <clusterdomain> 是叢集網域。 符合此合約的物件範例包括 Knative 服務、路由和 Kubernetes 服務。

    2. 執行下列命令來套用 YAML 檔案

      kubectl apply -f <filename>.yaml
      
      其中 <filename> 是您在上一個步驟中建立的檔案名稱。

    執行命令

    kn domain create <domain-name> --ref <target> --tls <tls-secret> --namespace <namespace>
    

    其中

    • <domain-name> 是您想要將服務或路由對應到的網域名稱。
    • <target> 是對應到網域的服務或路由名稱。 您可以使用字首 ksvc:kroute: 來指定是否要將網域對應到 Knative 服務或路由。 如果未提供字首,則會假設為 ksvc:。 此外,您可以使用 :namespace 後綴來指向不同命名空間中的服務或路由。 範例
      • mysvc 對應到與此對應相同命名空間中的服務 mysvc
      • kroute:myroute:othernamespace 對應到 othernamespace 命名空間中的路由 myroute
    • <tls-secret> 是選用的,如果提供,則會啟用 TLS 通訊協定。 此值會指定保存伺服器憑證的 secret。
    • <namespace> 是您要建立 DomainMapping 的命名空間。 依預設,DomainMapping 會在目前的命名空間中建立。

    注意

    除了建立 DomainMappings 之外,您還可以執行 kn domain 命令來列出、描述、更新和刪除現有的 DomainMappings。 如需有關命令的詳細資訊,請執行 kn domain --help

  3. 將網域名稱指向您的 Knative 叢集的 IP 位址。 此步驟的詳細資訊會因您的網域註冊商而異。

我們使用分析和 Cookie 來了解網站流量。 為了達到該目的,我們與 Google 分享您使用我們網站的資訊。了解更多。