3.2. MicroShift での Ingress 制御の設定


MicroShift サービス設定ファイルを更新するか、設定スニペットを使用することで、詳細な Ingress 制御の設定を使用できます。

重要
  • config.yaml 設定ファイルは、組み込み設定よりも優先されます。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。
  • 設定スニペット YAML は、組み込みの設定と config.yaml 設定ファイルよりも優先されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes Container Network Interface (CNI) プラグインを使用している。

手順

  1. 次のどちらかの方法で Ingress 制御の設定を適用します。

    1. /etc/microshift/ ディレクトリーにある config.yaml.default ファイルのコピーを作成し、config.yaml という名前を付けてソースディレクトリーに保存することで、MicroShift config.yaml 設定ファイルを更新します。
    2. 設定スニペットを使用して、必要な Ingress 制御の設定を適用します。これを行うには、設定スニペット YAML ファイルを作成し、そのファイルを /etc/microshift/config.d/ 設定ディレクトリーに配置します。
  2. MicroShift YAML の ingress セクションのデフォルト値を有効な値に置き換えるか、必要なセクションを含む設定スニペットファイルを作成します。

    デフォルト値を含む Ingress コントローラー設定フィールド

    apiServer:
    # ...
    ingress:
      certificateSecret: router-certs-custom
      clientTLS:
        allowedSubjectPatterns: []
        clientCA:
          name: ""
        clientCertificatePolicy: ""
      defaultHTTPVersion: 1
      forwardedHeaderPolicy: Append
      httpCompression:
        mimeTypes:
          - ""
      httpEmptyRequestsPolicy: Respond
      listenAddress: []
      logEmptyRequests: Log
      ports:
         http: 80
         https: 443
      routeAdmissionPolicy:
        namespaceOwnership: InterNamespaceAllowed
        wildcardPolicy: WildcardsDisallowed
      status: Managed
      tlsSecurityProfile:
        type:
        custom:
          ciphers:[]
          minTLSVersion:""
        intermediate: {}
        old: {}
      tuningOptions:
        clientFinTimeout: 1s
        clientTimeout: 30s
        headerBufferBytes: 0
        headerBufferMaxRewriteBytes: 0
        healthCheckInterval: 5s
        maxConnections: 0
        serverFinTimeout: 1s
        serverTimeout: 30s
        threadCount: 4
        tlsInspectDelay: 5s
        tunnelTimeout: 1h
    # ...
    Copy to Clipboard Toggle word wrap

    Expand
    表3.1 Ingress コントローラー設定フィールドの定義表
    パラメーター説明

    ingress

    MicroShift config.yaml ファイルの ingress セクションでは、OpenShift Container Platform Ingress Control Operator の実装部分の設定可能なパラメーターを定義します。この表の残りのすべてのパラメーターは、config.yamlingress セクションのサブセクションです。

    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 コントローラーが ForwardedX-Forwarded-ForX-Forwarded-HostX-Forwarded-PortX-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-8text/htmltext/*image/svg+xmlapplication/octet-streamX-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 コントローラーが HTTP 400 または 408 レスポンスを送信し、接続をログに記録し (アクセスログが有効な場合)、適切なメトリクスで接続をカウントします。
    • ポリシーを Ignore に設定すると、http-ignore-probes パラメーターが HAproxy プロセス設定に追加されます。このパラメーターが追加されると、Ingress コントローラーはレスポンスを送信せずに接続を閉じ、その後、接続をログに記録するか、メトリクスを増分します。

    logEmptyRequests

    リクエストを受信せず、ログに記録しない接続を指定します。有効な値は LogIgnore です。空の要求は通常、ロードバランサーの正常性プローブまたは事前接続から送信されるもので、多くの場合、無視しても問題ありません。ただし、これらの要求はネットワークエラーやポートスキャンによっても発生する可能性もあります。したがって、このフィールドを 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 コントローラーによって処理される方法を制御します。WildcardsAllowedWildcardsDisallowed は有効な値です。デフォルト値は 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 プロファイルの TLS 1.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

    有効な値は、IntermediateOld、または 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-12000 から 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 です。

  3. その他の必要な設定を完了したら、次のいずれかのコマンドを実行して MicroShift を起動または再起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap
    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap

検証

Ingress 設定の変更を行い、MicroShift を再起動した後、ルーター Pod の経過時間をチェックして、変更が適用されたことを確認できます。

  • ルーター Pod のステータスを確認するには、次のコマンドを実行します。

    $ oc get pods -n openshift-ingress
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                              READY   STATUS    RESTARTS   AGE
    router-default-8649b5bf65-w29cn   1/1     Running   0          6m10s
    Copy to Clipboard Toggle word wrap

3.2.1. Ingress コントローラーの certificateSecret 用のシークレットを作成する

MicroShift 設定ファイルの certificateSecret パラメーター値によって参照されるシークレットを作成するには、この手順を使用します。このシークレットには、Ingress コントローラーによって提供されるデフォルトの証明書が含まれています。

注記

使用中の証明書はすべて、MicroShift に組み込まれた OAuth サーバーに自動的に統合されます。

前提条件

  • MicroShift へのルートアクセス権がある。
  • OpenShift CLI (oc) がインストールされている。
  • 秘密鍵が暗号化されていないか、MicroShift にインポートするために秘密鍵が復号化されている。

手順

  1. ワイルドカード証明書チェーンおよびキーが含まれるシークレットを作成します。

    $ oc create secret tls <secret> 
    1
    
         --cert=</path/to/cert.crt> 
    2
    
         --key=</path/to/cert.key> 
    3
    
         -n openshift-ingress
    Copy to Clipboard Toggle word wrap
    1
    <secret> は、証明書チェーンと秘密鍵が含まれるシークレットの名前です。
    2
    </path/to/cert.crt> は、ローカルファイルシステム上の証明書チェーンへのパスです。
    3
    </path/to/cert.key> は、この証明書に関連付けられるプライベートキーへのパスです。
    重要

    証明書には、*.apps.<clustername>.<domain> を示す subjectAltName 拡張が含まれている必要があります。

  2. 新しく作成されたシークレットを使用して、MicroShift 設定 YAML の certificateSecret パラメーター値を更新します。
  3. その他の必要な設定を完了したら、次のいずれかのコマンドを実行して MicroShift を起動または再起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap
    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap

3.2.2. Ingress コントローラーの TLS セキュリティープロファイルの設定

MicroShift 設定 YAML でタイプを設定することで、Ingress コントローラーが使用する TLS セキュリティープロファイルを設定できます。

前提条件

  • MicroShift クラスターへのルートアクセス権があります。

手順

  1. spec.tlsSecurityProfile フィールドを MicroShift YAML 設定ファイルに追加します。

     ...
    spec:
      tlsSecurityProfile:
        type: Custom 
    1
    
        custom: 
    2
    
          ciphers: 
    3
    
          - ECDHE-ECDSA-CHACHA20-POLY1305
          - ECDHE-RSA-CHACHA20-POLY1305
          - ECDHE-RSA-AES128-GCM-SHA256
          - ECDHE-ECDSA-AES128-GCM-SHA256
          minTLSVersion: VersionTLS11
     ...
    Copy to Clipboard Toggle word wrap
    1
    TLS セキュリティープロファイルタイプ (OldIntermediate、または Custom) を指定します。デフォルトは Intermediate です。
    2
    選択したタイプに適切なフィールドを指定します。
    • old: {}
    • intermediate: {}
    • custom:
    3
    custom タイプには、TLS 暗号のリストと最小許容 TLS バージョンを指定します。
    警告

    custom TLS 設定を選択する場合は、細心の注意を払ってください。自己署名 TLS 証明書を使用すると、セキュリティー上のリスクが生じる可能性があります。

  2. 変更を適用するためにファイルを保存します。
  3. 次のコマンドを実行して MicroShift を再起動します。

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat