CloudHub 専用ロードバランサー (DLB) は、クライアントからの要求を VPC 内でデプロイされている Mule アプリケーションに転送します。 マッピングルールにより、DLB が受信する要求を (HTTP ホストヘッダーによって一致ルールを特定して) 異なる Mule アプリケーション名とドメインに転送できます。
マッピングルールは、DLB の作成時に定義するか、または Runtime Manager、コマンドラインインターフェース (CLI)、CloudHub API を使用して既存の DLB に追加できます。
シンプルな一致ルールを作成する場合、1 つの入力アドレスが定義済みの出力 (アプリケーションのエンドポイント) に一致します。 リテラル一致の代わりにパターンを使用して、変数のような入力テキストをエンドポイントに対して照合することができます。
ルールの優先度は順序によって決まります。 リスト中で最初に一致したルールが適用されます。
| マッピングルールを定義していない場合、DLB はデフォルトのマッピングルールを作成して使用します。 デフォルトのマッピングルールは後で変更できます。 |
マッピングルールの作成
マッピングルールは、証明書の共通名 (CN) で識別されるロードバランサーの SSL エンドポイントの属性です。
マッピングルールを作成すると証明書が関連付けられます。
-
Runtime Manager
マッピングルールは証明書の定義内で定義します。
-
CLI または CloudHub API
証明書の CN を指定する必要があります。
証明書名を省略すると、マッピングはデフォルトのエンドポイントに追加されます。
Runtime Manager でのマッピングルールの作成
Runtime Manager を使用して DLB の SSL エンドポイントでマッピングルールを作成する手順は次のとおりです。
-
Anypoint Platform の [Runtime Manager] を選択します。
-
左側のメニューで [Load Balancers (ロードバランサー)] を選択します。
-
ロードバランサー名をクリックして、証明書名をクリックします。
-
[URL Mapping Rules (URL マッピングルール)] セクションで [Add New Rule (新規ルールを追加)] をクリックします。
Figure 1. このスクリーンショットは、(1) [Add New Rule (新規ルールを追加)] アイコンと (2) マッピングルールの作成に必要な項目を示しています。 -
次の項目に入力します。
-
Input Path (入力パス) (
inputUri)クライアントが要求する URI (例:
/{app}/)入力 URI は、ロードバランサーのホストヘッダーに付加されます。
-
Target App (対象アプリケーション) (
appName)要求を処理する CloudHub アプリケーションの名前 (例:
{app}-example) -
Output Path (出力パス) (
appURI)アプリケーションに渡す URI 文字列 (例:
/)出力パスではパターンを指定することはできません。
-
Protocol (プロトコル) (
upstreamProtocol)アプリケーションがリスンするプロトコル:
-
http (ポート 8091) -
https (ポート 8092) -
ws WebSockets (ポート 8091) -
wss SSL/TLS 経由の WebSockets (8092)
デフォルトでは、ロードバランサーは HTTPS で外部要求をリスンし、HTTP でワーカーと内部的に通信します。VPC で HTTPS をリスンするように Mule アプリケーションを設定してある場合は、マッピングルールリストを作成するときに [Protocol (プロトコル)] を
https に設定します。 -
-
この DLB では、項目の値とクライアントの要求を使用して対象アプリケーションに送信されるパスを生成します。
たとえば、クライアントの要求が <domain.com>/hello/world/ でマッピングルール項目が次のように設定されているとします。
-
Input Path (入力パス):
/hello/ -
Target App (対象アプリケーション):
myApp1 -
Output Path (出力パス):
/test/
この DLB では出力パスの値 (/test/) を使用し、クライアントの要求から入力パスに一致するセクション (/hello/) を削除して、残り (/world/) をクライアントの要求に追加します。
次に、生成されたパス (/test/world/) を対象アプリケーション (myApp1) に送信します。
入力パスを定義するときは、パターンまたはリテラル文字列を仕様できます。 出力パスの場合は、リテラル文字列のみを使用できます。
CLI を使用したマッピングルールの作成
CLI を使用して DLB でマッピングルールを作成する手順は次のとおりです。
cloudhub load-balancer mappings add [options] <name> <index> <inputUri> <appName> <appUri> [certificateName]
「cloudhub load-balancer mappings add」を参照してください。
CloudHub API を使用したマッピングルールの作成
CloudHub CLI を使用して DLB でマッピングルールを作成する手順は次のとおりです。
anypoint.mulesoft.com/cloudhub/api/organizations/{orgid}/loadbalancers/{loadbalancerId}
「CloudHub API」を参照してください。
マッピングルールでのパターンの使用
パターンは、入力テキストを照合するためのテンプレートを定義する文字列です。
中括弧 ({ }) の値は変数として処理されます。
-
変数の名前では、小文字の英文字 (
a-z) のみを使用できます。 -
変数の値には、
a-z0-1.&?-_ の文字を含めることができますが、スラッシュ (/) を含めることはできません。
DLB では、[Output Path (出力パス)] (appURI) ではパターンをサポートしていません。
|
URL マッピング
Input Path (入力パス) としてアプリケーション名を渡し、CloudHub のアプリケーション名に直接マップできます。
| ルール番号 | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | Protocol (プロトコル) |
|---|---|---|---|---|
1 |
/{app}/ |
{app} |
/ |
http |
このルールは lb-demo.lb.anypointdns.net/{app} への要求をマップして {app}.cloudhub.io にリダイレクトします。
{app} のパターンは、インバウンド要求で渡すアプリケーション名と一致します。
ホストマッピング
SSL エンドポイントで *.example.com のような ワイルドカード証明書を設定してある場合、subdomain 変数を使用して任意のサブドメインをマップできます。
| ルール番号 | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | Protocol (プロトコル) |
|---|---|---|---|---|
1 |
/ |
{subdomain} |
/ |
https |
このルールは、example.com のサブドメインに渡される要求を対応する appName に自動的にマップします。
-
api.example.com を渡すと、api.cloudhub.io にリダイレクトされる。 -
application.example.com を渡すと、application.cloudhub.io にマップされる。
subdomain 変数では、SSL エンドポイントの サブジェクト代替名 (SAN) を使用することもできます。
DLB を介して任意のサブドメインのアプリケーション名を渡すことができるワイルドカード証明書を使用する代わりに、許可されるサブドメイン名を指定できます。
これを行うには、証明書の共通名に対して SAN を設定する必要があります。
subdomain 変数を使用してドメイン名のサブドメイン部分をアプリケーションにマップできます。
この例には以下が含まれます。
-
2 つのデプロイ済みアプリケーション:
-
dev-app -
qa-app
-
-
以下の SAN が設定された SSL エンドポイント:
-
dev.example.com -
qa.example.com
-
-
マッピングルール:
ルール番号 Input Path (入力パス) Target App (対象アプリケーション) Output Path (出力パス) Protocol (プロトコル) 1
/
{subdomain}-app
/
https
このルールは、ドメイン名のサブドメイン部分をアプリケーション名にマップします。
-
dev.example.com は dev-app.cloudhub.io にリダイレクトされます。 -
qa.example.com は qa-app.cloudhub.io にリダイレクトされます。
リテラル 1:1 マッピングの使用
パターンを使用する代わりに、リテラルアプリケーション名をマップできます。 この場合、ルールはアプリケーションと正確に一致する必要があります。
このルールは、デフォルトのロードバランサー lb-demo.lb.anypointdns.net を CloudHub のアプリケーション myApp.cloudhub.io に直接マップします。
| ルール番号 | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | Protocol (プロトコル) |
|---|---|---|---|---|
1 |
/ |
myApp |
/ |
http |
このルールは、入力 URI が /misc/myhellotest/v1/ping の場合は dev-misc-myhellotest-v1-myapp アプリケーションと一致しますが、/misc/myhellootest/v1/ping の場合は一致しません。
| ルール番号 | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | Protocol (プロトコル) |
|---|---|---|---|---|
1 |
/{layera}/{domaina}/v{versiona}/ |
dev-{layera}-{domaina}-{versiona}-myapp |
/api/ |
http |
[Input Path (入力パス)] を、定義したパターンではなく静的な文字列に変更することで、リテラル 1:1 マッピングを複数のアプリケーションに対して使用することもできます。
| ルール番号 | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | Protocol (プロトコル) |
|---|---|---|---|---|
1 |
/v1/applicationX |
application-x |
/api/ |
http |
2 |
/v1/applicationY |
application-y |
/api/ |
http |
3 |
/v2/applicationx |
application-x-v2 |
/api/ |
http |
マッピングルールの優先度
各ルールで優先度を定義します。 リスト内では、先にあるルールの方が後のルールより優先されます。
DLB は、さらに一致精度の高いルールがリストの後の方にある場合でも、常に最初に一致したルールを使用します。 ルールを作成する場合は、複数のルールが互いに上書きしてしまわないように、各ルールの順序に注意してください。
次の例では、/api/v1/secondapp という URL を default-app アプリケーションにマップしています。
| Priority (優先度) | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | プロトコル |
|---|---|---|---|---|
1 |
/api/v1/ |
default-app |
/api/v1/ |
http |
2 |
/api/v1/secondapp/ |
second-app |
/api/v1 |
http |
ルールが second-app のみと一致するようにするには、ルールの優先度を次のように定義する必要があります。
| Priority (優先度) | Input Path (入力パス) | Target App (対象アプリケーション) | Output Path (出力パス) | プロトコル |
|---|---|---|---|---|
1 |
/api/v1/secondapp/ |
second-app |
/api/v1 |
http |
2 |
/api/v1/ |
default-app |
/api/v1/ |
http |
Runtime Manager でのマッピングルールの優先度の変更
Runtime Manager でマッピングルールの優先度を変更するための手順は次のとおりです。
-
Anypoint Platform の [Runtime Manager] を選択します。
-
左側のメニューで [Load Balancers (ロードバランサー)] を選択します。
-
ロードバランサー名をクリックして、証明書名をクリックします。
-
[URL Mapping Rules (URL マッピングルール)] セクションで、ルールにマウスポインターを置いてハンドルを表示します。
Figure 2. 矢印は、マッピングルールの順序を変更するために使用するハンドルを示しています。 -
ハンドルをクリックしてドラッグすることで、リスト内でルールを上下に移動します。
-
[Done Editing (編集完了)] をクリックします。
CLI を使用したマッピングルールの優先度の変更
CLI でマッピングルールを作成するときにマッピングルールの優先度を指定するには、index 値を使用します。
インデックス 0 のルールが最高の優先度となります。割り当てられたインデックスが大きいほど、優先度は低くなります。
「cloudhub load-balancer mappings add」を参照してください。
CloudHub CLI を使用したマッピングルールの優先度の変更
API を使用してマッピングルールを作成する場合は、優先度を指定することはできません。
新たに作成されたルールは、リストの末尾に付加されます。
後でロードバランサーエンドポイントに PATCH 要求を送信することで、ルールの順序を変更できます。
anypoint.mulesoft.com/cloudhub/api/organizations/{orgid}/loadbalancers/{loadbalancerId}
ロードバランサー ID を調べるには、エンドポイントに対して GET 要求を実行します。
/organizations/{orgid}/loadbalancers