設定自訂網域¶
功能可用性:自 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 可以使用網域名稱。
-
手動建立 ClusterDomainClaim 或設定自動建立 ClusterDomainClaims
-
手動建立 ClusterDomainClaim
-
使用下列範本建立 YAML 檔案
apiVersion: networking.internal.knative.dev/v1alpha1 kind: ClusterDomainClaim metadata: name: <domain-name> spec: namespace: <namespace>
-
執行下列命令來套用 YAML 檔案
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一個步驟中建立的檔案名稱。
-
-
若要自動建立 ClusterDomainClaims:在
knative-serving
命名空間中的config-network
ConfigMap 中將autocreate-cluster-domain-claims
屬性設為true
。 這允許任何使用者,在任何命名空間中,對應任何網域名稱,包括其他命名空間中的網域名稱或他們未擁有的網域名稱。
-
-
建立 DomainMapping 物件
-
使用下列範本建立 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>
是包含DomainMapping
和Service
物件的命名空間。<service-name>
是對應到網域的服務名稱。<cert-secret>
是保存 TLS 通訊伺服器憑證的 Secret 名稱。 如果提供此選用的tls:
區段,則通訊協定會從 HTTP 切換為 HTTPS。
提示
您也可以對應到其他目標,只要它們符合可定址合約,且其解析的 URL 格式為
<name>.<namespace>.<clusterdomain>
,其中<name>
和<namespace>
是 Kubernetes 服務的名稱和命名空間,而<clusterdomain>
是叢集網域。 符合此合約的物件範例包括 Knative 服務、路由和 Kubernetes 服務。 -
執行下列命令來套用 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
。 -
-
將網域名稱指向您的 Knative 叢集的 IP 位址。 此步驟的詳細資訊會因您的網域註冊商而異。