カスタムドメインの設定¶
機能の可用性: Knative v0.24以降ベータ版
- ベータ版の機能は十分にテストされていますが、詳細な仕様は非互換な方法で変更される可能性があります。
各Knativeサービスは、作成時に自動的にデフォルトのドメイン名が割り当てられます。ただし、ドメインマッピングを使用して、所有する任意のカスタムドメイン名をKnativeサービスにマップできます。
単一のワイルドカード以外のドメインを特定のKnativeサービスにマップするには、DomainMapping
オブジェクトを作成します。
たとえば、example.org
ドメインを所有しており、ドメインDNSをKnativeクラスタを参照するように設定している場合、DomainMappingを使用してこのドメインでKnativeサービスを提供できます。
注記
プライベートKnativeサービスにマップするドメインマッピングを作成した場合、プライベートKnativeサービスは、ドメインマッピングのカスタムドメインを使用してパブリックインターネットからアクセスできます。
ヒント
このトピックでは、デフォルトのドメインに関係なく、各サービスのドメインをカスタマイズする方法を説明します。デフォルトのドメイン名を割り当てるドメインテンプレートをカスタマイズする場合は、デフォルトドメインの変更を参照してください。
前提条件¶
- Knative ServingとIngress実装がインストールされたKubernetesクラスタへのアクセスが必要です。詳細については、Servingインストールドキュメントを参照してください。
- クラスタでドメインマッピング機能を有効にする必要があります。
- ドメインをマップできるKnativeサービスへのアクセスが必要です。
- マップするドメイン名にアクセスし、ドメインレジストラが提供するツールを使用して、ドメインDNSをKnativeクラスタを指すように変更できる必要があります。
手順¶
DomainMappingを作成するには、最初にClusterDomainClaimが必要です。このClusterDomainClaimは、DomainMappingを作成する名前空間にドメイン名を委任し、その名前空間内のDomainMappingがドメイン名を使用できるようにします。
-
ClusterDomainClaimを手動で作成するか、ClusterDomainClaimの自動作成を設定します。
-
ClusterDomainClaimを手動で作成するには
-
次のテンプレートを使用してYAMLファイルを作成します
apiVersion: networking.internal.knative.dev/v1alpha1 kind: ClusterDomainClaim metadata: name: <domain-name> spec: namespace: <namespace>
-
次のコマンドを実行してYAMLファイルを適用します
ここで、kubectl apply -f <filename>.yaml
<filename>
は前の手順で作成したファイル名です。
-
-
ClusterDomainClaimを自動的に作成するには: `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に切り替わります。
ヒント
Addressableコントラクトに準拠し、解決済みのURLが`
. . `(` `と` `はKubernetesサービスの名前と名前空間、` `はクラスタドメイン)の形式である限り、他のターゲットにもマップできます。このコントラクトに準拠するオブジェクトの例としては、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プロトコルが有効になります。値は、サーバー証明書を保持するシークレットを指定します。<namespace>
は、DomainMappingを作成する名前空間です。デフォルトでは、DomainMappingは現在の名前空間に作成されます。
注記
DomainMappingを作成することに加えて、`kn domain`コマンドを使用して、既存のDomainMappingを一覧表示、記述、更新、削除できます。コマンドの詳細については、`kn domain --help`を実行してください。
-
-
ドメイン名をKnativeクラスタのIPアドレスにポイントします。この手順の詳細は、ドメインレジストラによって異なります。