カスタム ドメインを設定する

クラスタ外のユーザーやアプリケーションに HTTP トラフィックを提供するすべての Kf アプリは、ドメイン名に関連付ける必要があります。

Kf には、ドメインを構成できる 3 つの場所があります。優先度の順に示すと、次のようになります。

  1. App
  2. Space
  3. kf Namespace の config-defaults ConfigMap

config-defaults ConfigMap を編集する

config-defaults ConfigMap は、Kf のクラスタ全体の設定を保持し、クラスタ管理者によって編集が可能です。ConfigMap の値は、Spaces コントローラによって読み取られ、構成がこの値によって変更されます。ドメインの値は Space の status.networkConfig.domains フィールドに反映されます。

Kf クラスタのドメインを変更するには、kf Namespace の config-defaults ConfigMap を編集します。

kubectl edit configmap config-defaults -n kf

次のように spaceClusterDomain キーのエントリを追加または更新します。

spaceClusterDomain: my-domain.com

構成が正しく更新されたことを確認するには、Space のドメイン値を確認します。

kf space SPACE_NAME -o "jsonpath={.status.networkConfig.domains[]['domain']}"

出力は次のようになります。

Getting Space some-space
some-space.my-domain.com

各 Space は、クラスタ ドメインの先頭に独自の名前を付けます。これにより、Apps 間の競合を防ぐことができます。

Space にドメインを割り当てる

Space はドメイン構成の信頼できる場所です。デベロッパーが使用できるように、各 Space にドメインとサブドメインを割り当てることができます。ドメインを構成するためのフィールドは spec.networkConfig.domains です。

Space に割り当てられたドメインを表示するには、kf space を使用します。

kf space SPACE_NAME

出力の Spec フィールドには Space の特定の構成が含まれ、Status フィールドには、クラスタ全体のデフォルトが末尾に追加された Space の構成が反映されます。

...
Spec:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
...
Status:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
      Domain: my-space.prod.us-east1.kf.mycompany.com

CLI を使用してドメインを追加または削除する

kf CLI では、Space のドメインでミューテーションがサポートされています。それぞれのコマンドで、古い構成と新しい構成の差分が出力されます。

kf configure-space append-domain で新しいドメインを追加します。

kf configure-space append-domain SPACE_NAME myspace.mycompany.com

kf configure-space set-default-domain を使用して、既存のドメインを追加またはデフォルトにします。

kf configure-space set-default-domain SPACE_NAME myspace.mycompany.com

最後に、ドメインを削除します。

kf configure-space remove-domain SPACE_NAME myspace.mycompany.com

App を使用してドメインを指定する

App では、構成の一部としてドメインを指定できます。ルートは、kf push の間に次のロジックを使用して App にマッピングされます。

let current_routes  = The set of routes already on the app
let manifest_routes = The set of routes defined by the manifest
let flag_routes     = The set of routes supplied by the --route flag(s)
let no_route        = Whether the manifest has no-route:true or --no-route is set
let random_route    = Whether the manifest has random-route:true or --random-route is set

let new_routes = Union(current_routes, manifest_routes, flag_routes)

if new_routes.IsEmpty() then
  if random_route then
    new_routes.Add(CreateRandomRoute())
  else
    new_routes.Add(CreateDefaultRoute())
  end
end

if no_route then
  new_routes.RemoveAll()
end

return new_routes

App でルートが指定されていない場合、またはランダムなルートがリクエストされている場合、Space の最初のドメインが使用されます。Space 内の最初のドメインが変更された場合、デフォルト ドメインを使用している Space 内のすべての App が更新されます。

ドメイン テンプレートのカスタマイズ

Kf はドメインの変数置換をサポートしています。置換により、単一のクラスタ全体のドメインを Space ごとにカスタマイズして、Ingress IP の変更に対応できます。ドメインにある、構文 $(VARIABLE_NAME) を使用する変数に対して置換が実行されます。

変数 説明
CLUSTER_INGRESS_IP クラスタ Ingress の IPV4 アドレス。
SPACE_NAME Space の名前。

次の例は、ドメイン変数を使用してさまざまな組織構造とクラスタ パターンをサポートする方法を示しています。

  • nip.io などのワイルドカード DNS サービスの使用:

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • DNS を集中管理する組織のドメイン:

    $(SPACE_NAME).cluster-name.example.com
    
  • 独自の DNS を管理するチームのドメイン:

    cluster-name.$(SPACE_NAME).example.com
    
  • ウォーム フェイルオーバーと外部サーキット ブレーカーがあるクラスタのドメイン:

    $(SPACE_NAME)-failover.cluster-name.example.com
    

Kf と CF の違い

  • Kf スペースは、クラスタ全体のドメインの先頭に Space の名前を付けます。
  • Kf は、ユーザーが指定したルートでドメインの競合を確認しません。