Flex Gateway新着情報
Governance新着情報
Monitoring API Managerローカルモードで実行される Anypoint Flex Gateway は、2 つの設定モデルをサポートします。
Kubernetes で一般的なリソースベースモデルは、詳細な定義に適しています。各リソースは、設定の kind
の値が次のいずれかになります。
ApiInstance
Service
PolicyBinding
Configuration
インラインモデルは簡潔な定義に適していますが、汎用性が低くなります (たとえば、自動ポリシーはリソースベース定義でしか適用できません)。
インライン定義では、設定の kind
の値は ApiInstance
のみとなり、この下でサービスとポリシーの両方を定義します。
それぞれの例は「例」を参照してください。
このリファレンスガイドでは、リソースベース設定またはインライン設定に適用可能なリソースについて説明します。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: <api instance name> namespace: # optional namespace name spec: address: <proxy address including port and path> services: # optional map of upstream services <name>: address: <service address> routes: # optional array of routes to service - config: # optional route configuration destinationPath: <optional base path to upstream service> rules: # optional route rules policies: # optional array of policies - policyRef: name: <name of the policy> namespace: <optional namespace of the policy> config: # optional policy configuration rules: # optional policy rules
パラメーター | 必須または省略可能 | デフォルト値 | 説明 |
---|---|---|---|
|
必須 |
なし |
他のリソース (ポリシーバインドなど) の対象リファレンスとして使用される API インスタンス識別子。 |
|
省略可能 |
|
|
|
必須 |
なし |
プロトコル、ホスト、ポート、パス (省略可能) を含むプロキシアドレス URL。ベースパスを指定する場合は、どの |
|
省略可能 |
空 |
指定されたサービスとルートのマップ。 |
|
必須 |
なし |
サービスアドレス (およびポート)。サポートされる形式: |
|
省略可能 |
空 |
この API インスタンスに設定されているサービスへのルートの配列。空である場合は、サービスへのデフォルトルートが確立され、すべてのトラフィックがルーティングされます。 |
|
省略可能 |
空 |
このルートの設定。空の場合は、空の |
|
省略可能 |
空 |
アップストリームサービスに要求を転送するために先頭に追加するパス。たとえば、「destinationPath: /api/v1」と指定した場合、この API インスタンスへの要求で「/orders」のようなパスを指定すると、要求は「/api/v1/orders」のように上流にルーティングされます。 |
|
省略可能 |
空 |
このルートのルールの配列。「ポリシーバインド」の「spec.rules」を参照してください。 |
|
省略可能 |
空 |
この API インスタンスに適用するポリシーの配列。 |
|
必須 |
なし |
ポリシー名。 |
|
省略可能 |
|
ポリシーが定義される名前空間。提供ポリシーの場合、この項目の値は |
|
省略可能 |
空 |
ポリシーの設定。「ポリシーバインド」の「spec.config」を参照してください。 |
|
省略可能 |
空 |
このポリシーを API インスタンスに適用するためのルールの配列。 「ポリシーバインド」の「spec.rules」を参照してください。 |
次のリソースは、インスタンス識別子を記述するメタデータを使用して ApiInstance
を指定しています。metadata.name
値は、他のリソース (ポリシーバインドなど) の対象リファレンスとして使用されます。spec.services.routes.config.destinationPath
値は、rules
の下に指定されているパスの先頭に /v1/apps
を追加し、ベースパスのように機能します。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: hello-flex-gateway-instance spec: address: http://0.0.0.0:8080 services: json: address: https://<upstream address>:443/ routes: - rules: - path: /api(/users/.*) - path: /api(/comments/.*) config: destinationPath: /v1/apps
次の ApiInstance
リソースは、2 つの異なる API インスタンスがポート 8080 でリスンする API ポート共有を示しています。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: httpbin-example spec: address: http://0.0.0.0:8080/api/httpbin/ services: upstream: address: https://<upstream address>:443 --- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: json-example spec: address: http://0.0.0.0:8080/api/json/ services: upstream: address: https://<upstream address>:443
両方のサービスはポート 8080 でリスンします。次に例を示します。
curl http://localhost:8080/api/httpbin/get -v curl http://localhost:8080/api/json/users/1 -v
ポートを共有する API のベースパスは競合しない必要があります。たとえば、次のパスの組み合わせは許可されません。 http://0.0.0.0:8080/cats http://0.0.0.0:8080/cats/dogs |
ポートには TLS が適用されます。そのため、ポートを共有するすべての API インスタンスに同じ TLS ポリシーが適用されます。 |
apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: <policy binding name> namespace: <namespace name> spec: targetRef: name: <api instance name> namespace: <optional api instance namespace> policyRef: name: <policy name> namespace: <optional policy namespace> config: # optional policy configuration order: # optional policy read order rules: # optional policy rules - path: <path regular expression> methods: <methods regular expression> host: <host regular expression> headers: <headers map> <header-name>: <header value regular expression>
パラメーター | 必須または省略可能 | デフォルト値 | 説明 |
---|---|---|---|
|
必須 |
なし |
ポリシーバインドの識別子。 |
|
省略可能 |
|
|
|
必須 |
なし |
ポリシーがバインドされる API インスタンスの識別子。 |
|
省略可能 |
|
対象が定義される名前空間。 |
|
必須 |
なし |
ポリシー名。利用可能なパッケージのリストを参照してください。 |
|
省略可能 |
|
ポリシーが定義される名前空間。提供ポリシーの場合、この項目の値は |
|
省略可能 |
空 |
ポリシーの設定。この項目の内容は、指定されたポリシーに依存します。利用可能なパッケージのリストを参照してください。 |
|
省略可能 |
50 |
ポリシー実行チェーン全体におけるポリシーの読み取り順序。 |
|
省略可能 |
空 |
ポリシーが特定の要求に適用されるかどうかを決定するためのルールの配列。これらのルールは OR 形式でチェックされます。最初に True となったルールに従ってポリシーを要求に適合します。各ルールの属性は、AND 形式で適用されます。パスとホストが定義されている場合は、両方が一致しなければルールは True にはなりません。 |
|
省略可能 |
|
要求のパスと一致する正規表現。 要求を上流にルーティングする場合は、この正規表現のキャプチャグループを使用して、パスを置き換えます。 「path: /api(/.*)」と指定すると、/api/orders というパスが指定された要求は、/orders として上流にルーティングされます。 複数のキャプチャグループを指定でき、その場合は、取得されたすべてのサブ文字列が連結されてパスが置き換えられます。 |
|
省略可能 |
|
要求のホストと一致する正規表現。 |
|
省略可能 |
|
要求のメソッドと一致する正規表現。 |
|
省略可能 |
空 |
ヘッダー名と要求に含まれる必要がある値の正規表現のマップ。 各エントリのキーは想定されるヘッダー名で、値はヘッダー値と一致する正規表現です。 |
次のリソースは、route
ポリシーを API インスタンスにバインドして、rules
で指定されたトラフィックを Service
設定スニペットで指定されたプロキシアドレスにルーティングします。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: hello-flex-gateway-route namespace: e-commerce spec: targetRef: name: hello-flex-gateway-instance policyRef: name: route namespace: default config: destinationRef: name: json namespace: e-commerce rules: - path: /api/json(/.*)
次のリソースは、http-basic-authentication-flex
ポリシーを API インスタンスにバインドし、要求に config.username
と config.password
で定義されている基本ログイン情報を含めることを必須にします。このポリシーには読み取り順序に 2
の値が与えられます。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: hello-flex-gateway-auth namespace: e-commerce spec: targetRef: name: hello-flex-gateway-instance namespace: e-commerce policyRef: name: http-basic-authentication-flex namespace: default config: username: chris password: admin order: 2
apiVersion: gateway.mulesoft.com/v1alpha1 kind: Service metadata: name: <service name> namespace: <namespace name> spec: address: <service address including port>
パラメーター | 必須または省略可能 | デフォルト値 | 説明 |
---|---|---|---|
|
必須 |
なし |
サービス識別子。 |
|
省略可能 |
|
|
|
必須 |
なし |
プロトコル、ホスト、ポートを含むサービスアドレス URL。サポートされる形式: |
次のリソースは、サービス識別子を記述するメタデータを使用して Service
を定義しています。metadata.namespace
値は ApiInstance
設定で指定されている名前空間と一致します。spec.address
は、API 実装のアドレスです。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: Service metadata: name: json-example namespace: e-commerce spec: address: https://<upstream address>:443/
Configuration
エンティティを作成することによって目的のゲートウェイ状態を定義します。 Configuration
エンティティは、Flex Gateway 自身のいくつかのランタイム設定 (ログや共有ストレージなど) を指定します。定義には以下が含まれます。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: Configuration metadata: name: <value> namespace: <namespace name> spec: logging: # logging configuration sharedStorage: # shared storage configuration
パラメーター | 必須または省略可能 | デフォルト値 | 説明 |
---|---|---|---|
|
必須 |
なし |
設定エンティティ。 |
|
省略可能 |
|
設定エンティティを特定するための名前空間値。 |
|
必須 |
なし |
ゲートウェイの特性を定義する設定オブジェクト。オブジェクトには |
logging
オブジェクトは、メッセージログポリシーを介してランタイムおよびアクセスログの配信を設定します。ログは、サポートされている Fluent Bit v2.0 出力に配信されます。
apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
name: <value>
namespace: <namespace name>
spec:
logging:
outputs:
- name: <output-name>
type: <output-type>
parameters:
<param-name>: <param-value>
runtimeLogs:
logLevel: <value>
outputs: <value>
accessLogs:
outputs: <value>
パラメーター | 必須または省略可能 | デフォルト値 | 説明 |
---|---|---|---|
|
必須 |
なし |
後でランタイムとアクセスログの設定で参照する、この出力の名前。 |
|
必須 |
なし |
Fluent Bit でサポートされる出力種別。Fluent Bit 出力種別については、 Fluent Bit 出力のドキュメント を参照してください。 |
|
必須 |
なし |
特定の Fluent Bit 出力種別のパラメーターのマップ。Fluent Bit 出力種別のパラメーターについては、 Fluent Bit 出力のドキュメント を参照してください。 |
|
省略可能 |
空 |
アクセスログをリダイレクトする出力名のリスト。 |
|
省略可能 |
|
ログの詳細を指定するパラメーター。サポートされる |
|
省略可能 |
空 |
ランタイムログをリダイレクトする出力名のリスト。 |
値を空白のままにすると、デフォルト値が設定に適用されます。
上記のパラメーターに加えて、Flex Gateway にはログ出力用の変数が用意されています。設定されている場合、変数はログ内のそれぞれの出力の 1 つとして表示されます。
変数 | 説明 | 出力 |
---|---|---|
|
ログに記録されたイベントの日時 |
特定の時刻 (例: |
|
ログに記録されたイベントが発生した Flex Gateway サービス |
|
|
ログに記録されたイベントの |
|
|
ログ種別 |
|
apiVersion: gateway.mulesoft.com/v1alpha1 kind: Configuration metadata: name: logging spec: logging: outputs: - name: log-to-file type: file parameters: path: /var/log file: log.txt format: template template: | [{date}][{logger}][{level}][{kind}] {message} runtimeLogs: logLevel: info outputs: - log-to-file accessLogs: outputs: - log-to-file
sharedStorage
オブジェクトは、共有ストレージのゲートウェイを設定します。本番ワークフローでは Redis (最小バージョン 4.0.0) を使用する必要がありますが、その定義は省略可能です。Redis が定義されていない場合、ポート 4000 の共有ストレージサービスを引き続き使用できますが、メモリ内実装が使用されます。
必要に応じて、Redis とトランスポート層セキュリティ (TLS) を使用して、機密データを保護し、不正なアクセスを防止して、サービスの信頼性を維持できます。
apiVersion: gateway.mulesoft.com/v1alpha1 kind: Configuration metadata: name: shared-storage-redis spec: sharedStorage: redis: address: <string> // REQUIRED username: <string> // OPTIONAL password: <string> // OPTIONAL db: <string> // OPTIONAL tls: // OPTIONAL trustedCA: <string> // OPTIONAL certificate: // OPTIONAL keyPassphrase <string> // OPTIONAL key: <string> // REQUIRED crt: <string> // REQUIRED alpn: <array> // OPTIONAL skipValidation: <boolean> // OPTIONAL minversion: <string> // OPTIONAL maxversion: <string> // OPTIONAL ciphers: <array> // OPTIONAL
パラメーター | 必須または省略可能 | デフォルト値 | 説明 |
---|---|---|---|
|
必須 |
なし |
|
|
省略可能 |
空 |
Redis ユーザー名 |
|
省略可能 |
空 |
Redis ユーザーパスワード |
|
省略可能 |
0 |
使用する Redis データベース番号 |
|
省略可能 |
空 |
Redis TLS 設定 |
|
省略可能 |
なし |
サーバー証明書を確認する時に使用するルート認証機関 |
|
省略可能 |
なし |
サーバーに提供するクライアント証明書 |
|
省略可能 |
|
証明書鍵パスフレーズ。指定された場合、DEK-Info ヘッダーが含まれる非公開キー形式を使用します。未指定の場合、非公開キーは暗号化できません。 |
|
必須 |
なし |
証明書の非公開キー部分 |
|
必須 |
なし |
証明書の公開キー部分 |
|
省略可能 |
|
true の場合、サーバーによって提供されたすべての証明書が受け入れられます。 |
|
省略可能 |
|
許容される最小 TLS バージョン |
|
省略可能 |
|
許容される最大 TLS バージョン |
|
省略可能 |
空のリスト |
サポートされているアプリケーションレベルプロトコルの優先リスト (h2、http/1.1 など)。 |
|
省略可能 |
TLS/Redis では、以下を除いて TLS ポリシーと同じ暗号化がサポートされます。
|
Redis ストレージサービスは、オブジェクトストアインターフェースと Redis バックエンド間のブリッジとして機能する、REST API オブジェクトストアの実装です。
apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
name: shared-storage-redis
spec:
sharedStorage:
redis:
address: redis.e-commerce.svc:6379
username: ecomm-user
password: ecomm-pwd-123
DB: 7
必要に応じて、Redis と TLS を使用してデータを保護し、安全な通信を確保できます。
apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
name: shared-storage-redis
spec:
sharedStorage:
redis:
address: internal.redis.com:6379
tls:
skipValidation: false
minVersion: "1.1"
maxVersion: "1.3"
alpn:
- h2
- http/1.1
ciphers:
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
trustedCA: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
certificate:
keyPassphrase: "****"
key: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
ローカルストレージサービスは、データをメモリに保存する REST API オブジェクトストアの実装です。Flex Gateway を停止または再起動すると、すべてのデータが失われます。
apiVersion: gateway.mulesoft.com/v1alpha1
kind: Configuration
metadata:
name: rtm-config
namespace: sales
spec:
sharedStorage:
local:
enabled: true
apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: api-example spec: address: http://0.0.0.0:8080 services: api-example: address: https://<your url>:443/ routes: - rules: - path: /api(/users/.*) - path: /api(/comments/.*) config: destinationPath: /v1/apps policies: - policyRef: name: http-basic-authentication-flex config: username: chris password: admin
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: ingress-http spec: address: http://0.0.0.0:8080 --- apiVersion: gateway.mulesoft.com/v1alpha1 kind: Service metadata: name: json spec: address: https://<your url>:443/ --- apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: ingress-http-route spec: targetRef: name: ingress-http policyRef: name: route config: destinationRef: name: json rules: - path: /api(/users/.*) - path: /api(/comments/.*) --- apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: ingress-http-authentication spec: targetRef: name: ingress-http policyRef: name: http-basic-authentication-flex config: username: chris password: admin