ルートとドメイン

このトピックでは、Kf でのルートとドメインの仕組みと、デベロッパーと管理者が Kf クラスタにデプロイされたアプリのルートとドメインを構成する方法について説明します。

アプリケーションへの外部アクセスを許可するには、ドメインとルートを作成する必要があります。

内部ルーティング

Kf アプリは、クラスタ ネットワークから離れることなく、Cloud Service Mesh によって提供されるメッシュ ネットワークを使用して、直接内部でクラスタ内の他のアプリと通信できます。デフォルトでは、すべてのトラフィックが相互 TLS で暗号化されます。

Kf クラスタにデプロイされるすべてのアプリには、デフォルトで内部エンドポイントが構成されます。アドレス app-name.space-name.svc.cluster.local は、アプリ間の内部通信に使用できます。この内部アドレスを使用するための、追加の手順はありません。内部ルートに対する相互 TLS は、デフォルトで有効になっています。この内部アドレスには、アプリを実行している Pod からのみアクセス可能で、クラスタの外部からはアクセスできません。

アプリのロード バランシング

トラフィックは、ラウンドロビン ポリシーを使用して Istio からアプリの正常なインスタンスにルーティングされます。現在、このポリシーは変更できません。

ルートの機能

ルートにより、クラスタの上り(内向き)ゲートウェイにトラフィックを配信する場所と、指定されたアドレスで利用できるアプリがない場合の処理が指示されます。デフォルトでは、ルート上に使用可能なアプリがない場合、ルートはリクエストを受信すると、HTTP 503 のステータス コードを返します。

ルートは、ホスト、ドメイン、パスの 3 要素で構成されます。たとえば、URI payroll.mydatacenter.example.com/login では次のようになります。

  • ホストは payroll です。
  • ドメインは mydatacenter.example.com です。
  • パスは /login です。

ルートにはドメインを含める必要がありますが、ホストとパスは省略可能です。複数のパスを指定すると、複数のルートで同じホストとドメインを共有できます。複数のアプリが同じルートを共有できます。トラフィックはそれらの間で分割されます。これは、従来の Blue/Green デプロイをサポートする必要がある場合に役立ちます。複数のアプリが異なるパスにバインドされている場合、長いパスが短いパスより優先されます。

ルートの使用

続くセクションでは、kf CLI を使用してルートを管理する方法について説明します。

ルートの一覧表示

開発者は、kf routes コマンドを使用して現在のスペースのルートを一覧表示できます。

$ kf routes
Getting Routes in Space: my-space
Found 2 Routes in Space my-space

HOST    DOMAIN       PATH    APPS
echo    example.com  /       echo
*       example.com  /login  uaa

ルートの作成

kf create-route コマンドを使用すると、ルートを作成できます。

# Create a Route in the targeted Space to match traffic for myapp.example.com/*
$ kf create-route example.com --hostname myapp

# Create a Route in the Space myspace to match traffic for myapp.example.com/*
$ kf create-route -n myspace example.com --hostname myapp

# Create a Route in the targeted Space to match traffic for myapp.example.com/mypath*
$ kf create-route example.com --hostname myapp --path /mypath

# You can also supply the Space name as the first parameter if you have
# scripts that rely on the old cf style API.
$ kf create-route myspace example.com --hostname myapp # myapp.example.com

ルートが作成された後、ルートにアプリがバインドされていない場合は、一致するリクエストに対して HTTP 503 のステータス コードが返されます。

アプリにルートをマッピングする

開発者は、kf map-route コマンドを使用してアプリをルートでアクセス可能にできます。

$ kf map-route MYAPP mycluster.example.com --host myapp --path mypath

ルートのマッピング解除

開発者は、kf unmap-route コマンドを使用してアプリをルートでアクセス不可にできます。

$ kf unmap-route MYAPP mycluster.example.com --host myapp --path mypath

ルートの削除

開発者は kf delete-route コマンドを使用してルートを削除できます。

$ kf delete-route mycluster.example.com --host myapp --path mypath

ルートを削除すると、ルートをリッスンしているすべてのアプリにトラフィックがルーティングされなくなります。

アプリ マニフェストの宣言型ルート

ルートはアプリ マニフェスト ファイルで宣言的に管理できます。ルートがまだ存在しない場合は、作成されます。

---
applications:
- name: my-app
  # ...
  routes:
  - route: example.com
  - route: www.example.com/path

サポートされているルート プロパティの詳細については、マニフェストのドキュメントをご覧ください。

高度なトピック

CRD のルーティング

ルーティング関連では、次の 4 つのタイプがあります。

  • VirtualService
  • Route
  • Service
  • App

各アプリには、アプリのすべての実行中のインスタンスに指定する抽象名である Service があります。Service の名前はアプリと同じです。Route は単一の外部 URL を表します。Route は、Apps への変更を常に監視します。Apps が Route への追加をリクエストすると、Route は Apps のリストを更新し、それから VirtualService を更新します。VirtualService は単一のドメインを表し、そのドメインに属するスペース内のすべての Route のリストをマージします。

Istio は VirtualService の構成を読み取り、トラフィックのルーティング方法を決定します。