3.2. MicroShift での Ingress 制御の設定
MicroShift サービス設定ファイルを更新するか、設定スニペットを使用することで、詳細な Ingress 制御の設定を使用できます。
-
config.yaml
設定ファイルは、組み込み設定よりも優先されます。config.yaml
ファイルは、MicroShift サービスが起動するたびに読み取られます。 -
設定スニペット YAML は、組み込みの設定と
config.yaml
設定ファイルよりも優先されます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - クラスターへの root アクセス権限がある。
- クラスターが OVN-Kubernetes Container Network Interface (CNI) プラグインを使用している。
手順
次のどちらかの方法で Ingress 制御の設定を適用します。
-
/etc/microshift/
ディレクトリーにあるconfig.yaml.default
ファイルのコピーを作成し、config.yaml
という名前を付けてソースディレクトリーに保存することで、MicroShiftconfig.yaml
設定ファイルを更新します。 -
設定スニペットを使用して、必要な Ingress 制御の設定を適用します。これを行うには、設定スニペット YAML ファイルを作成し、そのファイルを
/etc/microshift/config.d/
設定ディレクトリーに配置します。
-
MicroShift YAML の
ingress
セクションのデフォルト値を有効な値に置き換えるか、必要なセクションを含む設定スニペットファイルを作成します。デフォルト値を含む Ingress コントローラー設定フィールド
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表3.1 Ingress コントローラー設定フィールドの定義表 パラメーター 説明 ingress
MicroShift
config.yaml
ファイルのingress
セクションでは、OpenShift Container Platform Ingress Control Operator の実装部分の設定可能なパラメーターを定義します。この表の残りのすべてのパラメーターは、config.yaml
のingress
セクションのサブセクションです。certificateSecret
MicroShift Ingress コントローラーによって提供されるデフォルトの証明書を含む
kubernetes.io/tls
タイプのシークレットへの参照。ルートが独自の証明書を指定しない場合は、certificateSecret
パラメーターが使用されます。使用されるすべてのシークレットには、tls.key
キーファイルの内容とtls.crt
証明書ファイルの内容が含まれている必要があります。-
certificateSecret
パラメーターが設定されていない場合は、ワイルドカード証明書が自動的に生成され、使用されます。ワイルドカード証明書は、Ingress コントローラーのデフォルトdomain
とそのsubdomains
に対して有効です。生成された認証局 (CA) は、クラスターのトラストストアと自動的に統合されます。 - 使用中の生成された証明書とユーザー指定の証明書は、MicroShift に組み込まれた OAuth サーバーと自動的に統合されます。
clientTLS
クラスターおよびサービスへのクライアントアクセスを認証します。その結果、相互 TLS 認証が有効になります。設定されていない場合、クライアント TLS は有効になっていません。クライアント TLS を使用するには、
spec.clientTLS.clientCertificatePolicy
およびspec.clientTLS.ClientCA
パラメーターを設定する必要があります。clientTLS.AllowedSubjectPatterns
要求をフィルタリングするために、有効なクライアント証明書の識別名と照合される正規表現のリストを指定するオプションのサブフィールド。このパラメーターを使用すると、Ingress コントローラーは識別名に基づいて証明書を拒否します。Perl Compatible Regular Expressions (PCRE) 構文が必要です。
重要設定された場合、このフィールドには有効な式が含まれている必要があります。含まれていない場合、MicroShift サービスは失敗します。1 つ以上のパターンがクライアント証明書の識別名と一致している必要があります。一致しない場合、Ingress コントローラーは証明書を拒否し、接続を拒否します。
clientTLS.clientCA
openshift-ingress
namespace 内の必須の config map を指定します。クライアント TLS を有効にするために必要です。config map には、ca-bundle.pem
という名前の認証局 (CA) バンドルが含まれている必要があります。含まれていない場合、デフォルトルーターのデプロイメントは失敗します。clientTLS.ClientCA.name
clientTLS.ClientCA
値で参照される config map のmetadata.name
。clientTLS.ClientCertificatePolicy
有効な値は
Required
またはOptional
です。クライアント TLS を有効にするには、Required
に設定します。Ingress コントローラーは、エッジで終了および再暗号化された TLS ルートのクライアント証明書のみをチェックします。Ingress コントローラーは、プレーンテキスト HTTP またはパススルー TLS ルートの証明書をチェックできません。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 コントローラーが既存のヘッダーに追加することを指定することで、それらのヘッダーを保持します。'Append` はデフォルト値です。 -
Replace
は、Ingress コントローラーによってヘッダーを設定するように指定して、既存のヘッダーを削除します。 -
IfNone
は、ヘッダーがまだ設定されていない場合に Ingress コントローラーがヘッダーを設定することを指定します。 -
Never
は、Ingress コントローラーによってヘッダーを設定しないように指定して、既存のヘッダーを保持します。
httpCompression
HTTP トラフィック圧縮のポリシーを定義します。
httpCompression.mimeTypes
圧縮を適用する必要がある MIME タイプのリストを定義します。
-
たとえば、
text/css; charset=utf-8
、text/html
、text/*
、image/svg+xml
、application/octet-stream
、X-custom/customsub
のように、type/subtype; [;attribute=value]
という形式で指定します。 -
有効な
types
は、application、image、message、multipart、text、video、またはX-
で始まるカスタムタイプです。MIME タイプとサブタイプの完全な表記は、RFC1341 (IETF Datatracker ドキュメント) を参照してください。
httpEmptyRequestsPolicy
リクエストを受信する前に接続がタイムアウトした場合に HTTP 接続をどのように処理するかを指定します。このフィールドに使用できる値は
Respond
およびIgnore
です。デフォルト値はRespond
です。空の要求は通常、ロードバランサーの正常性プローブまたは事前接続から送信されるもので、多くの場合、無視しても問題ありません。ただし、これらの要求はネットワークエラーやポートスキャンによっても発生する可能性もあります。したがって、このフィールドをIgnore
に設定すると、ネットワークの問題の検出や診断および侵入の試みの検出が妨げられる可能性があります。-
このポリシーが
Respond
に設定されている場合、Ingress コントローラーが HTTP400
または408
レスポンスを送信し、接続をログに記録し (アクセスログが有効な場合)、適切なメトリクスで接続をカウントします。 -
ポリシーを
Ignore
に設定すると、http-ignore-probes
パラメーターがHAproxy
プロセス設定に追加されます。このパラメーターが追加されると、Ingress コントローラーはレスポンスを送信せずに接続を閉じ、その後、接続をログに記録するか、メトリクスを増分します。
logEmptyRequests
リクエストを受信せず、ログに記録しない接続を指定します。有効な値は
Log
とIgnore
です。空の要求は通常、ロードバランサーの正常性プローブまたは事前接続から送信されるもので、多くの場合、無視しても問題ありません。ただし、これらの要求はネットワークエラーやポートスキャンによっても発生する可能性もあります。したがって、このフィールドをIgnore
に設定すると、ネットワークの問題の検出や診断および侵入の試みの検出が妨げられる可能性があります。デフォルト値はLog
です。-
この値を
Log
に設定すると、イベントがログに記録される必要があることを示します。 -
この値を
Ignore
に設定すると、HAproxy
設定のdontlognull
オプションを設定します。
ports
デフォルトのルーターポートを定義します。
ports.http
デフォルトのルーター http ポート。1-65535 の範囲で指定する必要があります。デフォルト値は
80
です。ports.https
デフォルトのルーター https ポート。1-65535 の範囲で指定する必要があります。デフォルト値は
443
です。routeAdmission
namespace 全体にわたるクレームの許可または拒否など、新しいルート要求を処理するためのポリシーを定義します。
routeAdmission.namespaceOwnership
namespace 全体にわたるホスト名要求の処理方法を記述します。デフォルトは
InterNamespaceAllowed
です。有効な値は次のとおりです。-
Strict
: ルートが複数の namespace 間で同じホスト名を要求することを許可しません。 -
InterNamespaceAllowed
: ルートが複数の namespace 間で同じホスト名の異なるパスを要求することを許可します。
routeAdmission.wildcardPolicy
ワイルドカードポリシーが設定されたルートが Ingress コントローラーによって処理される方法を制御します。
WildcardsAllowed
とWildcardsDisallowed
は有効な値です。デフォルト値はWildcardsDisallowed
です。-
WildcardPolicyAllowed
は、任意のワイルドカードポリシーを持つルートが Ingress コントローラーによって許可されることを意味します。 -
WildcardPolicyDisallowed
は、ワイルドカードポリシーがNone
のルートのみが Ingress コントローラーによって許可されることを意味します。
重要ワイルドカードポリシーを
WildcardsAllowed
からWildcardsDisallowed
に更新すると、subdomain
のワイルドカードポリシーを持つ許可されたルートが機能しなくなります。これらのルートは、Ingress コントローラーによって許可されるようにNone
のワイルドカードポリシーに対して再作成される必要があります。status
デフォルトのルーターのステータス。有効な値は
Managed
またはRemoved
です。tlsSecurityProfile
tlsSecurityProfile
は、Ingress コントローラーの TLS 接続の設定を指定します。これが設定されていない場合、デフォルト値はapiservers.config.openshift.io/cluster
リソースをベースとして設定されます。Old
プロファイルまたはCustom
プロファイルの TLS1.0
バージョンは、Ingress コントローラーによって自動的に1.1
に変換されます。Intermediate
がデフォルトの設定です。-
Ingress コントローラーの最小 TLS バージョンは
1.1
です。TLS の最大バージョンは1.3
です。
注記設定されたセキュリティープロファイルの暗号および最小 TLS バージョンが
TLSProfile
ステータスに反映されます。プロファイルは意図に基づいているため、新しい暗号が開発されたり、既存の暗号が安全でないことが判明したりすると、時間の経過に応じて変更されます。特定のプロセスで使用できる暗号に応じて、使用可能なリストが削減される可能性があります。tlsSecurityProfile.custom
ユーザー定義の TLS セキュリティープロファイル。このパラメーターおよび関連パラメーターを設定する場合は、細心の注意を払ってください。
tlsSecurityProfile.custom.ciphers
TLS ハンドシェイク中にネゴシエートされる暗号アルゴリズムを指定します。Operator は、オペランドがサポートしていないエントリーを削除する可能性があります。
tlsSecurityProfile.custom.minTLSVersion
TLS ハンドシェイク中にネゴシエートされる TLS プロトコルの最小バージョンを指定します。たとえば、TLS バージョン 1.1、1.2、1.3 を使用するには、値を
VersionTLS11
に設定します。minTLSVersion
の有効な最高値はVersionTLS12
です。tlsSecurityProfile.intermediate
この TLS プロファイルは、ほとんどのサービスに使用できます。Intermediate compatibility (recommended).
tlsSecurityProfile.old
下位互換性のために使用されます。Old backward compatibility.
tlsSecurityProfile.type
有効な値は、
Intermediate
、Old
、またはCustom
です。Modern
値はサポートされていません。tuningOptions
Ingress コントローラー Pod のパフォーマンスをチューニングするためのオプションを指定します。
tuningOptions.clientFinTimeout
サーバーが接続を閉じるまでのクライアントの応答を待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは
1s
です。tuningOptions.clientTimeout
クライアントのレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは
30s
です。tuningOptions.headerBufferBytes
Ingress コントローラー接続セッション用に予約されるメモリーの量 (バイト単位) を指定します。Ingress コントローラーで HTTP/2 が有効になっている場合、この値は少なくとも
16384
である必要があります。設定されていない場合、デフォルト値は32768
バイトになります。重要このフィールドを設定することは推奨しません。
headerBufferMaxRewriteBytes
パラメーター値が小さすぎると、Ingress コントローラーが壊れる可能性があるためです。逆に、headerBufferMaxRewriteBytes
の値が大きすぎると、Ingress コントローラーが必要以上に多くのメモリーを使用する可能性があります。tuningOptions.headerBufferMaxRewriteBytes
Ingress コントローラー接続セッションの HTTP ヘッダーの書き換えと追加のために、
headerBufferBytes
から予約するメモリー量 (バイト単位) を指定します。headerBufferMaxRewriteBytes
の最小値は4096
です。受信 HTTP リクエストのheaderBufferBytes
は、headerBufferMaxRewriteBytes
値よりも大きくする必要があります。設定されていない場合、デフォルト値は8192
バイトになります。重要このフィールドを設定することは推奨しません。
headerBufferMaxRewriteBytes
値が小さすぎると Ingress コントローラーが破損する可能性があり、headerBufferMaxRewriteBytes
値が大きすぎると、Ingress コントローラーが必要以上に大量にメモリーを使用する可能性があるためです。tuningOptions.healthCheckInterval
ルーターがヘルスチェック間で待機する時間を秒単位で指定します。デフォルトは
5s
です。tuningOptions.maxConnections
各
HAProxy
プロセスで確立できる同時接続の最大数を指定します。この値を増やすと、追加のシステムリソースで各 Ingress コントローラー Pod がより多くの接続を処理できるようになります。0
、-1
、2000
から2000000
の範囲内の任意の値を使用でき、フィールドを空にすることも可能です。-
このフィールドが空のままであるか、値が
0
の場合、Ingress コントローラーはデフォルト値の50000
を使用します。 -
フィールド値が
-1
の場合、HAProxy
は、実行中のコンテナーで使用可能なulimits
に基づき最大値を動的に計算します。このプロセスにより計算値が大きくなり、現在のデフォルト値である50000
と比較して、メモリー使用量が大幅に増加します。 -
フィールドの値が現在のオペレーティングシステムの制限よりも大きい場合、
HAProxy
プロセスは開始されません。 -
個別の値を選択し、ルーター Pod が新しいノードに移行された場合、新しいノードに同一の
ulimit
が設定されていない可能性があります。このような場合、Pod は起動に失敗します。 -
異なる
ulimits
が設定されたノードがあり、離散値を選択する場合は、このフィールドに-1
の値を使用して、実行時に最大接続数を計算できます。 -
container_memory_working_set_bytes{container="router",namespace="openshift-ingress"}
メトリクスを使用すると、ルーターコンテナーのメモリー使用量を監視できます。 -
container_memory_working_set_bytes{container="router",namespace="openshift-ingress"}/container_processes{container="router",namespace="openshift-ingress"}
メトリクスを使用すると、ルーターコンテナー内の個々のHAProxy
プロセスのメモリー使用量を監視できます。
tuningOptions.serverFinTimeout
接続を閉じているクライアントへのサーバーレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは
1s
です。tuningOptions.serverTimeout
サーバーの応答を待機している間に接続が開かれる期間を指定します。デフォルトのタイムアウトは
30s
です。tuningOptions.threadCount
HAProxy
プロセスごとに作成するスレッドの数を指定します。より多くのスレッドを作成すると、使用されるシステムリソースを増やすことで、各 Ingress コントローラー Pod がより多くの接続を処理できるようになります。HAProxy
ロードバランサーは最大64
スレッドをサポートします。このフィールドが空の場合、Ingress コントローラーはデフォルト値の4
スレッドを使用します。重要このフィールドを設定することは推奨しません。
HAProxy
スレッドの数を増やすと、Ingress コントローラー Pod がより多くの CPU 時間を負荷発生時に使用できるようになり、他の Pod が実行に必要な CPU リソースを受け取れなくなるためです。スレッドの数を減らすと、Ingress コントローラーのパフォーマンスが低下する可能性があります。tuningOptions.tlsInspectDelay
一致するルートを検出するためにルーターがデータを保持できる時間を指定します。この設定値が低すぎると、より適合性の高い証明書を使用している場合でも、ルーターがエッジ終端ルート、再暗号化ルート、またはパススルールート用のデフォルト証明書にフォールバックする可能性があります。デフォルトの検査遅延は
5s
です。tuningOptions.tunnelTimeout
トンネルがアイドル状態のときに、websocket を含むトンネル接続を開いたままにする時間を指定します。デフォルトのタイムアウトは
1h
です。-
その他の必要な設定を完了したら、次のいずれかのコマンドを実行して MicroShift を起動または再起動します。
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Ingress 設定の変更を行い、MicroShift を再起動した後、ルーター Pod の経過時間をチェックして、変更が適用されたことを確認できます。
ルーター Pod のステータスを確認するには、次のコマンドを実行します。
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE router-default-8649b5bf65-w29cn 1/1 Running 0 6m10s
NAME READY STATUS RESTARTS AGE router-default-8649b5bf65-w29cn 1/1 Running 0 6m10s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.1. Ingress コントローラーの certificateSecret 用のシークレットを作成する リンクのコピーリンクがクリップボードにコピーされました!
MicroShift 設定ファイルの certificateSecret
パラメーター値によって参照されるシークレットを作成するには、この手順を使用します。このシークレットには、Ingress コントローラーによって提供されるデフォルトの証明書が含まれています。
使用中の証明書はすべて、MicroShift に組み込まれた OAuth サーバーに自動的に統合されます。
前提条件
- MicroShift へのルートアクセス権がある。
-
OpenShift CLI (
oc
) がインストールされている。 - 秘密鍵が暗号化されていないか、MicroShift にインポートするために秘密鍵が復号化されている。
手順
ワイルドカード証明書チェーンおよびキーが含まれるシークレットを作成します。
oc create secret tls <secret>
$ oc create secret tls <secret>
1 --cert=</path/to/cert.crt>
2 --key=</path/to/cert.key>
3 -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要証明書には、
*.apps.<clustername>.<domain>
を示すsubjectAltName
拡張が含まれている必要があります。-
新しく作成されたシークレットを使用して、MicroShift 設定 YAML の
certificateSecret
パラメーター値を更新します。 その他の必要な設定を完了したら、次のいずれかのコマンドを実行して MicroShift を起動または再起動します。
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. Ingress コントローラーの TLS セキュリティープロファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift 設定 YAML でタイプを設定することで、Ingress コントローラーが使用する TLS セキュリティープロファイルを設定できます。
前提条件
- MicroShift クラスターへのルートアクセス権があります。
手順
spec.tlsSecurityProfile
フィールドを MicroShift YAML 設定ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を適用するためにファイルを保存します。
次のコマンドを実行して MicroShift を再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow