3.2. MicroShift での Ingress 制御の設定
MicroShift サービス設定ファイルを更新することで、詳細な Ingress 制御の設定を使用できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - クラスターへの root アクセス権限がある。
- クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
手順
次のどちらかの方法で Ingress 制御の設定を適用します。
/etc/microshift/
ディレクトリーにあるconfig.yaml.default
ファイルのコピーを作成し、config.yaml
という名前を付けてソースディレクトリーに保存することで、MicroShiftconfig.yaml
設定ファイルを更新します。-
これを作成すると、
config.yaml
ファイルは組み込み設定よりも優先されます。設定ファイルは、MicroShift サービスが起動するたびに読み取られます。
-
これを作成すると、
設定スニペットを使用して、必要な Ingress 制御の設定を適用します。これを行うには、設定スニペット YAML ファイルを作成し、そのファイルを
/etc/microshift/config.d/
設定ディレクトリーに配置します。-
設定スニペット YAML は、組み込みの設定と
config.yaml
設定ファイルよりも優先されます。詳細は、「関連情報」のリンクを参照してください。
-
設定スニペット YAML は、組み込みの設定と
MicroShift YAML の
network
セクションのデフォルト値を有効な値に置き換えるか、必要なセクションを含む設定スニペットファイルを作成します。デフォルト値を含む Ingress コントローラー設定フィールド
apiServer: # ... ingress: defaultHTTPVersion: 1 forwardedHeaderPolicy: Append httpCompression: mimeTypes: - "" httpEmptyRequestsPolicy: Respond # ... logEmptyRequests: Log # ... tuningOptions: clientFinTimeout: 1s clientTimeout: 30s headerBufferBytes: 0 headerBufferMaxRewriteBytes: 0 healthCheckInterval: 5s maxConnections: 0 serverFinTimeout: 1s serverTimeout: 30s threadCount: 4 tlsInspectDelay: 5s tunnelTimeout: 1h # ...
表3.1 Ingress コントローラー設定フィールドの定義表 パラメーター 説明 defaultHTTPVersion
Ingress コントローラーの HTTP バージョンを設定します。HTTP 1.1 の場合、デフォルト値は
1
です。forwardedHeaderPolicy
Ingress コントローラーが
Forwarded
、X-Forwarded-For
、X-Forwarded-Host
、X-Forwarded-Port
、X-Forwarded-Proto
、およびX-Forwarded-Proto-Version
HTTP ヘッダーを設定するタイミングと方法を指定します。次の値が有効です。-
Append
は、Ingress コントローラーによって既存のヘッダーを追加するように指定して、既存のヘッダーを保持します。 -
Replace
は、Ingress コントローラーによってヘッダーを設定するように指定して、既存のヘッダーを削除します。 -
IfNone
は、ヘッダーがまだ設定されていない場合に Ingress コントローラーによってヘッダーを設定するように指定して、ヘッダーセットを設定します。 -
Never
は、Ingress コントローラーによってヘッダーを設定しないように指定して、既存のヘッダーを保持します。
httpCompression
HTTP トラフィック圧縮のポリシーを定義します。
-
httpCompression.mimeTypes
は、圧縮を適用する MIME タイプのリストまたは 1 つの MIME タイプを定義します。(例:text/css; charset=utf-8
,text/html
,text/*
,image/svg+xml
,application/octet-stream
,X-custom/customsub
, using the format pattern,type/subtype; [;attribute=value]
)types
は、アプリケーション、イメージ、メッセージ、マルチパート、テキスト、ビデオ、または先頭にX-
が付いたカスタムタイプです。MIME タイプとサブタイプの完全な表記は、RFC1341 (IETF Datatracker ドキュメント) を参照してください。
httpEmptyRequestsPolicy
リクエストを受信する前に接続がタイムアウトした場合に HTTP 接続をどのように処理するかを指定します。このフィールドに使用できる値は
Respond
およびIgnore
です。デフォルト値はRespond
です。有効な値は次のとおりです。-
Respond
を指定すると、Ingress コントローラーが HTTP400
または408
レスポンスを送信し、接続をログに記録し (アクセスログが有効な場合)、適切なメトリクスで接続をカウントします。 -
Ignore
を指定すると、HAproxy
設定にhttp-ignore-probes
パラメーターが追加されます。このフィールドがIgnore
に設定されている場合、Ingress コントローラーはレスポンスを送信せず、接続をログに記録せず、メトリクスの値を増やさずに接続を閉じます。
通常、空のリクエスト接続は、ロードバランサーのヘルスプローブや Web ブラウザーの事前接続から発生するため、無視しても問題ありません。しかし、このような空のリクエストは、ネットワークエラーやポートスキャンによっても作成されることがあります。そのため、このフィールドを
Ignore
に設定すると、問題の検出や診断だけでなく、侵入の試みの検出も妨げられる可能性があります。logEmptyRequests
リクエストを受信せず、ログに記録しない接続を指定します。通常、このような空のリクエストは、ロードバランサーのヘルスプローブや Web ブラウザーの投機的な接続 (事前接続など) から発生します。このような種類の空のリクエストをログに記録することは、望ましくない場合もあります。しかし、空のリクエストは、ネットワークエラーやポートスキャンによっても作成されることがあります。そのため、このフィールドを
Ignore
に設定すると、問題の検出や診断だけでなく、侵入の試みの検出も妨げられる可能性があります。有効な値は次のとおりです。
-
Log
: イベントをログに記録することを指定します。 -
Ignore
:HAproxy
設定でdontlognull
オプションが設定されます。
tuningOptions
Ingress コントローラー Pod のパフォーマンスをチューニングするためのオプションを指定します。
-
tuningOptions.clientFinTimeout
パラメーターは、接続を閉じているサーバーへのクライアントレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは1s
です。 -
tuningOptions.clientTimeout
パラメーターは、クライアントのレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは30s
です。 tuningOptions.headerBufferBytes
パラメーターは、Ingress Controller 接続セッション用に予約するメモリーの量をバイト単位で指定します。Ingress Controller で HTTP / 2 が有効になっている場合、この値は少なくとも16384
である必要があります。設定されていない場合、デフォルト値は32768
バイトになります。重要このフィールドを設定することは推奨しません。
headerBufferMaxRewriteBytes
パラメーター値が小さすぎると、Ingress コントローラーが壊れる可能性があるためです。逆に、headerBufferMaxRewriteBytes
の値が大きすぎると、Ingress コントローラーが必要以上に多くのメモリーを使用する可能性があります。-
tuningOptions.headerBufferMaxRewriteBytes
パラメーターは、Ingress Controller 接続セッションの HTTP ヘッダーの書き換えと追加のために、headerBufferBytes
から予約するメモリーの量をバイト単位で指定します。headerBufferMaxRewriteBytes
の最小値は4096
です。受信 HTTP リクエストのheaderBufferBytes
値は、headerBufferMaxRewriteBytes
値よりも大きくする必要があります。 設定されていない場合、デフォルト値は
8192
バイトになります。重要このフィールドを設定することは推奨しません。
headerBufferMaxRewriteBytes
パラメーター値が小さすぎると、Ingress コントローラーが壊れる可能性があるためです。逆に、headerBufferMaxRewriteBytes
の値が大きすぎると、Ingress コントローラーが必要以上に多くのメモリーを使用する可能性があります。-
tuningOptions.healthCheckInterval
パラメーターは、ルーターがヘルスチェックの間隔として待機する時間を指定します。デフォルトは5s
です。 -
tuningOptions.serverFinTimeout
パラメーターは、接続を閉じているクライアントへのサーバーレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは1s
です。 -
tuningOptions.serverTimeout
パラメーターは、サーバーのレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは30s
です。 tuningOptions.threadCount
パラメーターは、HAProxy プロセスごとに作成するスレッドの数を指定します。より多くのスレッドを作成すると、使用されるシステムリソースを増やすことで、各 Ingress コントローラー Pod がより多くの接続を処理できるようになります。HAProxy
は最大64
スレッドをサポートしています。このフィールドが空の場合、デフォルト値の4
スレッドが使用されます。重要このフィールドを設定することは推奨しません。
HAProxy
スレッドの数を増やすと、Ingress コントローラー Pod がより多くの CPU 時間を負荷発生時に使用できるようになり、他の Pod が実行に必要な CPU リソースを受け取れなくなるためです。-
tuningOptions.tlsInspectDelay
パラメーターは、一致するルートを検出するためにルーターがデータを保持できる時間を指定します。この設定値が短すぎると、より適合性の高い証明書を使用している場合でも、ルーターがエッジ終端ルート、再暗号化ルート、またはパススルールート用のデフォルト証明書にフォールバックする可能性があります。デフォルトの検査遅延は5s
です。 -
tuningOptions.tunnelTimeout
パラメーターは、トンネルがアイドル状態の間、WebSocket を含むトンネル接続を開いたままにする時間を指定します。デフォルトのタイムアウトは1h
です。
-
その他の必要な設定を完了したら、次のいずれかのコマンドを実行して MicroShift を起動または再起動します。
$ sudo systemctl start microshift
$ sudo systemctl restart microshift
検証
Ingress 設定の変更を行い、MicroShift を再起動した後、ルーター Pod の経過時間をチェックして、変更が適用されたことを確認できます。
ルーター Pod のステータスを確認するには、次のコマンドを実行します。
$ oc get pods -n openshift-ingress
出力例
NAME READY STATUS RESTARTS AGE router-default-8649b5bf65-w29cn 1/1 Running 0 6m10s