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 コントローラー設定フィールドの定義表 パラメーター 説明 ingressMicroShift
config.yamlファイルのingressセクションでは、OpenShift Container Platform Ingress Control Operator の実装部分の設定可能なパラメーターを定義します。この表の残りのすべてのパラメーターは、config.yamlのingressセクションのサブセクションです。certificateSecretMicroShift 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.clientCAopenshift-ingressnamespace 内の必須の config map を指定します。クライアント TLS を有効にするために必要です。config map には、ca-bundle.pemという名前の認証局 (CA) バンドルが含まれている必要があります。含まれていない場合、デフォルトルーターのデプロイメントは失敗します。clientTLS.ClientCA.nameclientTLS.ClientCA値で参照される config map のmetadata.name。clientTLS.ClientCertificatePolicy有効な値は
RequiredまたはOptionalです。クライアント TLS を有効にするには、Requiredに設定します。Ingress コントローラーは、エッジで終了および再暗号化された TLS ルートのクライアント証明書のみをチェックします。Ingress コントローラーは、プレーンテキスト HTTP またはパススルー TLS ルートの証明書をチェックできません。defaultHTTPVersionIngress コントローラーの HTTP バージョンを設定します。HTTP 1.1 の場合、デフォルト値は
1です。forwardedHeaderPolicyIngress コントローラーが
Forwarded、X-Forwarded-For、X-Forwarded-Host、X-Forwarded-Port、X-Forwarded-Proto、およびX-Forwarded-Proto-VersionHTTP ヘッダーを設定するタイミングと方法を指定します。次の値が有効です。-
Appendは、Ingress コントローラーが既存のヘッダーに追加することを指定することで、それらのヘッダーを保持します。'Append` はデフォルト値です。 -
Replaceは、Ingress コントローラーによってヘッダーを設定するように指定して、既存のヘッダーを削除します。 -
IfNoneは、ヘッダーがまだ設定されていない場合に Ingress コントローラーがヘッダーを設定することを指定します。 -
Neverは、Ingress コントローラーによってヘッダーを設定しないように指定して、既存のヘッダーを保持します。
httpCompressionHTTP トラフィック圧縮のポリシーを定義します。
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です。routeAdmissionnamespace 全体にわたるクレームの許可または拒否など、新しいルート要求を処理するためのポリシーを定義します。
routeAdmission.namespaceOwnershipnamespace 全体にわたるホスト名要求の処理方法を記述します。デフォルトは
InterNamespaceAllowedです。有効な値は次のとおりです。-
Strict: ルートが複数の namespace 間で同じホスト名を要求することを許可しません。 -
InterNamespaceAllowed: ルートが複数の namespace 間で同じホスト名の異なるパスを要求することを許可します。
routeAdmission.wildcardPolicyワイルドカードポリシーが設定されたルートが Ingress コントローラーによって処理される方法を制御します。
WildcardsAllowedとWildcardsDisallowedは有効な値です。デフォルト値はWildcardsDisallowedです。-
WildcardPolicyAllowedは、任意のワイルドカードポリシーを持つルートが Ingress コントローラーによって許可されることを意味します。 -
WildcardPolicyDisallowedは、ワイルドカードポリシーがNoneのルートのみが Ingress コントローラーによって許可されることを意味します。
重要ワイルドカードポリシーを
WildcardsAllowedからWildcardsDisallowedに更新すると、subdomainのワイルドカードポリシーを持つ許可されたルートが機能しなくなります。これらのルートは、Ingress コントローラーによって許可されるようにNoneのワイルドカードポリシーに対して再作成される必要があります。statusデフォルトのルーターのステータス。有効な値は
ManagedまたはRemovedです。tlsSecurityProfiletlsSecurityProfileは、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.ciphersTLS ハンドシェイク中にネゴシエートされる暗号アルゴリズムを指定します。Operator は、オペランドがサポートしていないエントリーを削除する可能性があります。
tlsSecurityProfile.custom.minTLSVersionTLS ハンドシェイク中にネゴシエートされる 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値はサポートされていません。tuningOptionsIngress コントローラー Pod のパフォーマンスをチューニングするためのオプションを指定します。
tuningOptions.clientFinTimeoutサーバーが接続を閉じるまでのクライアントの応答を待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは
1sです。tuningOptions.clientTimeoutクライアントのレスポンスを待機している間、接続を開いたままにする時間を指定します。デフォルトのタイムアウトは
30sです。tuningOptions.headerBufferBytesIngress コントローラー接続セッション用に予約されるメモリーの量 (バイト単位) を指定します。Ingress コントローラーで HTTP/2 が有効になっている場合、この値は少なくとも
16384である必要があります。設定されていない場合、デフォルト値は32768バイトになります。重要このフィールドを設定することは推奨しません。
headerBufferMaxRewriteBytesパラメーター値が小さすぎると、Ingress コントローラーが壊れる可能性があるためです。逆に、headerBufferMaxRewriteBytesの値が大きすぎると、Ingress コントローラーが必要以上に多くのメモリーを使用する可能性があります。tuningOptions.headerBufferMaxRewriteBytesIngress コントローラー接続セッションの 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.threadCountHAProxyプロセスごとに作成するスレッドの数を指定します。より多くのスレッドを作成すると、使用されるシステムリソースを増やすことで、各 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 microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Ingress 設定の変更を行い、MicroShift を再起動した後、ルーター Pod の経過時間をチェックして、変更が適用されたことを確認できます。
ルーター Pod のステータスを確認するには、次のコマンドを実行します。
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingressCopy 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 6m10sCopy 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> --cert=</path/to/cert.crt> --key=</path/to/cert.key> -n openshift-ingress$ oc create secret tls <secret>1 --cert=</path/to/cert.crt>2 --key=</path/to/cert.key>3 -n openshift-ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要証明書には、
*.apps.<clustername>.<domain>を示すsubjectAltName拡張が含まれている必要があります。-
新しく作成されたシークレットを使用して、MicroShift 設定 YAML の
certificateSecretパラメーター値を更新します。 その他の必要な設定を完了したら、次のいずれかのコマンドを実行して MicroShift を起動または再起動します。
sudo systemctl start microshift
$ sudo systemctl start microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy 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 microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow