クラスタ外のユーザーやアプリケーションに HTTP トラフィックを提供するすべての Kf アプリは、ドメイン名に関連付ける必要があります。
Kf には、ドメインを構成できる 3 つの場所があります。優先度の順に示すと、次のようになります。
- App
- Space
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 は、ユーザーが指定したルートでドメインの競合を確認しません。