マネジメントインターフェースリファレンス
デフォルトでは、QuarkusはメインHTTPサーバーの /q
以下に、 マネジメント エンドポイントを公開します。同じHTTPサーバーで、アプリケーションエンドポイントとマネジメントエンドポイントが提供されます。
本書では、マネジメントエンドポイントに別のHTTPサーバー(別のネットワークインターフェースとポートにバインド)を使用する方法について説明します。これにより、メインサーバー上でこれらのエンドポイントを公開することを避け、望ましくないアクセスを防止することができます。
1. マネジメントインターフェイスの有効化
マネジメントインタフェースを有効にするには、次の ビルド時 プロパティを使用します:
quarkus.management.enabled=true
デフォルトでは、管理エンドポイントは http://0.0.0.0:9000/q
で公開されます。例えば、 smallrye-health
をインストールしている場合、readiness probe は http://0.0.0.0:9000/q/health/ready
で公開されます。
SmallRye Health Checks、SmallRye Metrics、Micrometer、Infoの各エンドポイントは、マネジメントインタフェースを有効にすると、マネジメントエンドポイントとして宣言されます。
管理インターフェースに依存するエクステンション(SmallRye HealthやSmallRye OpenAPIエクステンションなど)がインストールされていない場合、管理インターフェースは無効になります。 |
2. ホスト、ポート、スキームの設定
デフォルトでは、マネジメントインタフェースはインターフェース: 0.0.0.0
(すべてのインターフェース)およびポート: 9000
(テストモードでは 9001
)で公開されます。また、デフォルトではTLS( https
)を使用しません。
ホスト、ポート、TLS証明書は、以下のプロパティを使用して設定できます:
-
quarkus.management.host
- インターフェース/ホスト -
quarkus.management.port
- ポート -
quarkus.management.test-port
- テストモードで使用するポート -
quarkus.management.ssl
- メインのHTTPサーバーと同様 の、TLSの設定
ここでは、https://localhost:9002 で、マネジメントインタフェースを公開する設定例を示します:
quarkus.management.enabled=true
quarkus.management.host=localhost
quarkus.management.port=9002
quarkus.management.ssl.certificate.key-store-file=server-keystore.jks
quarkus.management.ssl.certificate.key-store-password=secret
キーストア、トラスト・ストア、および証明書ファイルは、定期的にリロードできます。
quarkus.management.ssl.certificate.reload-period
プロパティを設定して、証明書をリロードする間隔を指定します:
quarkus.http.management.certificate.files=/mount/certs/tls.crt
quarkus.http.management.certificate.key-files=/mount/certs/tls.key
quarkus.http.management.certificate.reload-period=1h
ファイルは最初に読み込まれたのと同じ場所から再読み込みされます。 内容に変更がない場合、リロードは失敗します。 リロードに失敗した場合、サーバは以前の証明書を使い続けます。
メインのHTTPサーバーとは異なり、マネジメントインタフェースは http_と _https を同時に扱うことはありません。 https が設定されている場合、プレーンのHTTPリクエストは拒否されます。 |
3. ルートパスの設定
マネジメントエンドポイントは、標準的なHTTPエンドポイントとは異なる設定になっています。ユニークなルートパスを使用し、デフォルトでは /q
になっています。このマネジメントルートパスは、 quarkus.management.root-path property
を使用して設定することができます。例えば、マネジメントエンドポイントを /management
の下に公開したい場合、 次を使用します:
quarkus.management.enabled=true
quarkus.management.root-path=/management
マネジメントエンドポイントのマウントルールは、メインのHTTPサーバーを使用する場合と若干異なります:
-
相対 パス(
/
で始まらない)を使用して設定されたマネジメントエンドポイントは、設定されたルートパスから提供されます。例えば、エンドポイントのパスがhealth
で、ルートパスがmanagement
の場合、結果として以下のようなパスになります。/management/health
-
絶対 パス(
/
で始まる)を使用して構成されたマネジメントエンドポイントは、ルートから提供されます。例えば、エンドポイントのパスが/health
の場合、ルートパスに関係なく、結果として/health
になります。 -
マネジメントインタフェースは、メインHTTPサーバーからのHTTPルートパスを使用しません。
|
4. エクステンションでのマネジメントエンドポイントの作成
アプリケーションのコードからマネジメントインタフェースのエンドポイントを公開するには、 アプリケーションのセクション を参照してください。 |
SmallRye Health Checks、SmallRye Metrics、およびMicrometerの各エンドポイントは、マネジメントインタフェースが有効化されると、マネジメントエンドポイントとして宣言されます。
マネジメントインタフェースを有効にしない場合、これらのエンドポイントは、メインのHTTPサーバー(デフォルトでは /q 以下)を使用して提供されます。
|
エクステンションは、 アプリケーション以外の ルートを定義し、 management()
メソッドを呼び出すことで、マネジメントエンドポイントを作成できます:
@BuildStep
void createManagementRoute(BuildProducer<RouteBuildItem> routes,
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
MyRecorder recorder) {
routes.produce(nonApplicationRootPathBuildItem.routeBuilder()
.management() // Must be called BEFORE the routeFunction method
.routeFunction("my-path", recorder.route())
.handler(recorder.getHandler())
.blockingRoute()
.build());
//...
}
マネジメントインタフェースが有効な場合、エンドポイントは http://0.0.0.0:9000/q/my-path
で公開されます: 無効の場合は、 http://localhost:8080/q/my-path
で公開されます。
マネジメントエンドポイントは、エクステンションによってのみ宣言でき、アプリケーションコードからは宣言できません。 |
5. (アプリケーションとして)マネジメントインタフェース上でエンドポイントを公開
マネジメントルーターにルートを登録することで、マネジメントインタフェースにエンドポイントを公開することができます。ルーターにアクセスするには、次のコードを使用します:
public void registerManagementRoutes(@Observes ManagementInterface mi) {
mi.router().get("/admin").handler(rc ->
rc.response().end("admin it is")
);
}
io.quarkus.vertx.http.ManagementInterface
イベントは、マネジメントインタフェースが初期化されたときに発生します。そのため、マネジメントインタフェースが有効になっていない場合は、このメソッドは呼び出されません。
router()
メソッドは、ルートの登録に使用できる io.vertx.ext.web.Router
オブジェクトを返します。ルートは、 /
からの相対パスです。たとえば、前の例では、 /admin
にルートを登録しています。デフォルトのホストとポートを使用する場合、このルートは http://0.0.0.0:9000/admin
でアクセス可能です。
Router
APIの詳細は、 Vert.x Webドキュメント に記載されています。
6. マネジメントインターフェイスの設定
ビルド時に固定される構成プロパティ - 他のすべての構成プロパティは実行時にオーバーライド可能
Configuration property |
タイプ |
デフォルト |
||
---|---|---|---|---|
Enables / Disables the usage of a separate interface/port to expose the management endpoints. If sets to Environment variable: Show more |
ブーリアン |
|
||
If basic auth should be enabled. Environment variable: Show more |
ブーリアン |
|||
If this is true and credentials are present then a user will always be authenticated before the request progresses. If this is false then an attempt will only be made to authenticate the user if a permission check is performed or the current user is required for some other reason. Environment variable: Show more |
ブーリアン |
|
||
Configures the engine to require/request client authentication. NONE, REQUEST, REQUIRED Environment variable: Show more |
|
|
||
A common root path for management endpoints. Various extension-provided management endpoints such as metrics and health are deployed under this path by default. Environment variable: Show more |
string |
|
||
If responses should be compressed. Note that this will attempt to compress all responses, to avoid compressing already compressed content (such as images) you need to set the following header: Content-Encoding: identity Which will tell vert.x not to compress the response. Environment variable: Show more |
ブーリアン |
|
||
When enabled, vert.x will decompress the request’s body if it’s compressed. Note that the compression format (e.g., gzip) must be specified in the Content-Encoding header in the request. Environment variable: Show more |
ブーリアン |
|
||
The compression level used when compression support is enabled. Environment variable: Show more |
int |
|||
Map the For example, if Environment variable: Show more |
Map<String,List<String>> |
|||
int |
|
|||
The HTTP port Environment variable: Show more |
int |
|
||
The HTTP host Defaults to 0.0.0.0 Defaulting to 0.0.0.0 makes it easier to deploy Quarkus to container, however it is not suitable for dev/test mode as other people on the network can connect to your development machine. Environment variable: Show more |
string |
|||
Enable listening to host:port Environment variable: Show more |
ブーリアン |
|
||
The Please note that using MicroProfile Environment variable: Show more |
string |
|||
The credentials provider bean name. This is a bean name (as in For Vault, the credentials provider bean name is Environment variable: Show more |
string |
|||
The list of path to server certificates using the PEM format. Specifying multiple files requires SNI to be enabled. Environment variable: Show more |
list of path |
|||
The list of path to server certificates private key files using the PEM format. Specifying multiple files requires SNI to be enabled. The order of the key files must match the order of the certificates. Environment variable: Show more |
list of path |
|||
An optional keystore that holds the certificate information instead of specifying separate files. Environment variable: Show more |
path |
|||
An optional parameter to specify the type of the keystore file. If not given, the type is automatically detected based on the file name. Environment variable: Show more |
string |
|||
An optional parameter to specify a provider of the keystore file. If not given, the provider is automatically detected based on the keystore file type. Environment variable: Show more |
string |
|||
A parameter to specify the password of the keystore file. If not given, and if it can not be retrieved from Environment variable: Show more |
string |
|
||
A parameter to specify a Environment variable: Show more |
string |
|||
An optional parameter to select a specific key in the keystore. When SNI is disabled, and the keystore contains multiple keys and no alias is specified; the behavior is undefined. Environment variable: Show more |
string |
|||
An optional parameter to define the password for the key, in case it is different from Environment variable: Show more |
string |
|||
A parameter to specify a Environment variable: Show more |
string |
|||
An optional trust store that holds the certificate information of the trusted certificates. Environment variable: Show more |
path |
|||
An optional list of trusted certificates using the PEM format. If you pass multiple files, you must use the PEM format. Environment variable: Show more |
list of path |
|||
An optional parameter to specify the type of the trust store file. If not given, the type is automatically detected based on the file name. Environment variable: Show more |
string |
|||
An optional parameter to specify a provider of the trust store file. If not given, the provider is automatically detected based on the trust store file type. Environment variable: Show more |
string |
|||
A parameter to specify the password of the trust store file. If not given, it might be retrieved from Environment variable: Show more |
string |
|||
A parameter to specify a Environment variable: Show more |
string |
|||
An optional parameter to trust a single certificate from the trust store rather than trusting all certificates in the store. Environment variable: Show more |
string |
|||
When set, the configured certificate will be reloaded after the given period. Note that the certificate will be reloaded only if the file has been modified. Also, the update can also occur when the TLS certificate is configured using paths (and not in-memory). The reload period must be equal or greater than 30 seconds. If not set, the certificate will not be reloaded.
Environment variable: Show more |
||||
The cipher suites to use. If none is given, a reasonable default is selected. Environment variable: Show more |
list of string |
|||
Sets the ordered list of enabled SSL/TLS protocols. If not set, it defaults to Note that setting an empty list, and enabling SSL/TLS is invalid. You must at least have one protocol. Environment variable: Show more |
list of string |
|
||
Enables Server Name Indication (SNI), an TLS extension allowing the server to use multiple certificates. The client indicate the server name during the TLS handshake, allowing the server to select the right certificate. Environment variable: Show more |
ブーリアン |
|
||
The name of the TLS configuration to use. If not set and the default TLS configuration is configured ( If no TLS configuration is set, and Environment variable: Show more |
string |
|||
When set to Environment variable: Show more |
ブーリアン |
|
||
The maximum length of all headers. Environment variable: Show more |
|
|||
The maximum size of a request body. Environment variable: Show more |
|
|||
The max HTTP chunk size Environment variable: Show more |
|
|||
The maximum length of the initial line (e.g. Environment variable: Show more |
int |
|
||
The maximum length of a form attribute. Environment variable: Show more |
|
|||
Set the maximum number of fields of a form. Set to Environment variable: Show more |
int |
|
||
Set the maximum number of bytes a server can buffer when decoding a form. Set to Environment variable: Show more |
|
|||
The maximum number of HTTP request parameters permitted for incoming requests. If a client sends more than this number of parameters in a request, the connection is closed. Environment variable: Show more |
int |
|
||
The maximum number of connections that are allowed at any one time. If this is set it is recommended to set a short idle timeout. Environment variable: Show more |
int |
|||
Set the SETTINGS_HEADER_TABLE_SIZE HTTP/2 setting. Allows the sender to inform the remote endpoint of the maximum size of the header compression table used to decode header blocks, in octets. The encoder can select any size equal to or less than this value by using signaling specific to the header compression format inside a header block. The initial value is Environment variable: Show more |
長 |
|||
Set SETTINGS_MAX_CONCURRENT_STREAMS HTTP/2 setting. Indicates the maximum number of concurrent streams that the sender will allow. This limit is directional: it applies to the number of streams that the sender permits the receiver to create. Initially, there is no limit to this value. It is recommended that this value be no smaller than 100, to not unnecessarily limit parallelism. Environment variable: Show more |
長 |
|||
Set the SETTINGS_MAX_FRAME_SIZE HTTP/2 setting. Indicates the size of the largest frame payload that the sender is willing to receive, in octets. The initial value is Environment variable: Show more |
int |
|||
Set the SETTINGS_MAX_HEADER_LIST_SIZE HTTP/2 setting. This advisory setting informs a peer of the maximum size of header list that the sender is prepared to accept, in octets. The value is based on the uncompressed size of header fields, including the length of the name and value in octets plus an overhead of 32 octets for each header field. The default value is Environment variable: Show more |
長 |
|||
Set the max number of RST frame allowed per time window, this is used to prevent HTTP/2 RST frame flood DDOS attacks. The default value is Environment variable: Show more |
int |
|||
Set the duration of the time window when checking the max number of RST frames, this is used to prevent HTTP/2 RST frame flood DDOS attacks.. The default value is Environment variable: Show more |
||||
Http connection idle timeout Environment variable: Show more |
|
|||
Whether the files sent using If Environment variable: Show more |
ブーリアン |
|
||
The directory where the files sent using Either an absolute path or a path relative to the current directory of the application process. Environment variable: Show more |
string |
|
||
Whether the form attributes should be added to the request parameters. If Environment variable: Show more |
ブーリアン |
|
||
Whether the uploaded files should be removed after serving the request. If Environment variable: Show more |
ブーリアン |
|
||
Whether the body buffer should pre-allocated based on the If Environment variable: Show more |
ブーリアン |
|
||
A comma-separated list of Environment variable: Show more |
list of string |
|||
The accept backlog, this is how many connections can be waiting to be accepted before connections start being rejected Environment variable: Show more |
int |
|
||
Path to a unix domain socket Environment variable: Show more |
string |
|
||
Enable listening to host:port Environment variable: Show more |
ブーリアン |
|
||
Set whether the server should use the HA Environment variable: Show more |
ブーリアン |
|
||
If this is true then the address, scheme etc. will be set from headers forwarded by the proxy server, such as Environment variable: Show more |
ブーリアン |
|
||
If this is true and proxy address forwarding is enabled then the standard Environment variable: Show more |
ブーリアン |
|
||
If either this or Environment variable: Show more |
ブーリアン |
|||
Enable override the received request’s host through a forwarded host header. Environment variable: Show more |
ブーリアン |
|
||
Configure the forwarded host header to be used if override enabled. Environment variable: Show more |
string |
|
||
Enable prefix the received request’s path with a forwarded prefix header. Environment variable: Show more |
ブーリアン |
|
||
Configure the forwarded prefix header to be used if prefixing enabled. Environment variable: Show more |
string |
|
||
Adds the header The forwarded parser detects forgery attempts and if the incoming request contains this header, it will be removed from the request. The Environment variable: Show more |
ブーリアン |
|
||
Configure the list of trusted proxy addresses. Received Examples of a socket address in the form of
Examples of a CIDR notation:
Please bear in mind that IPv4 CIDR won’t match request sent from the IPv6 address and the other way around. Environment variable: Show more |
list of TrustedProxyCheckPart |
|
||
Determines whether the entire permission set is enabled, or not. By default, if the permission set is defined, it is enabled. Environment variable: Show more |
ブーリアン |
|||
The HTTP policy that this permission set is linked to. There are three built-in policies: permit, deny and authenticated. Role based policies can be defined, and extensions can add their own policies. Environment variable: Show more |
string |
required |
||
The methods that this permission set applies to. If this is not set then they apply to all methods. Note that if a request matches any path from any permission set, but does not match the constraint due to the method not being listed then the request will be denied. Method specific permissions take precedence over matches that do not have any methods set. This means that for example if Quarkus is configured to allow GET and POST requests to /admin to and no other permissions are configured PUT requests to /admin will be denied. Environment variable: Show more |
list of string |
|||
The paths that this permission check applies to. If the path ends in /* then this is treated as a path prefix, otherwise it is treated as an exact match. Matches are done on a length basis, so the most specific path match takes precedence. If multiple permission sets match the same path then explicit methods matches take precedence over matches without methods set, otherwise the most restrictive permissions are applied. Environment variable: Show more |
list of string |
|||
Path specific authentication mechanism which must be used to authenticate a user. It needs to match Environment variable: Show more |
string |
|||
Indicates that this policy always applies to the matched paths in addition to the policy with a winning path. Avoid creating more than one shared policy to minimize the performance impact. Environment variable: Show more |
ブーリアン |
|
||
Whether permission check should be applied on all matching paths, or paths specific for the Jakarta REST resources. Environment variable: Show more |
|
|
||
The roles that are allowed to access resources protected by this policy. By default, access is allowed to any authenticated user. Environment variable: Show more |
list of string |
|
||
Add roles granted to the Environment variable: Show more |
Map<String,List<String>> |
|||
Permissions granted to the Environment variable: Show more |
Map<String,List<String>> |
|||
Permissions granted by this policy will be created with a Environment variable: Show more |
string |
|
||
The path this header should be applied Environment variable: Show more |
string |
|
||
The value for this header configuration Environment variable: Show more |
string |
required |
||
The HTTP methods for this header configuration Environment variable: Show more |
list of string |
|||
A regular expression for the paths matching this configuration Environment variable: Show more |
string |
required |
||
Additional HTTP Headers always sent in the response Environment variable: Show more |
Map<String,String> |
|||
The HTTP methods for this path configuration Environment variable: Show more |
list of string |
|||
Order in which this path config is applied. Higher priority takes precedence Environment variable: Show more |
int |
期間フォーマットについて
To write duration values, use the standard 数字で始まる簡略化した書式を使うこともできます:
その他の場合は、簡略化されたフォーマットが解析のために
|
About the MemorySize format
A size configuration option recognizes strings in this format (shown as a regular expression): If no suffix is given, assume bytes. |
7. リバースプロキシーの背後での実行
Quarkusは、ヘッダーを生成するプロキシ(例: X-Forwarded-Host
)を通じてアクセスすることで、元のリクエストに関する情報を保持することができます。Quarkusは、これらのヘッダーの値を使用して、プロトコル、ホスト、ポート、URIなどの情報を自動的に更新するように設定できます。
この機能を有効にすると、サーバーが情報詐称などのセキュリティ上の問題にさらされる可能性があります。リバースプロキシーの後ろで実行する場合のみ有効にしてください。 |
マネジメントインタフェースにこの機能を設定するには、 src/main/resources/application.properties
に次の設定を記述します:
quarkus.management.proxy.proxy-address-forwarding=true
quarkus.management.proxy.allow-forwarded
を src/main/resources/application.properties
で設定することで、この動作を標準の Forwarded
ヘッダーに限定する( X-Forwarded
のバリアントを無視する)ことができます:
quarkus.management.proxy.allow-forwarded=true
あるいは、 src/main/resources/application.properties
で以下の設定をすることにより( allow-forwarded
の代わりに allow-x-forwarded
であることに注意)、 X-Forwarded-*
ヘッダーを優先することもできます:
quarkus.management.proxy.proxy-address-forwarding=true
quarkus.management.proxy.allow-x-forwarded=true
quarkus.management.proxy.enable-forwarded-host=true
quarkus.management.proxy.enable-forwarded-prefix=true
サポートされている転送アドレスヘッダーは以下の通りです。
-
Forwarded
-
X-Forwarded-Proto
-
X-Forwarded-Host
-
X-Forwarded-Port
-
X-Forwarded-Ssl
-
X-Forwarded-Prefix
ヘッダーの種類( Forwarded
と X-Forwarded-*
)の両方が有効な場合、 Forwarded
のヘッダーが優先されます。
Forwarded と X-Forwarded の両方のヘッダーを使用すると、クライアントがプロキシによって上書きされないヘッダーでリクエストを偽造することができるため、セキュリティ上問題があります。
|
クライアントリクエストから予期しない Forwarded
または X-Forwarded-*
ヘッダーを取り除くようにプロキシが設定されているようにして下さい。
8. Kubernetes
QuarkusはKubernetesのメタデータを生成する際に、マネジメントインタフェースが有効かどうかをチェックし、それに応じてプローブを設定します。結果の記述子は、メインのHTTPポート(名前: http
)とマネジメントポート(名前: management
)を定義しています。Health プローブ(HTTPアクションを使用)とPrometheusスクレイプURLは、 management
ポートを使用して設定されます。
KNative
KNative#8471 が解決されるまで、KNativeはコンテナが複数のポートを公開することをサポートしていないため、マネジメントインタフェースを使用することはできません。 |
9. セキュリティ
Basic 認証は、以下のプロパティを使用して有効にすることができます:
quarkus.management.enabled=true
# Enable basic authentication
quarkus.management.auth.basic=true
# Require all access to /q/* to be authenticated
quarkus.management.auth.permission.all.policy=authenticated
quarkus.management.auth.permission.all.paths=/q/*
また、パスごとに異なる権限を使用したり、ロールバインディングを使用したりすることも可能です:
quarkus.management.enabled=true
# Enable basic authentication
quarkus.management.auth.basic=true
# Configure a management policy if needed, here the policy `management-policy` requires users to have the role `management`.
quarkus.management.auth.policy.management-policy.roles-allowed=management
# For each endpoint you can configure the permissions
# Health used the management-policy (so requires authentication + the `management` role)
quarkus.management.auth.permission.health.paths=/q/health/*
quarkus.management.auth.permission.health.policy=management-policy
# Metrics just requires authentication
quarkus.management.auth.permission.metrics.paths=/q/metrics/*
quarkus.management.auth.permission.metrics.policy=authenticated
QuarkusのBasic認証の詳細は、 Basic認証ガイド に記載されています。
10. Injecting management URL in tests
When testing your application, you can inject the management URL using the @TestHTTPResource
annotation:
@TestHTTPResource(value="/management", management=true)
URL management;
The management
attribute is set to true
to indicate that the injected URL is for the management interface.
The context-root
is automatically added.
Thus, in the previous example, the injected URL is http://localhost:9001/q/management
.
@TestHTTPResource
is particularly useful when setting the management test-port
to 0, which indicates that the system will assign a random port to the management interface:
----]
quarkus.management.test-port=0
----