設定


Red Hat build of MicroShift 4.19

MicroShift の設定

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、MicroShift を設定する手順を説明します。

第1章 MicroShift 設定ファイルの使用

YAML ファイルは、優先設定、設定、およびパラメーターを使用して MicroShift インスタンスをカスタマイズします。

1.1. Red Hat Device Edge の設定

MicroShift と Red Hat Enterprise Linux (RHEL) を連携することで、より軽量なシングルノードの Kubernetes をエッジに導入できます。この組み合わせは、コントロールプレーンとワーカーの両方の機能を備えた単一のノードが存在することを意味します。また、オペレーティングシステムが多くの機能を処理するということでもあります。オプションの RPM または Operator をインストールすることで機能を追加します。多くの場合、MicroShift サービスに加えて、オペレーティングシステムやその他のリソースを設定する必要があります。

これらの大部分をまとめるのが、MicroShift 設定ファイル config.yaml です。MicroShift 設定ファイルでは、アプリケーションプラットフォームをカスタマイズし、多くの高度な機能を有効にできます。以下に例を示します。

  • Ingress はデフォルトで使用可能ですが、MicroShift 設定ファイルのパラメーターを使用して、TLS やルートアドミッション仕様などの高度な機能を追加できます。
  • ストレージが必要ない場合は、MicroShift 設定ファイルを使用して組み込みストレージプロバイダーを無効にできます。組み込みストレージプロバイダーを使用する場合は、lvmd.config ファイルで調整を行う必要があります。この場合の MicroShift 設定ファイルの役割は、デフォルトのストレージプロバイダーを使用するかどうかを設定することです。
  • 複数ネットワークの使用などの高度なネットワーク機能。Multus パッケージはインストール可能な RPM ですが、アクセスを設定するには MicroShift 設定ファイルを使用してパラメーターを設定します。さらに、ホストを介してネットワーク上のネットワーク設定を行う必要があります。

便宜上、config.yaml.default ファイルが自動的にインストールされます。このファイルをコピーして名前を config.yaml に変更し、これを基に独自のカスタム設定を作成できます。

注記

MicroShift config.yaml ファイルには、設定なしで動作する機能を追加することもできます。たとえば、MicroShift を設定せずに、アプリケーション管理用に GitOps をインストールして設定できます。

注記

kustomize マニフェスト以外のツールを使用し、MicroShift API を介して設定を変更したり、アプリケーションをデプロイしたりする場合は、greenboot ヘルスチェックが完了するまで待つ必要があります。これにより、greenboot が rpm-ostree システムを以前の状態にロールバックしても、変更が失われなくなります。

1.2. MicroShift YAML 設定ファイル

MicroShift は、起動時にシステム全体の /etc/microshift/ ディレクトリーで config.yaml という名前の設定ファイルがあるか確認します。ディレクトリー内に設定ファイルが存在しない場合は、組み込みのデフォルト値を使用してサービスを起動します。

MicroShift 設定ファイルは、ホストと組み合わせて使用する必要があります。アプリケーション設定およびサービス設定と組み合わせて使用する必要が出てくる場合もあります。MicroShift クラスターの設定を調整する際には、必要に応じて各機能も連動して設定するようにしてください。

便宜上、入力可能な状態の config.yaml.default ファイルが自動的にインストールされます。

1.2.1. デフォルトの設定

config.yaml ファイルを作成しない場合、または設定スニペット YAML ファイルを使用しない場合は、デフォルト値が使用されます。次の例は、デフォルトの設定を示しています。

  • デフォルト値を確認するには、次のコマンドを実行します。

    $ microshift show-config
    Copy to Clipboard Toggle word wrap

    YAML 形式でのデフォルト値の出力例

    apiServer:
      advertiseAddress: 10.44.0.0/32 
    1
    
      auditLog:
        maxFileAge: 0
        maxFileSize: 200
        maxFiles: 10
        profile: Default
      namedCertificates:
        - certPath: ""
          keyPath: ""
          names:
            - ""
      subjectAltNames: []
      tls:
        cipherSuites:
        - ""
        minVersion: VersionTLS12
    debugging:
      logLevel: "Normal"
    dns:
      baseDomain: microshift.example.com
    etcd:
      memoryLimitMB: 0
    ingress:
      certificateSecret: router-certs-default
      clientTLS:
        allowedSubjectPatterns:
        clientCA:
          name: ""
        clientCertificatePolicy: ""
      defaultHTTPVersion: 1
      forwardedHeaderPolicy: ""
      httpCompression:
        mimeTypes:
          - ""
      httpEmptyRequestsPolicy: Respond
      listenAddress:
        - ""
      logEmptyRequests: Log
      ports:
        http: 80
        https: 443
      routeAdmissionPolicy:
        namespaceOwnership: InterNamespaceAllowed
        wildcardPolicy: WildcardPolicyAllowed
      status: Managed
      tlsSecurityProfile:
        type: Intermediate
      tuningOptions:
          clientFinTimeout: "1s"
          clientTimeout: "30s"
          headerBufferBytes: 0
          headerBufferMaxRewriteBytes: 0
          healthCheckInterval: "5s"
          maxConnections: 0
          serverFinTimeout: "1s"
          serverTimeout: "30s"
          threadCount: 0
          tlsInspectDelay: "5s"
          tunnelTimeout: "1h"
    kubelet:
    manifests:
      kustomizePaths:
        - /usr/lib/microshift/manifests
        - /usr/lib/microshift/manifests.d/*
        - /etc/microshift/manifests
        - /etc/microshift/manifests.d/*
    network:
      clusterNetwork:
        - 10.42.0.0/16
      cniPlugin: ""
      multus:
        status: Disabled 
    2
    
      serviceNetwork:
        - 10.43.0.0/16
      serviceNodePortRange: 30000-32767
    node:
      hostnameOverride: ""
      nodeIP: "" 
    3
    
      nodeIPv6: ""
    storage:
      driver: "" 
    4
    
      optionalCsiComponents: 
    5
    
        - ""
    telemetry:
      endpoint: https://infogw.api.openshift.com
      proxy: ""
      status: Enabled
    Copy to Clipboard Toggle word wrap

    1
    サービスネットワークのアドレスに基づいて計算されます。
    2
    Multus Container Network Interface (CNI) のデプロイメントを制御します。
    3
    デフォルトルートの IP アドレス。
    4
    デフォルトの null 値は、Logical Volume Managed Storage (LVMS) をデプロイします。
    5
    デフォルトの null 値は、snapshot-controller をデプロイします。

1.3. カスタム設定の使用

カスタム設定を作成するには、/etc/microshift/ ディレクトリーで提供される config.yaml.default ファイルのコピーを作成し、config.yaml という名前を付けます。このファイルを /etc/microshift/ ディレクトリー保存し、MicroShift を起動または再起動する前に、デフォルトをオーバーライドすることが予想されるサポート対象の設定を変更できます。

重要

設定を変更したら、MicroShift を再起動して有効にします。config.yaml ファイルは、MicroShift の起動時にのみ読み取られます。

1.3.1. 個別の再起動

MicroShift クラスターで使用されるアプリケーションおよびその他のオプションサービスも、クラスター全体で設定の変更を適用するには、個別に再起動する必要がある場合があります。たとえば、特定のネットワーク設定に変更を加える場合は、サービスおよびアプリケーション Pod を停止して再起動し、それらの変更を適用する必要があります。詳細は、完了するタスクのそれぞれの手順を参照してください。

ヒント

必要な設定をすべて一度に追加すると、システムの再起動を最小限に抑えることができます。

1.3.2. MicroShift config.yaml ファイルのパラメーターと値

次の表は、MicroShift 設定 YAML パラメーターとそれぞれの有効な値を説明しています。

Expand
表1.1 MicroShift config.yaml パラメーター
フィールド説明

advertiseAddress

string

API サーバーがクラスターのメンバーにアドバタイズされる IP アドレスを指定する文字列。デフォルト値は、サービスネットワークのアドレスに基づいて計算されます。

auditLog.maxFileAge

number

ログファイルが自動的に削除されるまでの保存期間。maxFileAge パラメーターのデフォルト値 0 に設定すると、ログファイルが経過時間をベースに削除されなくなります。この値は設定可能です。

auditLog.maxFileSize

number

デフォルトでは、audit.log ファイルが maxFileSize の制限に達すると、audit.log ファイルがローテーションされ、MicroShift は新しい audit.log ファイルへの書き込みを開始します。この値は設定可能です。

auditLog.maxFiles

number

保存されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。

auditLog.profile

DefaultWriteRequestBodiesAllRequestBodies または None

読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、Default プロファイルが使用されます。

namedCertificates

list

カスタム認証局を使用して、外部で生成された証明書およびドメイン名を定義します。

namedCertificates.certPath

path

証明書への完全パス。

namedCertificates.keyPath

path

証明書キーへの完全パス。

namedCertificates.names

list

オプション: 明示的な DNS 名のリストを追加します。ワイルドカードは、先頭に指定できます。名前が指定されていない場合は、暗黙名が証明書から抽出されます。

subjectAltNames

完全修飾ドメイン名 (FQDN)、*.domain.com などのワイルドカード、または IP アドレス

API サーバー証明書のサブジェクト代替名。SAN は、証明書で保護されたすべてのドメイン名および IP アドレスを示します。

tls

list

使用されるトランスポート層プロトコル (TLS) と許可される暗号スイートを定義します。公開された MicroShift API サーバーと内部コントロールプレーンエンドポイントにセキュリティーを提供します。

tls.cipherSuites

string

API サーバーが受け入れて提供する許可された暗号スイートをリスト表示します。デフォルトでは、tls.minVersion パラメーターで設定された TLS 仕様で許可される暗号スイートになります。

tls.minVersion

VersionTLS12 または VersionTLS13

API サーバーから提供する TLS の最小バージョンを指定します。デフォルト値は VersionTLS12 です。

debugging.logLevel

NormalDebugTrace、または TraceAll

ログの詳細レベル。デフォルト値は Normal です。

dns.baseDomain

valid domain

クラスターのベースドメイン。管理されるすべての DNS レコードはこのベースのサブドメインです。

etcd.memoryLimitMB

number

デフォルトでは、etcd はシステムの負荷を処理するために必要な量のメモリーを使用します。ただし、メモリー制約のあるシステムでは、etcd が特定の時点で使用できるメモリーの量を制限することが望ましいか、または制限する必要がある場合があります。

ingress.certificateSecret

string

Ingress コントローラーによって提供されるデフォルトの証明書を含むシークレットへの参照。ルートが独自の証明書を指定しない場合は、certificateSecret が使用されます。

シークレットには以下のキーおよびデータが含まれている必要があります。

  • tls.crt: 証明書ファイルの内容
  • tls.key: キーファイルの内容

これらの値のいずれかを設定しない場合は、ワイルドカード証明書が自動的に生成され、使用されます。証明書は Ingress コントローラーの domain および subdomains フィールドに対して有効であり、証明書用に生成された CA はクラスターの信頼ストアと自動的に統合されます。

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

ingress.clientTLS

AllowedSubjectPatternsspec.clientTLS.ClientCAspec.clientTLS.clientCertificatePolicy

クラスターおよびサービスへのクライアントアクセスを認証します。これらの設定を使用する場合、相互 TLS 認証が有効化されます。spec.clientTLS.clientCertificatePolicy および spec.clientTLS.ClientCA の必須サブフィールドに値を設定していない場合、クライアント TLS は有効化されていません。

ingress.clientTLS.AllowedSubjectPatterns

list in PCRE syntax

要求をフィルタリングするために、有効なクライアント証明書の識別名と照合される正規表現のリストを指定するオプションのサブフィールド。このパラメーターを使用すると、Ingress コントローラーは識別名に基づいて証明書を拒否します。Perl Compatible Regular Expressions (PCRE) 構文が必要です。このフィールドを設定する場合、有効な式を含める必要があります。そうしないと、MicroShift サービスは失敗します。1 つ以上のパターンがクライアント証明書の識別名と一致している必要があります。一致しない場合、Ingress コントローラーは証明書を拒否し、接続を拒否します。

ingress.clientTLS.ClientCA

string

openshift-ingress namespace 内の config map を指定する必須のサブフィールド。config map には CA 証明書バンドルが含まれている必要があります。

ingress.clientTLS.ClientCertificatePolicy

RequiredOptional

カスタム証明書を使用した再暗号化 TLS Termination により、セキュアなルートを作成するための必須サブフィールド。PEM エンコードされたファイルに証明書/キーのペアが必要です。ここで、証明書はルートホストに対して有効となっています。Ingress コントローラーは、エッジで終了および再暗号化された TLS ルートのクライアント証明書のみをチェックします。この設定では、プレーンテキスト HTTP またはパススルー TLS ルートの証明書はチェックされません。

ingress.defaultHTTPVersion

number

ingress に使用するデフォルトの HTTP バージョンを決定します。デフォルト値は 1 で、これは HTTP/1.1 プロトコルです。

ingress.forwardedHeaderPolicy

Append, Replace, IfNone, Never

Ingress コントローラーが ForwardedX-Forwarded-ForX-Forwarded-HostX-Forwarded-PortX-Forwarded-Proto、および X-Forwarded-Proto-Version HTTP ヘッダーを設定するタイミングと方法を指定します。デフォルト値は Append です。

  • Append は、Ingress コントローラーが既存のヘッダーを追加することを指定します。
  • Replace は、Ingress コントローラーがヘッダーを設定し、既存の Forwarded または X-Forwarded-* ヘッダーを置き換えることを指定します。
  • IfNone は、ヘッダーがまだ設定されていない場合に、Ingress コントローラーがヘッダーを設定するように指定します。
  • Never は、Ingress コントローラーがヘッダーを設定しないように指定し、既存のヘッダーを保持します。

ingress.httpCompression

object

HTTP トラフィック圧縮のポリシーを定義します。デフォルトでは HTTP 圧縮はありません。

ingress.httpCompression.mimeTypes

array または null

圧縮する MIME タイプのリスト。リストが空の場合、Ingress コントローラーは圧縮を適用しません。リストを定義するには、メッセージボディーのデータのタイプとサブタイプ、およびデータのネイティブエンコーディングを指定する RFC 1341 の Content-Type 定義の形式を使用します。たとえば、Content-Type := type \"/\" subtype *[\";\" parameter] です。

  • Content-Type の値は、アプリケーション、オーディオ、イメージ、メッセージ、マルチパート、テキスト、ビデオ、または先頭に \"X-\" が付き、その後にトークンが続くカスタムタイプのいずれかです。トークンは次のいずれかの方法で定義する必要があります。
  • トークンは 1 文字以上の string です。空白、制御文字、または tspecials セット内の文字を含めることはできません。
  • tspecials セットには、()\u003c\u003e@,;:\\\"/[]?.= 文字が含まれます。
  • Content-Type のサブタイプもトークンです。
  • サブタイプに続くオプションのパラメーターは、token \"=\" (token / quoted-string) という形式で定義します。
  • RFC 822 で定義されている quoted-string は、二重引用符で囲みます。これには、\\\"、および CR を除く任意の文字と空白を含めることができます。quoted-string には、\\.", 文字でエスケープすれば、任意の単一の ASCII 文字を含めることもできます。

すべての MIME タイプが圧縮の恩恵を受けるわけではありませんが、圧縮が設定されていれば、HAProxy がリソースを使用してファイルの圧縮を試みます。一般的に、htmlccsjs などのテキスト形式は圧縮の恩恵を受けます。イメージ、オーディオ、ビデオなど、すでに圧縮されているファイルタイプを圧縮するために CPU リソースを費やしても、おそらく限られた効果しか得られません。

ingress.httpEmptyRequestsPolicy

Respond または Ignore

デフォルト値は Respond です。リクエストを受信する前に接続がタイムアウトした場合に HTTP 接続をどのように処理するかを指定します。このような接続は通常、ロードバランサーサービスのヘルスプローブ、または preconnect などの Web ブラウザーの投機的な接続から発生します。

  • このフィールドが Respond に設定されている場合、Ingress コントローラーが "HTTP 400" または "408" レスポンスを送信し、接続をログに記録し (アクセスログが有効な場合)、適切なメトリクスで接続をカウントします。
  • このフィールドが Ignore に設定されている場合、Ingress コントローラーはレスポンスを送信せず、接続をログに記録せず、メトリクスの値を増やさずに接続を閉じます。このフィールドを Ignore に設定すると、特にネットワークエラーやポートスキャンによって接続のタイムアウトが発生した場合に、問題や侵入の検出と診断が妨げられる可能性があります。どちらの場合も、空のリクエストをログに記録すると、エラーの診断や侵入の試みの検出に役立ちます。

ingress.listenAddress

IP アドレス、NIC 名、またはその複数。

デフォルト値は、ホストのネットワーク全体になります。有効な設定可能な値は、単一の IP アドレスまたは NIC 名、あるいは複数の IP アドレスと NIC 名のリストです。

ingress.logEmptyRequests

Log または Ignore

デフォルト値は Log です。空のリクエストを受信した接続をどのようにログに記録するかを指定します。このような接続は、通常、ロードバランサーサービスのヘルスプローブ、または preconnect などの Web ブラウザーの投機的な接続から発生します。通常のリクエストをログに記録することは望ましくない場合もあります。しかし、リクエストはネットワークエラーやポートスキャンによって発生する場合もあります。その場合、ロギングはエラーの診断や侵入の試みの検出に役立ちます。

ingress.ports.http

80

表示されるデフォルトのポート。設定可能です。有効な値は、1 - 65535 の範囲に含まれる単一の一意のポートです。ports.http および ports.https フィールドの値は、同じにすることはできません。

ingress.ports.https

443

表示されるデフォルトのポート。設定可能です。有効な値は、1 - 65535 の範囲に含まれる単一の一意のポートです。ports.http および ports.https フィールドの値は、同じにすることはできません。

ingress.routeAdmissionPolicy

namespaceOwnership または wildcardPolicy

namespace 全体にわたるクレームの許可または拒否など、新しいルート要求を処理するためのポリシーを定義します。デフォルトでは、複数の namespace にまたがって、ルートが同じホスト名の異なるパスを要求することを許可します。

ingress.routeAdmissionPolicy.namespaceOwnership

Strict または InterNamespaceAllowed

namespace 全体にわたるホスト名要求の処理方法を記述します。デフォルト値は InterNamespaceAllowed です。Strict を指定すると、namespace が異なるルートが、同じホスト名を要求しなくなります。カスタマイズされた MicroShift の config.yaml で値が削除されると、InterNamespaceAllowed 値が自動的に設定されます。

  • Strict: ルートが複数の namespace 間で同じホスト名を要求することを許可しません。
  • InterNamespaceAllowed: ルートが複数の namespace 間で同じホスト名の異なるパスを要求することを許可します。

ingress.routeAdmissionPolicy.wildcardPolicy

WildcardsAllowed または WildcardsDisallowed

ワイルドカードポリシーを持つルートが Ingress コントローラーによって処理される方法を記述します。

  • WildcardsAllowed: ワイルドカードポリシーを持つルートが Ingress コントローラーによって許可されることを示します。
  • WildcardsDisallowed: ワイルドカードポリシーが None のルートのみが Ingress コントローラーによって許可されることを示します。wildcardPolicyWildcardsAllowed から WildcardsDisallowed に更新すると、ワイルドカードポリシーの Subdomain を持つ許可されたルートが機能を停止します。これらのルートは、Ingress コントローラーによって許可されるように None のワイルドカードポリシーに対して再作成される必要があります。WildcardsDisallowed はデフォルト設定です。

ingress.status

Managed または Removed

ルーターのステータス。デフォルトは Managed です。

ingress.tlsSecurityProfile

object

Ingress コントローラーの TLS 接続の設定を指定します。設定しない場合は、デフォルト値は apiservers.config.openshift.io/cluster リソースに基づきます。

ingress.tlsSecurityProfile.type

OldIntermediateModernCustom

TLS セキュリティーのプロファイルタイプを指定します。デフォルト値は Intermediate です。

OldIntermediate、および Modern のプロファイルタイプを使用する場合、有効なプロファイル設定はリリース間で変更される可能性があります。たとえば、リリース X.Y.Z にデプロイされた Intermediate プロファイルを使用する仕様がある場合、リリース X.Y.Z+1 へのアップグレードにより、新規のプロファイル設定が Ingress コントローラーに適用され、ロールアウトが生じる可能性があります。

ingress.tlsSecurityProfile.minTLSVersion

number

Ingress コントローラーの TLS バージョンを指定します。

最小 TLS バージョンは 1.1、最大 TLS バージョンは 1.3 です。

  • 設定されたセキュリティープロファイルの暗号および最小 TLS バージョンが TLSProfile ステータスに反映されます。
  • Ingress コントローラーは、Old または Custom プロファイルの TLS 1.01.1 に変換します。

ingress.tuningOptions

オブジェクト

Ingress コントローラー Pod のパフォーマンスをチューニングするためのオプションを指定します。

ingress.tuningOptions.clientFinTimeout

duration 形式の string

接続を閉じる前に、サーバー/バックエンドへのクライアントのレスポンスを待機している間、接続を開いたままにする時間を定義します。デフォルトのタイムアウトは 1s (1 秒) です。

ingress.tuningOptions.clientTimeout

duration 形式の string

クライアントのレスポンスを待機している間、接続を開いたままにする時間を定義します。デフォルトのタイムアウトは 30s (30 秒) です。

ingress.tuningOptions.headerBufferBytes

int32 formatinteger。HTTP/2 が有効な場合の最小値は 16384 です。

IngressController 接続セッション用に予約する必要があるメモリーの量をバイト単位で指定します。デフォルト値は 32768 バイトです。

  • このフィールドを設定することは、通常は推奨されません。headerBufferBytes 値が小さすぎると IngressController が壊れる可能性があり、headerBufferBytes 値が大きすぎると IngressController が必要以上に多くのメモリーを使用する可能性があるためです。

ingress.tuningOptions.headerBufferMaxRewriteBytes

int32 形式の integer。最小値は 4096 です。

IngressController 接続セッションの HTTP ヘッダーの書き換えと追加のために、headerBufferBytes から予約する必要があるメモリーの量 (バイト単位) を指定します。デフォルト値は 8192 バイトです。受信 HTTP リクエストは、headerBufferBytes バイトから headerBufferMaxRewriteBytes バイトを引いた値に制限されます。つまり、headerBufferBytes の値を headerBufferMaxRewriteBytes の値よりも大きくする必要があります。

  • このフィールドを設定することは通常は推奨されません。headerBufferMaxRewriteBytes 値が小さすぎると IngressController が壊れる可能性があり、headerBufferMaxRewriteBytes 値が大きすぎると IngressController が必要以上に多くのメモリーを使用する可能性があるためです。

ingress.tuningOptions.healthCheckInterval: ""

次のパターンを持つ string: ^(0|((\\.[0-9])?(ns|us|µs|μs|ms|s|m|h))+)$

デフォルトの healthCheckInterval 値は 5s (5 秒) です。このパラメーター値は、ルーターに設定されたバックエンドに対する次回のヘルスチェックまでの間にルーターがどれだけの時間待機するかを定義します。許容最小値は 1s、許容最大値は 2147483647ms (24.85 日) です。

  • この値は、すべてのルートのデフォルトとしてグローバルに適用されますが、ルートアノテーション router.openshift.io/haproxy.health.check.interval によってルートごとにオーバーライドされる場合があります。
  • 符号なしの 10 進数の期間文字列を指定する必要があります。それぞれの数字に小数 (任意) と単位の接尾辞をつけます。たとえば、300ms1.5h2h45m です。有効な時間単位は、nsus (または µs U+00B5 または μs U+03BC)、mssmh です。
  • このパラメーター値を 5s 未満に設定すると、TCP ヘルスチェックが頻繁に行われ、SYN パケットストームが発生するため、過剰なトラフィックが発生する可能性があります。
  • このパラメーター値を高く設定しすぎると、バックエンドサーバーが利用できないにもかかわらず、そのことがまだ検出されていないために、レイテンシーが増加する可能性があります。
  • 空または 0 の値は「指定なし」を意味し、Ingress コントローラーによってデフォルト値が選択されます。デフォルト値は今後のリリースで変更される可能性があることに注意してください。

ingress.tuningOptions.maxConnections

integer、有効な値: empty0-1、および 2000-2000000 の範囲

デフォルト値は 0 です。HAProxy プロセスごとに確立できる同時接続の最大数を定義します。この値を増やすと、消費されるシステムリソースが増える代わりに、各 Ingress コントローラー Pod がより多くの接続を処理できるようになります。

  • このフィールドが空または 0 の場合、IngressController はデフォルト値の 50000 を使用します。ただし、このデフォルトは今後のリリースで変更される可能性があります。
  • 値が -1 の場合、HAProxy は実行中のコンテナー内の ulimit 値で設定された利用可能なリソースに基づいて最大値を動的に計算します。auto を意味する -1 を選択すると、大きな値が計算されます。そのため、各 HAProxy プロセスで、現在のデフォルトの 50000 と比較して、大量のメモリーが使用されることになります。
  • 現在のオペレーティングシステムの制限より大きい値を設定すると、HAProxy プロセスが起動しなくなります。
  • 次のメトリクスを使用して、ルーターコンテナーのメモリー使用量を監視できます。

    container_memory_working_set_bytes{container=`router`,namespace=`openshift-ingress`}`
    Copy to Clipboard Toggle word wrap
  • 次のメトリクスを使用して、ルーターコンテナー内の個々の `HAProxy` プロセスのメモリー使用量を監視できます。

    container_memory_working_set_bytes{container=`router`,namespace=`openshift-ingress`}/container_processes{container=`router`,namespace=`openshift-ingress`}
    Copy to Clipboard Toggle word wrap

ingress.tuningOptions.serverFinTimeout

duration 形式の string

接続を閉じる前に、サーバーまたはバックエンドからのクライアントへのレスポンスを待機している間、接続を開いたままにする時間を定義します。デフォルトのタイムアウトは 1s です。

ingress.tuningOptions.serverTimeout

duration 形式の string

サーバーまたはバックエンドのレスポンスを待機している間、接続を開いたままにする時間を定義します。デフォルトのタイムアウトは 30s です。

ingress.tuningOptions.threadCount

int32 形式の integer。最小値は 1、最大値は 64 です。

HAProxy プロセスごとに作成されるスレッドの数を定義します。デフォルト値は 4 です。このフィールドが空の場合、デフォルト値が使用されます。

  • 通常、このフィールドを設定することは推奨しません。より多くのスレッドを作成すると、使用されるシステムリソースが増える代わりに、各 Ingress コントローラー Pod がより多くの接続を処理できるようになります。HAProxy スレッドの数を増やすと、Ingress コントローラー Pod がより多くの CPU 時間を負荷発生時に使用できるようになります。ただし、設定値が高すぎると、他の Pod の CPU が不足する可能性があります。逆に、スレッド数を減らすと、Ingress コントローラーのパフォーマンスが低下する可能性があります。

ingress.tuningOptions.tlsInspectDelay

duration 形式の string

一致するルートを検出するためにルーターがデータを保持できる時間を定義します。この間隔の設定値が短すぎると、より適合性の高い証明書を使用できる場合でも、ルーターがエッジ終端クライアントまたは再暗号化ルート用のデフォルト証明書に戻す可能性があります。

  • デフォルトの検査遅延は 5s (5 秒) です。ほとんどの場合はこの値で十分であると予想されます。特に高レイテンシーのネットワークでこの設定の値を増やすと、SSL ハンドシェイクの完了が遅れる可能性があります。設定された値はアプリケーションに対して透過的である必要があります。

ingress.tuningOptions.tunnelTimeout

duration 形式の string

トンネルがアイドル状態の間、websocket を含むトンネル接続を開いたままにする時間を定義します。デフォルトのタイムアウトは 1h (1 時間) です。

kubelet

MicroShift の低レイテンシーの手順を参照してください

kubelet ノードエージェントのパススルー設定のパラメーター。低レイテンシー設定に使用されます。デフォルト値は null です。

manifests

list of paths

マニフェストをロードするために使用する kustomization ファイルをスキャンするファイルシステム上の場所。パスのリストを設定すると、それらのパスのみをスキャンします。マニフェストの読み込みを無効にするには、空のリストに設定します。リスト内のエントリーは、複数のサブディレクトリーに一致する glob パターンに指定できます。デフォルト値は、/usr/lib/microshift/manifests/usr/lib/microshift/manifests.d//etc/microshift/manifests/etc/microshift/manifests.d/ です。

network.clusterNetwork

IP アドレスブロック

Pod IP アドレスの割り当てに使用する IP アドレスのブロック。IPv4 がデフォルトのネットワークです。デュアルスタックエントリーはサポートされています。このフィールドの最初のエントリーは、MicroShift の起動後は変更できません。デフォルトの範囲は 10.42.0.0/16 です。

network.cniPlugin

String

空の場合、または "ovnk" に設定されている場合は、Open Virtual Networking - Kubernetes (OVN-K) ネットワークプラグインをデフォルトの Container Network Interface (CNI) としてデプロイします。サポートされる値は、空、""、または "ovnk" です。"none" に設定すると CNI が削除されるため、推奨されません。OVN-K のみが MicroShift により管理されます。

network.multus.status

string

Multus Container Network Interface (CNI) のデプロイメントを制御します。デフォルトのステータスは Disabled です。値を Enabled に設定すると、Multus CNI は削除できません。

network.serviceNetwork

IP アドレスブロック

Kubernetes サービスの仮想 IP アドレスのブロック。サービスの IP アドレスプール。IPv4 がデフォルトです。デュアルスタックエントリーはサポートされています。このフィールドの最初のエントリーは、MicroShift の起動後は変更できません。デフォルトの範囲は 10.43.0.0/16 です。

network.serviceNodePortRange

range

NodePort タイプの Kubernetes サービスに許可されるポート範囲。範囲を指定しない場合は、デフォルト範囲 30000-32767 が使用されます。NodePort が指定されていないサービスは、この範囲から自動的に割り当てられます。このパラメーターは、MicroShift の開始後に更新できます。

node.hostnameOverride

string

ノードの名前。デフォルト値はホスト名です。空でない場合、この文字列はホスト名ではなく、ノードを識別するために使用されます。この値は、MicroShift の起動後は変更できません。

node.nodeIP

IPv4 アドレス

ノードの IPv4 アドレス。デフォルト値は、デフォルトルートの IP アドレスです。

nodeIPv6

IPv6 アドレス

デュアルスタック設定のノードの IPv6 アドレス。IPv4 または IPv6 のいずれかのシングルスタックでは設定できません。デフォルトは空の値または null です。

storage.driver

none または lvms

デフォルト値は空です。空の値または null フィールドのデフォルトは LVMS デプロイメントです。

storage.optionalCsiComponents

array

デフォルト値は null または空の配列です。null または空の配列の場合、デフォルトで snapshot-controller がデプロイされます。指定可能な値は csi-snapshot-controller または none です。none のエントリーは、他のいかなる値とも同時に使用できません。

telemetry.endpoint

https://infogw.api.openshift.com

テレメトリーデータが送信されるエンドポイント。報告されるメトリクスには、ユーザーデータや個人データは含まれません。デフォルト値は https://infogw.api.openshift.com です。

telemetry.status

Enabled

テレメトリーのステータスで、Enabled または Disabled になります。デフォルト値は Enabled です。

1.3.3. 設定スニペットの使用

サブジェクト代替名 (SAN) の追加など、1 つまたは 2 つの設定を指定する場合は、/etc/microshift/config.d/ 設定ディレクトリーを使用して、設定スニペット YAML ファイルをドロップインできます。新しい設定を適用するには、MicroShift を再起動する必要があります。

以前の値に戻すには、設定スニペットを削除して MicroShift を再起動します。

1.3.3.1. 設定スニペットの仕組み

/etc/microshift/config.d 内の YAML ファイルは、その設定がデフォルト値の結果であるか、ユーザーが作成した config.yaml ファイルであるかに関係なく、実行時に既存の MicroShift 設定にマージされます。設定スニペットを使用するために config.yaml ファイルを作成する必要はありません。

スニペットディレクトリー内のファイルは辞書順に並べられ、順番に実行されます。スニペットに数値の接頭辞を使用すると、各スニペットが希望の順序で読み取られるようになります。同じパラメーターの YAML が複数ある場合は、最後に読み取られたファイルが優先されます。

重要

設定スニペットは、デフォルト値とカスタマイズされた config.yaml 設定ファイルよりも優先されます。

1.3.3.2. リスト設定スニペットの例

リストまたは配列はマージされず、上書きされます。たとえば、最初のスニペットの後に読み取られる同じフィールドの追加スニペットを作成することで、SAN または SAN のリストを置き換えることができます。

MicroShift 設定ディレクトリーの内容

  • /etc/microshift/config.yaml.default または /etc/microshift/config.yaml

MicroShift 設定スニペットのディレクトリー内容の例

  • /etc/microshift/config.d/10-san.yaml
  • /etc/microshift/config.d/20-san.yaml

    10-san.yaml スニペットの例

    apiServer:
      subjectAltNames:
        - host1
        - host2
    Copy to Clipboard Toggle word wrap

    20-san.yaml スニペットの例

    apiServer:
      subjectAltNames:
        - hostZ
    Copy to Clipboard Toggle word wrap

    設定結果の例

    apiServer:
      subjectAltNames:
        - hostZ
    Copy to Clipboard Toggle word wrap

既存のリストに値を追加する場合は、その値を既存のスニペットに追加できます。たとえば、既存の SAN リストに hostZ を追加するには、新しいスニペットを作成するのではなく、既存のスニペットを編集します。

10-san.yaml スニペットの例

apiServer:
  subjectAltNames:
    - host1
    - host2
    - hostZ
Copy to Clipboard Toggle word wrap

設定結果の例

apiServer:
  subjectAltNames:
    - host1
    - host2
    - hostZ
Copy to Clipboard Toggle word wrap

1.3.3.3. オブジェクト設定スニペットの例

オブジェクトがマージされます。

10-advertiseAddress.yaml スニペットの例

apiServer:
  advertiseAddress: "microshift-example"
Copy to Clipboard Toggle word wrap

20-audit-log.yaml スニペットの例

apiServer:
  auditLog:
    maxFileAge: 12
Copy to Clipboard Toggle word wrap

設定結果の例

apiServer:
  advertiseAddress: "microshift-example"
  auditLog:
    maxFileAge: 12
Copy to Clipboard Toggle word wrap

1.3.3.4. 混合設定スニペットの例

この例では、advertiseAddress フィールドと auditLog.maxFileAge フィールドの両方の値が設定にマージされます。しかし、保持されるのは、c.comd.comsubjectAltNames 値だけです。ファイル名に含まれる番号によって、これらの値の優先度が高いことが指定されるためです。

10-advertiseAddress.yaml スニペットの例

apiServer:
  advertiseAddress: "microshift-example"
Copy to Clipboard Toggle word wrap

20-audit-log.yaml スニペットの例

apiServer:
  auditLog:
    maxFileAge: 12
Copy to Clipboard Toggle word wrap

30-SAN.yaml スニペットの例

apiServer:
  subjectAltNames:
    - a.com
    - b.com
Copy to Clipboard Toggle word wrap

40-SAN.yaml スニペットの例

apiServer:
  subjectAltNames:
    - c.com
    - d.com
Copy to Clipboard Toggle word wrap

設定結果の例

apiServer:
  advertiseAddress: "microshift-example"
  auditLog:
    maxFileAge: 12
  subjectAltNames:
    - c.com
    - d.com
Copy to Clipboard Toggle word wrap

1.3.4. アドバタイズアドレスネットワークフラグの設定

apiserver.advertiseAddress フラグは、API サーバーをクラスターのメンバーにアドバタイズする IP アドレスを指定します。このアドレスは、クラスターから到達可能である必要があります。ここでカスタム IP アドレスを設定できますが、その IP アドレスをホストインターフェイスに追加する必要もあります。このパラメーターをカスタマイズすると、MicroShift がデフォルトの IP アドレスを br-ex ネットワークインターフェイスに追加しなくなります。

重要

advertiseAddress IP アドレスをカスタマイズする場合は、ホストインターフェイスに IP アドレスを追加して、MicroShift の起動時にクラスターからその IP アドレスに到達できることを確認してください。

設定されていない場合、デフォルト値はサービスネットワークのすぐ後のサブネットに設定されます。たとえば、サービスネットワークが 10.43.0.0/16 の場合、advertiseAddress は、10.44.0.0/32 に設定されます。

1.3.5. NodePort サービスのポート範囲の拡張

serviceNodePortRange 設定では、NodePort サービスで使用できるポート範囲が拡張します。このオプションは、30000-32767 範囲内で特定の標準ポートを公開する必要がある場合に役立ちます。たとえば、クライアントデバイスは別のポートを使用できないため、デバイスはネットワーク上で 1883/tcp MQ Telemetry Transport (MQTT) ポートを公開する必要があります。

重要

NodePort がシステムポートと重複し、システムまたは MicroShift の誤動作を引き起こす可能性があります。

NodePort サービス範囲を設定するときは、次の点を考慮してください。

  • nodePort を明示的に選択せずに NodePort サービスを作成しないでください。明示的な nodePort が指定されていない場合、このポートは kube-apiserver によってランダムに割り当てられるため、予測できません。
  • デバイスの HostNetwork で公開するシステムサービスポート、MicroShift ポート、またはその他のサービスに対して NodePort サービスを作成しないでください。
  • 表 1 は、ポート範囲の拡張時に避けるべきポートを示しています。

    Expand
    表1.2 回避するポート
    ポート説明

    22/tcp

    SSH ポート

    80/tcp

    OpenShift Router HTTP エンドポイント

    443/tcp

    OpenShift Router HTTPS エンドポイント

    1936/tcp

    現在公開されていない openshift-router のメトリクスサービス

    2379/tcp

    etcd ポート

    2380/tcp

    etcd ポート

    6443

    kubernetes API

    8445/tcp

    openshift-route-controller-manager

    9537/tcp

    cri-o metrics

    10250/tcp

    kubelet

    10248/tcp

    kubelet healthz ポート

    10259/tcp

    kube スケジューラー

第2章 IPv6 シングルまたはデュアルスタックネットワークの設定

シングルスタックまたはデュアルスタックネットワークモードのいずれかで、IPv6 ネットワークプロトコルを使用できます。

2.1. MicroShift を使用した IPv6 ネットワーク

MicroShift サービスのデフォルトはクラスター全体の IPv4 アドレスファミリーです。ただし、サポート対象のプラットフォームでは、IPv6 シングルスタックおよび IPv4/IPv6 デュアルスタックネットワークを利用できます。

  • MicroShift 設定ファイルで IPv6 の値を設定してサービスを再起動すると、OVN-Kubernetes ネットワークプラグインによって管理される設定が自動的に更新されます。
  • デュアルスタックネットワークへの移行後に、新規および既存の Pod の両方でデュアルスタックネットワークが有効化されます。
  • コントロールプレーンおよびその他のサービスなど、クラスター全体の IPv6 アクセスが必要な場合は、以下の設定例を使用します。MicroShift Multus Container Network Interface (CNI) プラグインは、Pod の IPv6 を有効化できます。
  • デュアルスタックネットワークの場合、各 MicroShift クラスターネットワークとサービスネットワークは、クラスターおよびサービスネットワーク設定パラメーター内で最大 2 つの値をサポートします。
重要

MicroShift を初めて起動する前に IPv6 を計画します。クラスターを異なる IP ファミリー間で切り替えることは、デフォルトのシングルスタックからデュアルスタックネットワーキングに移行する場合を除き、サポートされていません。

IPv6 シングルスタックまたは IPv4/IPv6 デュアルスタックのいずれかのネットワークを設定する場合は、アプリケーション Pod とサービスを再起動する必要があります。再起動しない場合、Pod とサービスはデフォルトの IP ファミリーで設定されたままとなります。

2.2. IPv6 シングルスタックネットワークの設定

MicroShift サービス設定ファイルを更新することで、IPv6 ネットワークプロトコルを使用できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
  • ホストには、デフォルトを含む IPv6 アドレスおよび IPv6 ルートがある。

手順

  1. /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し (まだ作成していない場合)、config.yaml という名前を付けます。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. MicroShift YAML の network セクションのデフォルト値を、有効な値に置き換えます。

    シングルスタック IPv6 ネットワーク設定の例

    apiServer:
    # ...
    network:
      clusterNetwork:
      - fd01::/48 
    1
    
      serviceNetwork:
      - fd02::/112 
    2
    
    node:
      nodeIP: 2600:1f14:1c48:ee00:2d76:3190:5bc2:5aef 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    64 未満の CIDR 値で clusterNetwork を指定します。
    2
    接頭辞が 112 である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が 112 の場合、IP アドレスは 112 から 128 ビットに割り当てられます。
    3
    ノード IP アドレスの例。有効な値は、IPv6 アドレスファミリーの IP アドレスです。IPv4 ネットワークも存在する場合に限り、IPv6 アドレスを指定する必要があります。IPv4 ネットワークが存在しない場合、MicroShift サービスは再起動時にこの値を自動的に入力します。
  4. その他の必要な設定を完了してから、次のコマンドを実行して MicroShift を起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。

    $ oc get node -o jsonpath='{.items[].spec.podCIDRs[]}'
    Copy to Clipboard Toggle word wrap

    出力例

    fd01::/48
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、Pod のステータスを取得します。

    $ oc get pod -A -o wide
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE                  NAME                                      READY   STATUS    RESTARTS   AGE   IP                      NODE           NOMINATED NODE   READINESS GATES
    kube-system                csi-snapshot-controller-bb7cb654b-rqrt6   1/1     Running   0          65s   fd01:0:0:1::5           microshift-9   <none>           <none>
    openshift-dns              dns-default-cjn66                         2/2     Running   0          62s   fd01:0:0:1::9           microshift-9   <none>           <none>
    openshift-dns              node-resolver-ppnjb                       1/1     Running   0          63s   2001:db9:ca7:ff::1db8   microshift-9   <none>           <none>
    openshift-ingress          router-default-6d97d7b8b6-wdtmg           1/1     Running   0          61s   fd01:0:0:1::8           microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-master-gfvp5                      4/4     Running   0          63s   2001:db9:ca7:ff::1db8   microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-node-bnpjh                        1/1     Running   0          63s   2001:db9:ca7:ff::1db8   microshift-9   <none>           <none>
    openshift-service-ca       service-ca-5d7bd9db6-j25bd                1/1     Running   0          60s   fd01:0:0:1::4           microshift-9   <none>           <none>
    openshift-storage          lvms-operator-656cd9b59b-bwr47            1/1     Running   0          63s   fd01:0:0:1::7           microshift-9   <none>           <none>
    openshift-storage          vg-manager-f7dmk                          1/1     Running   0          27s   fd01:0:0:1::a           microshift-9   <none>           <none>
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して、サービスのステータスを取得します。

    $ oc get svc -A
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE           NAME                            TYPE           CLUSTER-IP   EXTERNAL-IP                                             PORT(S)                      AGE
    default             kubernetes                      ClusterIP      fd02::1      <none>                                                  443/TCP                      3m42s
    openshift-dns       dns-default                     ClusterIP      fd02::a      <none>                                                  53/UDP,53/TCP,9154/TCP       2m58s
    openshift-ingress   router-default                  LoadBalancer   fd02::f2e6   2001:db9:ca7:ff::1db8,fd01:0:0:1::2,fd02::1:0,fd69::2   80:31133/TCP,443:31996/TCP   2m58s
    openshift-ingress   router-internal-default         ClusterIP      fd02::c55e   <none>                                                  80/TCP,443/TCP,1936/TCP      2m58s
    openshift-storage   lvms-operator-metrics-service   ClusterIP      fd02::7afb   <none>                                                  443/TCP                      2m58s
    openshift-storage   lvms-webhook-service            ClusterIP      fd02::d8dd   <none>                                                  443/TCP                      2m58s
    openshift-storage   vg-manager-metrics-service      ClusterIP      fd02::fc1    <none>                                                  443/TCP                      2m58s
    Copy to Clipboard Toggle word wrap

2.3. MicroShift 起動前の IPv6 デュアルスタックネットワークの設定

サービスを起動する前に設定ファイルを使用して、IPv4 および IPv6 アドレスファミリーをサポートするデュアルスタックネットワークで実行するように MicroShift クラスターを設定できます。

  • 設定の最初の IP ファミリーは、クラスター内のプライマリー IP スタックです。
  • クラスターがデュアルスタックネットワークで実行された後に、それらを再起動して、デュアルスタック用のアプリケーション Pod およびアドオンサービスを有効化します。
重要

OVN-Kubernetes ネットワークプラグインでは、IPv4 と IPv6 の両方のデフォルトルートが同じネットワークデバイスに存在する必要があります。別のネットワークデバイス上の IPv4 および IPv6 のデフォルトルートはサポートされていません。

重要

IPv6 を必要とするデュアルスタックネットワークを使用する場合、::FFFF:198.51.100.1 などの IPv4 にマッピングされた IPv6 アドレスは使用できません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
  • ホストには、それぞれのデフォルトを含む、IPv4 と IPv6 の両方のアドレスとルートがあります。
  • ホストには、少なくとも 2 つの L3 ネットワーク (IPv4 と IPv6) があります。

手順

  1. /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し (まだ作成していない場合)、config.yaml という名前を付けます。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. MicroShift を起動していない場合は、MicroShift YAML の network セクションのデフォルト値を有効な値に置き換えます。

    ネットワーク割り当てを使用したデュアルスタック IPv6 ネットワーク設定の例

    apiServer:
    # ...
    apiServer:
      subjectAltNames:
      - 192.168.113.117
      - 2001:db9:ca7:ff::1db8
    network:
      clusterNetwork:
      - 10.42.0.0/16
      - fd01::/48 
    1
    
      serviceNetwork:
      - 10.43.0.0/16
      - fd02::/112 
    2
    
    node:
      nodeIP: 192.168.113.117 
    3
    
      nodeIPv6: 2001:db9:ca7:ff::1db8 
    4
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    64 未満の CIDR 値で IPv6 clusterNetwork を指定します。
    2
    接頭辞が 112 である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が 112 の場合、IP アドレスは 112 から 128 ビットに割り当てられます。
    3
    ノード IP アドレスの例。IPv4 アドレスファミリーである必要があります。
    4
    デュアルスタック設定のノード IP アドレスの例。IPv6 アドレスファミリーである必要があります。デュアルスタックネットワークでのみ設定できます。
  4. 必要なその他の MicroShift 設定を完了してから、次のコマンドを実行して MicroShift を起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap
  5. 必要に応じてアプリケーション Pod とサービスの IP ファミリーポリシーをリセットし、それらのアプリケーション Pod とサービスを再起動してデュアルスタックネットワークを有効化します。簡単な例は、「アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット」を参照してください。

検証

  1. 次の手順に従って、すべてのシステムサービスと Pod に 2 つの IP アドレス (ファミリーごとに 1 つずつ) があることを確認できます。

    1. 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。

      $ oc get pod -n openshift-ingress router-default-5b75594b4-w7w6s -o jsonpath='{.status.podIPs}'
      Copy to Clipboard Toggle word wrap

      出力例

      [{"ip":"10.42.0.4"},{"ip":"fd01:0:0:1::4"}]
      Copy to Clipboard Toggle word wrap

    2. 次のコマンドを実行して、ホストネットワーク Pod によって定義されたネットワークを取得します。

      $ oc get pod -n openshift-ovn-kubernetes ovnkube-master-2fm2k -o jsonpath='{.status.podIPs}'
      Copy to Clipboard Toggle word wrap

      出力例

      [{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
      Copy to Clipboard Toggle word wrap

2.4. MicroShift クラスターの IPv6 デュアルスタックネットワークへの移行

MicroShift 設定ファイルのサービスおよびクラスターネットワークパラメーターに 2 つのエントリーを設定することで、シングルスタッククラスターを IPv4 および IPv6 アドレスファミリーをサポートするデュアルスタッククラスターネットワークに変換できます。

  • 設定の最初の IP ファミリーは、クラスター内のプライマリー IP スタックです。
  • MicroShift システム Pod とサービスは、MicroShift の再起動時に自動的に更新されます。
  • クラスターがデュアルスタックネットワークに移行し、再起動したら、それらを再起動して、デュアルスタックネットワーク用のワークロード Pod とサービスを有効化します。
重要

OVN-Kubernetes ネットワークプラグインでは、IPv4 と IPv6 の両方のデフォルトルートが同じネットワークデバイスに存在する必要があります。別のネットワークデバイス上の IPv4 および IPv6 のデフォルトルートはサポートされていません。

重要

IPv6 を必要とするデュアルスタックネットワークを使用する場合、::FFFF:198.51.100.1 などの IPv4 にマッピングされた IPv6 アドレスは使用できません。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • クラスターが OVN-Kubernetes ネットワークプラグインを使用している。
  • ホストには、それぞれのデフォルトを含む、IPv4 と IPv6 の両方のアドレスとルートがあります。
  • ホストには、少なくとも 2 つの L3 ネットワーク (IPv4 と IPv6) があります。

手順

  1. /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し (まだ作成していない場合)、config.yaml という名前を付けます。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. 有効な値を使用して、MicroShift YAML の network セクションに IPv6 設定を追加します。

    警告

    再起動と移行後も同じ最初のエントリーを保持する必要があります。これは、シングルスタックからデュアルスタック、またはデュアルスタックからシングルスタックへの移行など、あらゆる移行に当てはまります。最初のエントリーへの変更が必要な場合は、etcd データベースの完全な消去が必要になります。これにより、アプリケーションデータの損失が発生する可能性があり、サポートされていません。

    1. 有効な値を使用して、MicroShift YAML の network セクションにある 2 番目のネットワークの IPv6 設定を追加します。
    2. MicroShift config.yamlnetwork セクションにネットワーク割り当てを追加して、IPv6 をセカンダリーネットワークとして使用するデュアルスタックを有効化します。

      ネットワーク割り当てによるデュアルスタック IPv6 設定の例

      # ...
      apiServer:
        subjectAltNames:
        - 192.168.113.117
        - 2001:db9:ca7:ff::1db8 
      1
      
      network:
        clusterNetwork:
        - 10.42.0.0/16 
      2
      
        - fd01::/48 
      3
      
        serviceNetwork:
        - 10.43.0.0/16
        - fd02::/112 
      4
      
      node:
        nodeIP: 192.168.113.117 
      5
      
        nodeIPv6: 2001:db9:ca7:ff::1db8 
      6
      
      # ...
      Copy to Clipboard Toggle word wrap

      1
      IPv6 ノードアドレス:
      2
      IPv4 ネットワーク: 24 未満の CIDR 値で clusterNetwork を指定します。
      3
      IPv6 ネットワーク: 64 未満の CIDR 値で clusterNetwork を指定します。
      4
      接頭辞が 112 である IPv6 CIDR を指定します。Kubernetes は最低レベルの 16 ビットのみを使用します。接頭辞が 112 の場合、IP アドレスは 112 から 128 ビットに割り当てられます。
      5
      ノード IP アドレスの例。以前の IPv4 IP アドレスを維持します。
      6
      ノード IP アドレスの例。IPv6 アドレスファミリーである必要があります。
  4. 必要なその他の設定を完了してから、次のコマンドを実行して MicroShift を再起動します。

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap
  5. 必要に応じてアプリケーション Pod とサービスの IP ファミリーポリシーをリセットし、それらのアプリケーション Pod とサービスを再起動してデュアルスタックネットワークを有効化します。簡単な例は、「アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット」を参照してください。

検証

次の手順に従って、すべてのシステムサービスと Pod に 2 つの IP アドレス (ファミリーごとに 1 つずつ) があることを確認できます。

  1. 次のコマンドを実行して、Pod のステータスを取得します。

    $ oc get pod -A -o wide
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE                  NAME                                      READY   STATUS    RESTARTS        AGE     IP                NODE           NOMINATED NODE   READINESS GATES
    kube-system                csi-snapshot-controller-bb7cb654b-7s5ql   1/1     Running   0               46m     10.42.0.6         microshift-9   <none>           <none>
    openshift-dns              dns-default-zxkqn                         2/2     Running   0               46m     10.42.0.5         microshift-9   <none>           <none>
    openshift-dns              node-resolver-r2h5z                       1/1     Running   0               46m     192.168.113.117   microshift-9   <none>           <none>
    openshift-ingress          router-default-5b75594b4-228z7            1/1     Running   0               2m5s    10.42.0.3         microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-master-bltk7                      4/4     Running   2 (2m32s ago)   2m36s   192.168.113.117   microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-node-9ghgs                        1/1     Running   2 (2m32s ago)   46m     192.168.113.117   microshift-9   <none>           <none>
    openshift-service-ca       service-ca-5d7bd9db6-qgwgw                1/1     Running   0               46m     10.42.0.7         microshift-9   <none>           <none>
    openshift-storage          lvms-operator-656cd9b59b-8rpf4            1/1     Running   0               46m     10.42.0.8         microshift-9   <none>           <none>
    openshift-storage          vg-manager-wqmh4                          1/1     Running   2 (2m39s ago)   46m     10.42.0.10        microshift-9   <none>           <none>
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、OVN-K ネットワークプラグインによって定義されたネットワークを取得します。

    $ oc get pod -n openshift-ovn-kubernetes ovnkube-master-bltk7 -o jsonpath='{.status.podIPs}'
    Copy to Clipboard Toggle word wrap

    出力例

    [{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して、ノードリソースで定義されたネットワークを取得します。

    $ oc get pod -n openshift-ingress router-default-5b75594b4-228z7 -o jsonpath='{.status.podIPs}'
    Copy to Clipboard Toggle word wrap

    出力例

    [{"ip":"10.42.0.3"},{"ip":"fd01:0:0:1::3"}]
    Copy to Clipboard Toggle word wrap

注記

シングルスタックネットワークに戻すには、ネットワークの 2 番目のエントリーを削除し、デュアルスタックに移行する前に設定されたシングルスタックに戻ることができます。

2.5. アプリケーション Pod およびサービスの IP ファミリーポリシーのリセット

デフォルトの ipFamilyPolicy 設定値 PreferSingleStack は、MicroShift 設定をデュアルスタックネットワークに更新した後、すべてのサービスで自動的に更新されません。サービスおよびアプリケーション Pod でデュアルスタックネットワークを有効化するには、ipFamilyPolicy 値を更新する必要があります。

前提条件

  • MicroShift config.yaml を使用して、IPv6 アドレスファミリーを含むデュアルスタックネットワークを定義している。

手順

  1. 以下の例を使用して、spec.ipFamilyPolicy フィールドをサービスまたは Pod 内のデュアルスタックネットワークの有効な値に設定します。

    サービスのデュアルスタックネットワーク設定の例

    kind: Service
    apiVersion: v1
    metadata:
      name: microshift-new-service
      labels: app: microshift-application
    spec:
      type: NodePort
      ipFamilyPolicy: `PreferDualStack` 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    必須。デュアルスタックネットワークの有効な値は、PreferDualStackRequireDualStack です。設定する値は、アプリケーションの要件によって異なります。PreferSingleStack は、ipFamilyPolicy フィールドのデフォルト値です。
  2. hostNetwork が定義されていないアプリケーション Pod を再起動します。hostNetwork が定義されている Pod は、ipFamilyPolicy 値を更新するために再起動する必要はありません。
注記

ipFamilyPolicy 値が更新されると、MicroShift システムサービスと Pod が自動的に更新されます。

2.6. OVN-Kubernetes IPv6 とデュアルスタックの制限

OVN-Kubernetes ネットワークプラグインには、次の制限があります。

  • デュアルスタックネットワーク用に設定されたクラスターの場合、IPv4 と IPv6 の両方のトラフィックはデフォルトゲートウェイと同じネットワークインターフェイスを使用する必要があります。

    この要件が満たされない場合には、ovnkube-node デーモンセットのホストにある Pod は、CrashLoopBackOff 状態になります。

    oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml のようなコマンドで Pod を表示すると、以下の出力のように、status フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。

    I1006 16:09:50.985852   60651 helper_linux.go:73] Found default gateway interface br-ex 192.168.127.1
    I1006 16:09:50.985923   60651 helper_linux.go:73] Found default gateway interface ens4 fe80::5054:ff:febe:bcd4
    F1006 16:09:50.985939   60651 ovnkube.go:130] multiple gateway interfaces detected: br-ex ens4
    Copy to Clipboard Toggle word wrap

    唯一の解決策は、両方の IP ファミリーがデフォルトゲートウェイに同じネットワークインターフェイスを使用するように、ホストネットワークを再設定することです。

  • デュアルスタックネットワーク用に設定されたクラスターの場合、IPv4 と IPv6 の両方のルーティングテーブルにデフォルトゲートウェイが含まれている必要があります。

    この要件が満たされない場合には、ovnkube-node デーモンセットのホストにある Pod は、CrashLoopBackOff 状態になります。

    oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml のようなコマンドで Pod を表示すると、以下の出力のように、status フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。

    I0512 19:07:17.589083  108432 helper_linux.go:74] Found default gateway interface br-ex 192.168.123.1
    F0512 19:07:17.589141  108432 ovnkube.go:133] failed to get default gateway interface
    Copy to Clipboard Toggle word wrap

    唯一の解決策として、両方の IP ファミリーにデフォルトゲートウェイが含まれるようにホストネットワークを再設定できます。

  • クラスターの MachineConfig カスタムリソース (CR) の kernelArgument セクションで ipv6.disable パラメーターを 1 に設定すると、OVN-Kubernetes Pod が CrashLoopBackOff 状態になります。さらに、Network Operator が Degraded 状態のままであるため、クラスターを新しいバージョンの Red Hat build of MicroShift に更新すると失敗します。Red Hat はクラスターの IPv6 アドレスの無効化をサポートしていないため、ipv6.disable パラメーターを 1 に設定しないでください。

第3章 MicroShift クラスターの Ingress 制御の使用

MicroShift 設定ファイルの Ingress コントローラーのオプションを使用して、クラスター外部から Pod とサービスにアクセスできるようにします。

3.1. MicroShift での Ingress 制御の使用

MicroShift クラスターを作成すると、クラスター上で実行されている各 Pod とサービスに IP アドレスが割り当てられます。これらの IP アドレスには、近くで実行されている他の Pod やサービスからはデフォルトでアクセスできますが、外部クライアントからはアクセスできません。MicroShift は、OpenShift Container Platform IngressController API の最小限の実装を使用して、クラスターサービスへの外部アクセスを可能にします。

より多くの設定オプションを使用すると、特定のニーズに合わせて Ingress を微調整できます。拡張した Ingress 制御を使用するには、MicroShift 設定ファイル内のパラメーターを更新し、サービスを再起動します。Ingress 設定は、次の例のようにさまざまな形で役立ちます。

  • アプリケーションがクライアントからのリクエストの処理を開始したが、アプリケーションが応答する前に接続が閉じられた場合は、設定ファイルの ingress.tuningOptions.serverTimeout パラメーターをより高い値に設定すると、サーバーからの応答速度に対応できます。
  • クラスター上で実行されているアプリケーションが接続を適切に閉じないためにルーターに多くの接続が開いている場合は、ingress.tuningOptions.serverTimeout および spec.tuningOptions.serverFinTimeout パラメーターをより低い値に設定すると、それらの接続をより早く閉じるように強制できます。
  • クライアント証明書を検証するように Ingress コントローラーを設定する必要がある場合は、ingress.clientTLS パラメーターを使用して、config map への参照である clientCA 値を設定できます。config map には、クライアントの証明書を検証するために使用される PEM でエンコードされた CA 証明書バンドルが含まれます。必要に応じて、証明書サブジェクトフィルターのリストも設定できます。
  • Ingress コントローラーの TLS セキュリティープロファイルを設定する必要がある場合は、ingress.tlsSecurityProfile パラメーターを使用して、デフォルトまたはカスタムの個別の TLS セキュリティープロファイルを指定できます。TLS セキュリティープロファイルは、Ingress コントローラーの TLS 接続の最小 TLS バージョンと TLS 暗号を定義します。TLS セキュリティープロファイルが設定されていない場合、デフォルト値は API サーバーに設定された TLS セキュリティープロファイルに基づいています。
  • 新しいルート要求を処理するためのポリシーを定義する必要がある場合は、routeAdmission パラメーターを使用して、namespace 全体の要求を許可または拒否できます。routeAdmission パラメーターを設定すると、namespace 全体のホスト名要求の処理方法と、ワイルドカードポリシーを持つルートが Ingress コントローラーによって処理される方法を記述できます。

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

第4章 LVMS CSI プロバイダーまたは CSI スナップショットの無効化

MicroShift を設定して、組み込みの Logical Volume Manager Storage (LVMS) Container Storage Interface (CSI) プロバイダーまたは CSI スナップショット機能を無効にし、RAM、CPU、ストレージなどのランタイムリソースの使用を減らすことができます。

4.1. CSI スナップショット実装を実行するデプロイメントの無効化

以下の手順に従って、CSI 実装 Pod のインストールを無効にします。

重要

この手順は、MicroShift をインストールして実行する前に設定ファイルを定義するユーザーを対象としています。MicroShift がすでに開始されている場合、CSI スナップショット実装が実行されます。ユーザーは、アンインストール手順に従って手動で削除する必要があります。

注記

MicroShift は、CSI スナップショット実装 Pod を削除しません。起動プロセス中に CSI スナップショット実装 Pod のインストールを無効化するように MicroShift を設定する必要があります。

手順

  1. /etc/microshift/config.yaml の MicroShift 設定ファイルの storage セクションで、optionalCsiComponents 値を入力して、CSI スナップショットコントローラーのインストールを無効化します。

    # ...
      storage: {} 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    許可される値は次のとおりです。
    • optionalCsiComponents は定義しません。
    • optionalCsiComponents フィールドを空の値 ([]) または単一の空の文字列要素 ([""]) で指定します。
    • optionalCsiComponents は、使用可能な値 (snapshot-controller または none) に指定します。none のエントリーは、他のいかなる値とも同時に使用できません。

      注記

      optionalCsiComponents 値が空または null の場合、MicroShift はデフォルトで snapshot-controller をデプロイします。

  2. optionalCsiComponents フィールドが config.yaml のサポートされている値で指定された後、次のコマンドを実行して MicroShift を起動します。

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap
    注記

    MicroShift は、再起動後に無効化されたコンポーネントを再デプロイしません。

4.2. CSI ドライバー実装を実行するデプロイメントの無効化

以下の手順に従って、CSI 実装 Pod のインストールを無効にします。

重要

この手順は、MicroShift をインストールして実行する前に設定ファイルを定義するユーザーを対象としています。MicroShift がすでに起動されている場合、CSI ドライバー実装が実行されます。ユーザーは、アンインストール手順に従って手動で削除する必要があります。

注記

MicroShift は、CSI ドライバー実装 Pod を削除しません。起動プロセス中に CSI ドライバー実装 Pod のインストールを無効化するように MicroShift を設定する必要があります。

手順

  1. /etc/microshift/config.yaml の MicroShift 設定ファイルの storage セクションの下に driver 値を入力して、CSI ドライバーのインストールを無効化します。

    # ...
      storage
       driver:
       - "none" 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    有効な値は none または lvms です。
    注記

    デフォルトでは、driver 値は空または null で、LVMS がデプロイされています。

  2. 次のコマンドを実行して、driver フィールドが、/etc/microshift/config.yaml ファイルでサポートされている値で指定された後に MicroShift を開始します。

    $ sudo systemctl enable --now microshift
    Copy to Clipboard Toggle word wrap
    注記

    MicroShift は、再起動操作後に無効化されたコンポーネントを再デプロイしません。

第5章 greenboot スクリプトのステータスの確認

kustomize マニフェスト以外のツールを使用して MicroShift API を通じてアプリケーションをデプロイしたり、その他の変更を加えたりするには、greenboot ヘルスチェックが完了するまで待つ必要があります。これにより、greenboot が rpm-ostree システムを以前の状態にロールバックしても、変更が失われなくなります。

greenboot-healthcheck サービスは 1 回実行してから終了します。greenboot が終了し、システムが正常な状態になったら、設定の変更とデプロイメントを続行できます。

5.1. greenboot ヘルスチェックのステータスの確認

システムに変更を加える前、またはトラブルシューティング中に、greenboot ヘルスチェックのステータスを確認します。次のコマンドのいずれかを使用すると、greenboot スクリプトの実行が完了したことを確認できます。

手順

  • ヘルスチェックステータスのレポートを表示するには、次のコマンドを使用します。

    $ systemctl show --property=SubState --value greenboot-healthcheck.service
    Copy to Clipboard Toggle word wrap
    • start が出力される場合、greenboot チェックがまだ実行中であることを意味します。
    • exited が出力される場合、チェックが合格し、greenboot が終了したことを意味します。Greenboot は、システムが正常な状態の場合、green.d ディレクトリー内のスクリプトを実行します。
    • failed の出力は、チェックが合格しなかったことを意味します。システムがこの状態にある場合、Greenboot は red.d ディレクトリー内のスクリプトを実行し、システムを再起動する可能性があります。
  • サービスの数値終了コードを示すレポートを表示するには、次のコマンドを使用します。0 は成功を、0 以外の値は失敗を意味します。

    $ systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
    Copy to Clipboard Toggle word wrap
  • Boot Status is GREEN - Health Check SUCCESS など、ブートステータスに関するメッセージを表示するレポートを表示するには、次のコマンドを使用します。

    $ cat /run/motd.d/boot-status
    Copy to Clipboard Toggle word wrap

第6章 kubeconfig を使用したクラスターアクセス

MicroShift デプロイメントで kubeconfig ファイルがどのように使用されるかを説明します。CLI ツールは、kubeconfig ファイルを使用してクラスターの API サーバーと通信します。これらのファイルには、クラスターの詳細、IP アドレス、および認証に必要なその他の情報が含まれています。

6.1. クラスターアクセスを設定するための Kubeconfig ファイル

MicroShift で使用される kubeconfig ファイルの 2 つのカテゴリーは、ローカルアクセスとリモートアクセスです。MicroShift が起動するたびに、API サーバーへのローカルおよびリモートアクセスのための kubeconfig ファイルのセットが生成されます。これらのファイルは、既存の設定情報を使用して /var/lib/microshift/resources/kubeadmin/ ディレクトリーに生成されます。

各アクセスタイプには、異なる認証局 (CA) によって署名された異なる認証証明書が必要です。複数の kubeconfig ファイルを生成することで、このニーズに対応できます。

それぞれの場合に必要なアクセスタイプに適切な kubeconfig ファイルを使用して、認証の詳細を提供できます。MicroShift kubeconfig ファイルの内容は、デフォルトの組み込み値または config.yaml ファイルによって決まります。

注記

クラスターにアクセスするには、kubeconfig ファイルが存在する必要があります。値は、組み込みのデフォルト値、または config.yaml (作成されている場合) から適用されます。

kubeconfig ファイルの内容の例

/var/lib/microshift/resources/kubeadmin/
├── kubeconfig 
1

├── alt-name-1 
2

│   └── kubeconfig
├── 1.2.3.4 
3

│   └── kubeconfig
└── microshift-rhel9 
4

    └── kubeconfig
Copy to Clipboard Toggle word wrap

1
ローカルホスト名。ホストのメイン IP アドレスは常にデフォルトです。
2
API サーバー証明書のサブジェクト代替名。
3
DNS 名。
4
MicroShift のホスト名。

6.2. ローカルアクセスの kubeconfig ファイル

ローカルアクセスの kubeconfig ファイルは /var/lib/microshift/resources/kubeadmin/kubeconfig に書き込まれます。この kubeconfig ファイルは、localhost を使用した API サーバーへのアクセスを提供します。クラスターをローカルに接続する場合は、このファイルを選択します。

ローカルアクセス用の kubeconfig の内容例

clusters:
- cluster:
    certificate-authority-data: <base64 CA>
    server: https://localhost:6443
Copy to Clipboard Toggle word wrap

localhostkubeconfig ファイルは、同じホストから API サーバーに接続するクライアントからのみ使用できます。ファイル内の証明書はリモート接続では機能しません。

6.2.1. MicroShift クラスターへのローカルアクセス

以下の手順に従って、kubeconfig ファイルを使用して MicroShift クラスターをローカルでアクセスします。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. オプション: Red Hat Enterprise Linux (RHEL) マシンに ~/.kube/ フォルダーがない場合は、次のコマンドを実行してこのフォルダーを作成します。

    $ mkdir -p ~/.kube/
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、生成されたローカルアクセス kubeconfig ファイルを ~/.kube/ ディレクトリーにコピーします。

    $ sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、~/.kube/config ファイルの権限を更新します。

    $ chmod go-r ~/.kube/config
    Copy to Clipboard Toggle word wrap

検証

  • 次のコマンドを入力して、MicroShift が実行されていることを確認します。

    $ oc get pods -A
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
    default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
    kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
    openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
    openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
    openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
    openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
    openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
    openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m
    Copy to Clipboard Toggle word wrap

    注記

    この出力例は、基本的な MicroShift を示しています。オプションの RPM をインストールしている場合は、それらのサービスを実行している Pod のステータスも出力に表示されるはずです。

6.3. リモートアクセスの kubeconfig ファイル

MicroShift クラスターが外部ソースから API サーバーに接続する場合は、SAN フィールド内のすべての代替名を持つ証明書が検証に使用されます。MicroShift は、hostname 値を使用して外部アクセス用のデフォルトの kubeconfig を生成します。デフォルトは、デフォルトの kubeconfig ファイルの <node.hostnameOverride><node.nodeIP>、および api.<dns.baseDomain> パラメーター値に設定されます。

/var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig ファイルは、マシンの hostname、またはオプションが設定されている場合は node.hostnameOverride を使用して、API サーバーにアクセスします。kubeconfig ファイルの CA は、外部からアクセスされたときに証明書を検証できます。

リモートアクセス用の kubeconfig デフォルトファイルの内容例

clusters:
- cluster:
    certificate-authority-data: <base64 CA>
    server: https://microshift-rhel9:6443
Copy to Clipboard Toggle word wrap

6.3.1. リモートアクセスのカスタマイズ

異なる IP アドレスまたはホスト名でクラスターにアクセスするために、複数のリモートアクセス kubeconfig ファイル値を生成できます。apiServer.subjectAltNames パラメーターのエントリーごとに追加の kubeconfig ファイルが生成されます。IP 接続中にホストからリモートアクセス kubeconfig ファイルをコピーし、それを使用して他のワークステーションから API サーバーにアクセスできます。

6.4. リモートアクセス用の追加の kubeconfig ファイルの生成

デフォルトのリモートアクセスファイルが提供するものより多くのホスト名または IP アドレスが必要な場合は、追加の kubeconfig ファイルを生成して使用できます。

重要

設定の変更を実装するには、MicroShift を再起動する必要があります。

前提条件

  • MicroShift の config.yaml が作成されている。

手順

  1. オプション: config.yaml の内容を表示できます。以下のコマンドを実行します。

    $ cat /etc/microshift/config.yaml
    Copy to Clipboard Toggle word wrap
  2. オプション: リモートアクセス kubeconfig ファイルの内容を表示できます。以下のコマンドを実行します。

    $ cat /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig
    Copy to Clipboard Toggle word wrap
    重要

    追加のリモートアクセス kubeconfig ファイルには、Red Hat build of MicroShift config.yaml ファイルにリストされているサーバー名のいずれかを含める必要があります。追加の kubeconfig ファイルも検証に同じ CA を使用する必要があります。

  3. 追加の DNS 名、SAN、または外部 IP アドレス用に追加の kubeconfig ファイルを生成するには、必要なエントリーを apiServer.subjectAltNames フィールドに追加します。次の例では、使用される DNS 名は alt-name-1、IP アドレスは 1.2.3.4 です。

    追加の認証値を含む config.yaml の例

    dns:
      baseDomain: example.com
    node:
      hostnameOverride: "microshift-rhel9" 
    1
    
      nodeIP: 10.0.0.1
    apiServer:
      subjectAltNames:
      - alt-name-1 
    2
    
      - 1.2.3.4 
    3
    Copy to Clipboard Toggle word wrap

    1
    ホスト名
    2
    DNS name
    3
    IP アドレスまたは範囲
  4. MicroShift を再起動して設定の変更を適用し、次のコマンドを実行して必要な kubeconfig ファイルを自動生成します。

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap
  5. 追加のリモートアクセス kubeconfig ファイルの内容を確認するには、config.yaml にリストされている名前または IP アドレスを cat コマンドに挿入します。たとえば、次のコマンド例では alt-name-1 が使用されています。

    $ cat /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig
    Copy to Clipboard Toggle word wrap
  6. クラスターの接続に使用する SAN または IP アドレスを含む、使用する kubeconfig ファイルを選択します。この例では、cluster.server フィールドに `alt-name-1` を含む kubeconfig が正しいファイルです。

    追加の kubeconfig ファイルの内容の例

    clusters:
    - cluster:
        certificate-authority-data: <base64 CA>
        server: https://alt-name-1:6443 
    1
    Copy to Clipboard Toggle word wrap

    1
    /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig ファイルの値は、apiServer.subjectAltNames 設定値からのものです。
注記

これらのパラメーターはすべて、API サーバーの外部提供証明書に共通名 (CN) およびサブジェクト代替名 (SAN) として含まれています。

6.4.1. MicroShift クラスターへのリモートアクセス用にファイアウォールを開く

リモートユーザーが MicroShift クラスターにアクセスできるように、次の手順を使用してファイアウォールを開きます。この手順は、ワークステーションユーザーがリモートでクラスターにアクセスする前に完了する必要があります。

この手順では、user@microshift は、MicroShift ホストマシン上のユーザーであり、別のワークステーション上のリモートユーザーがアクセスできるようにそのマシンをセットアップする責任があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスター管理者の権限がある。

手順

  • MicroShift ホストの user@microshift として、次のコマンドを実行して、Kubernetes API サーバー (6443/tcp) のファイアウォールポートを開きます。

    [user@microshift]$ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp && sudo firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

検証

  • user@microshift として次のコマンドを実行して、MicroShift が入力されていることを確認します。

    $ oc get pods -A
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
    default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
    kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
    openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
    openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
    openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
    openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
    openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
    openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m
    Copy to Clipboard Toggle word wrap

    注記

    この出力例は、基本的な MicroShift を示しています。オプションの RPM をインストールしている場合は、それらのサービスを実行している Pod のステータスも出力に表示されるはずです。

6.4.2. MicroShift クラスターへのリモートアクセス

以下の手順に従って、kubeconfig ファイルを使用してリモートロケーションから MicroShift クラスターにアクセスします。

user@workstation ログインは、ホストマシンにリモートからアクセスするのに使用されます。手順の <user> 値は、user@workstation が MicroShift ホストにログインするユーザーの名前になります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • user@microshift は、ローカルホストからファイアウォールを開いている。

手順

  1. user@workstation として、Red Hat Enterprise Linux (RHEL) マシンに ~/.kube/ フォルダーがない場合は、次のコマンドを実行してこのフォルダーを作成します。

    [user@workstation]$ mkdir -p ~/.kube/
    Copy to Clipboard Toggle word wrap
  2. user@workstation として、次のコマンドを実行して、MicroShift ホストのホスト名の変数を設定します。

    [user@workstation]$ MICROSHIFT_MACHINE=<microshift_hostname> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <MicroShift_hostname> の値は、実行しているホストの名前または IP アドレスに置き換えます。
  3. user@workstation として、次のコマンドを実行して、MicroShift を実行している RHEL マシンからローカルマシンに接続するホスト名または IP アドレスを含む生成された kubeconfig ファイルをコピーします。

    [user@workstation]$ ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/config 
    1
    Copy to Clipboard Toggle word wrap
    1
    <user> は、SSH ログイン認証情報に置き換えます。
    注記

    この手順の kubeconfig ファイルを生成するには、リモートアクセス用の kubeconfig ファイルの追加生成 を参照してください。

  4. user@workstation として、次のコマンドを実行して ~/.kube/config ファイルのパーミッションを更新します。

    $ chmod go-r ~/.kube/config
    Copy to Clipboard Toggle word wrap

検証

  • user@workstation として、次のコマンドを入力して、MicroShift が実行されていることを確認します。

    $ oc get pods -A
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
    default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
    kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
    openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
    openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
    openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
    openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
    openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
    openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m
    Copy to Clipboard Toggle word wrap

    注記

    この出力例は、基本的な MicroShift を示しています。オプションの RPM をインストールしている場合は、それらのサービスを実行している Pod のステータスも出力に表示されるはずです。

第7章 MicroShift の認証とセキュリティーの設定

7.1. カスタム認証局の設定

MicroShift のデフォルトの API サーバー証明書を認証局 (CA) が発行したカスタムサーバー証明書に置き換えることで、外部クライアントとの接続が許可および暗号化されます。

7.1.1. MicroShift API サーバーのカスタム認証局の使用

MicroShift が起動すると、内部の MicroShift クラスター認証局 (CA) によってデフォルトの API サーバー証明書が発行されます。デフォルトでは、クラスター外のクライアントは MicroShift が発行した API サーバー証明書を検証できません。MicroShift API サーバーと外部クライアント間のセキュアなアクセスを許可し、接続を暗号化できます。デフォルトの証明書は、クライアントが信頼する CA によって外部的に発行されたカスタムサーバー証明書に置き換えます。

次のステップは、MicroShift で API サーバー証明書設定をカスタマイズするためのワークフローを示しています。

  1. 証明書とキーをホストオペレーティングシステムの優先ディレクトリーにコピーします。root アクセスを使用した場合にのみファイルにアクセスできることを確認します。
  2. MicroShift /etc/microshift/config.yaml 設定ファイルで証明書名と新しい完全修飾ドメイン名 (FQDN) を指定して、各カスタム CA の MicroShift 設定を更新します。

    各証明書設定には、以下の値を含めることができます。

    • 証明書ファイルの場所は必須の値です。
    • API サーバーの DNS と IP アドレスまたは IP アドレス範囲を含む単一の共通名。

      ヒント

      ほとんどの場合、MicroShift は、指定した IP アドレスまたは範囲を含むカスタム CA の新しい kubeconfig ファイルを生成します。例外は、IP アドレスにワイルドカードを指定する場合です。この場合、MicroShift はサーバーのパブリック IP アドレスを使用して kubeconfig ファイルを生成します。ワイルドカードを使用するには、特定の詳細で kubeconfig ファイルを更新する必要があります。

    • API サーバーの DNS と IP アドレス、またはワイルドカード証明書を含む複数のサブジェクト別名 (SAN)。
    • 各証明書に追加の DNS 名をリスト表示できます。
  3. MicroShift サービスが再起動した後、生成された kubeconfig ファイルをクライアントにコピーする必要があります。
  4. クライアントシステムで追加の CA を設定します。たとえば、Red Hat Enterprise Linux (RHEL) トラストストア内の CA バンドルを更新できます。

    重要

    カスタムサーバー証明書は、ホストオペレーティングシステムの信頼ルートに設定された CA データに対して検証する必要があります。詳細は、以下のドキュメントを参照してください。

  5. 証明書と鍵は、ホスト上の指定されたファイルの場所から読み取られます。クライアントから設定をテストして検証できます。

    • 検証に失敗した場合、MicroShift はカスタム設定をスキップし、デフォルトの証明書を使用して起動します。サービスを中断せずに継続することが最優先事項です。MicroShift は、サービスの開始時にエラーを記録します。一般的なエラーには、証明書の期限切れ、ファイルの欠落、IP アドレスの誤りなどがあります。
  6. 外部サーバー証明書は自動的に更新されません。外部証明書を手動でローテーションする必要があります。

7.1.2. カスタム認証局の設定

カスタム証明局 (CA) を使用して外部で生成された証明書とドメイン名を設定するには、それらを MicroShift の /etc/microshift/config.yaml 設定ファイルに追加します。ホストオペレーティングシステムの信頼ルートも設定する必要があります。

注記

外部で生成された kubeconfig ファイルは /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig ディレクトリーに作成されます。外部で生成された設定に加えて localhost を使用する必要がある場合は、元の kubeconfig ファイルをデフォルトの場所に保持します。localhost kubeconfig ファイルは、自己署名認証局を使用します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスター管理者のロールを持つユーザーとしてクラスターにアクセスできる。
  • 認証局がカスタム証明書を発行している。
  • MicroShift の /etc/microshift/config.yaml 設定ファイルが存在する。

手順

  1. 追加するカスタム証明書を MicroShift ホストの信頼ルートにコピーします。証明書と秘密鍵に MicroShift のみがアクセス可能であることを確認します。
  2. 必要なカスタム CA ごとに、次の例を使用して、namedCertificates という apiServer セクションを /etc/microshift/config.yaml MicroShift 設定ファイルに追加します。

    apiServer:
      namedCertificates:
       - certPath: ~/certs/api_fqdn_1.crt 
    1
    
         keyPath:  ~/certs/api_fqdn_1.key 
    2
    
       - certPath: ~/certs/api_fqdn_2.crt
         keyPath:  ~/certs/api_fqdn_2.key
         names: 
    3
    
         - api_fqdn_1
         - *.apps.external.com
    Copy to Clipboard Toggle word wrap
    1
    証明書の完全パスを追加します。
    2
    証明書キーへの完全パスを追加します。
    3
    オプション: 明示的な DNS 名のリストを追加します。ワイルドカードは、先頭に指定できます。名前が指定されていない場合は、暗黙名が証明書からリストされます。
  3. 次のコマンドを実行して、MicroShift を再起動し、証明書を適用します。

    $ systemctl microshift restart
    Copy to Clipboard Toggle word wrap
  4. システムが再起動してカスタムサーバーが適用されるまで数分間待ちます。新しい kubeconfig ファイルは /var/lib/microshift/resources/kubeadmin/ ディレクトリーに生成されます。
  5. kubeconfig ファイルをクライアントにコピーします。IP アドレスにワイルドカードを指定した場合は、kubeconfig を更新してサーバーのパブリック IP アドレスを削除し、その IP アドレスを使用する特定のワイルドカード範囲に置き換えます。
  6. クライアントからは、次の手順を実行します。

    1. 次のコマンドを実行して、使用する kubeconfig を指定します。

      $ export KUBECONFIG=~/custom-kubeconfigs/kubeconfig 
      1
      Copy to Clipboard Toggle word wrap
      1
      コピーした kubeconfig ファイルの場所をパスとして使用します。
    2. 次のコマンドを使用して、証明書が適用されていることを確認します。

      $ oc --certificate-authority ~/certs/ca.ca get node
      Copy to Clipboard Toggle word wrap

      出力例

      oc get node
      NAME                             STATUS   ROLES                         AGE   VERSION
      dhcp-1-235-195.arm.example.com   Ready    control-plane,master,worker   76m   v1.32.3
      Copy to Clipboard Toggle word wrap

    3. 次のコマンドを実行して、新しい CA ファイルを $KUBECONFIG 環境変数に追加します。

      $ oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
      Copy to Clipboard Toggle word wrap
    4. 次のコマンドを実行して、新しい kubeconfig ファイルに新しい CA が含まれていることを確認します。

      $ oc config view --flatten
      Copy to Clipboard Toggle word wrap

      外部で生成された kubeconfig ファイルの例

      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority: /tmp/certificate-authority-data-new.crt 
      1
      
          server: https://api.ci-ln-k0gim2b-76ef8.aws-2.ci.openshift.org:6443
        name: ci-ln-k0gim2b-76ef8
      contexts:
      - context:
          cluster: ci-ln-k0gim2b-76ef8
          user:
        name:
      current-context:
      kind: Config
      preferences: {}
      Copy to Clipboard Toggle word wrap

      1
      外部で生成された kubeconfig ファイルには、certificate-authority-data セクションが存在しません。これは、以前使用した oc config set コマンドで追加されます。
    5. 次のコマンドを実行して、カスタマイズされた API サーバー認証局の subjectissuer を確認します。

      $ curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
      Copy to Clipboard Toggle word wrap

      出力例

      Server certificate:
        subject: CN=kas-test-cert_server
        start date: Mar 12 11:39:46 2024 GMT
        expire date: Mar 12 11:39:46 2025 GMT
        subjectAltName: host "dhcp-1-235-3.arm.eng.rdu2.redhat.com" matched cert's "dhcp-1-235-3.arm.eng.rdu2.redhat.com"
        issuer: CN=kas-test-cert_ca
        SSL certificate verify ok.
      Copy to Clipboard Toggle word wrap

      重要

      生成された kubeconfig ファイル内の certificate-authority-data を新しい rootCA に置き換えるか、certificate-authority-data をオペレーティングシステムの信頼ルートに追加します。両方の方法を使用しないでください。

    6. オペレーティングシステムの信頼ルートで追加の CA を設定します。たとえば、クライアントシステム上の RHEL クライアントトラストストア内などです。システム全体のトラストストア

      • CA を含む設定で証明書バンドルを更新することを推奨します。
      • 証明書バンドルを設定しない場合は、代わりに oc login localhost:8443 --certificate-authority=/path/to/cert.crt コマンドを使用することもできますが、この方法は推奨されません。

7.1.3. カスタム証明書の予約名の値

次の証明書の問題により、MicroShift は証明書を動的に無視し、エラーをログに記録します。

  • 証明書ファイルがディスク上に存在しないか、読み取り可能ではありません。
  • 証明書は解析できません。
  • 証明書は、SubjectAlternativeNames (SAN) フィールドの内部証明書の IP アドレスまたは DNS 名をオーバーライドします。SAN を設定するときは予約名を使用しないでください。
Expand
表7.1 予約名の値
アドレスコメント

localhost

DNS

 

127.0.0.1

IP Address

 

10.42.0.0

IP Address

クラスターネットワーク

10.43.0.0/16,10.44.0.0/16

IP Address

サービスネットワーク

169.254.169.2/29

IP Address

br-ex ネットワーク

kubernetes.default.svc

DNS

 

openshift.default.svc

DNS

 

svc.cluster.local

DNS

 

7.1.4. カスタム証明書のトラブルシューティング

カスタム証明書の実装のトラブルシューティングを行うには、次の手順を実行します。

手順

  1. MicroShift から、次のコマンドを実行して、証明書が kube-apiserver によって提供されていることを確認し、証明書パスが --tls-sni-cert-key フラグに追加されていることを確認します。

    $ journalctl -u microshift -b0 | grep tls-sni-cert-key
    Copy to Clipboard Toggle word wrap

    出力例

    Jan 24 14:53:00 localhost.localdomain microshift[45313]: kube-apiserver I0124 14:53:00.649099   45313 flags.go:64] FLAG: --tls-sni-cert-key="[/home/eslutsky/dev/certs/server.crt,/home/eslutsky/dev/certs/server.key;/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.key;/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.key;/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.key
    Copy to Clipboard Toggle word wrap

  2. クライアントから次のコマンドを実行して、kube-apiserver が正しい証明書を提供していることを確認します。

    $ openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
    Copy to Clipboard Toggle word wrap

7.1.5. カスタム証明書のクリーンアップおよび再作成

MicroShift サービスを停止するには、カスタム証明書をクリーンアップし、カスタム証明書を再作成するには、次の手順を使用します。

手順

  1. 次のコマンドを実行して、MicroShift サービスを停止し、カスタム証明書をクリーンアップします。

    $ sudo microshift-cleanup-data --cert
    Copy to Clipboard Toggle word wrap

    出力例

    Stopping MicroShift services
    Removing MicroShift certificates
    MicroShift service was stopped
    Cleanup succeeded
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、MicroShift サービスを再起動し、カスタム証明書を再作成します。

    $ sudo systemctl start microshift
    Copy to Clipboard Toggle word wrap

7.1.6. 関連情報

7.2. TLS セキュリティープロファイルの設定

Transport Layer Security (TLS) プロトコルを使用して、既知の安全でないプロトコル、暗号、またはアルゴリズムが MicroShift で実行するアプリケーションにアクセスするのを阻止します。

7.2.1. MicroShift で TLS を使用する

Transport Layer Security (TLS) プロファイルは、サーバーに接続するときにクライアントが使用できる暗号をサーバーが制御する方法を提供します。TLS を使用することで、MicroShift アプリケーションが、既知の安全でないプロトコル、暗号、またはアルゴリズムを許可しない暗号ライブラリーを使用するようにできます。MicroShift では、TLS 1.2 または TLS 1.3 セキュリティープロファイルのいずれかを使用できます。

MicroShift API サーバー暗号スイートは、次の内部コントロールプレーンコンポーネントに自動的に適用されます。

  • API サーバー
  • Kubelet
  • Kube controller manager
  • Kube scheduler
  • etcd
  • ルートコントローラーマネージャー

API サーバーは、設定された最小 TLS バージョンと関連付けられた暗号スイートを使用します。暗号スイートパラメーターを空のままにすると、設定された最小バージョンのデフォルトが自動的に使用されます。

TLS 1.2 のデフォルトの暗号スイート

次のリストは、TLS 1.2 のデフォルトの暗号スイートを指定します。

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

TLS 1.3 のデフォルトの暗号スイート

次のリストは、TLS 1.3 のデフォルトの暗号スイートを指定します。

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256

7.2.2. MicroShift の TLS の設定

システム強化のために、MicroShift では TLS 1.2 または TLS 1.3 セキュリティープロファイルのいずれかを使用するように選択できます。

前提条件

  • root ユーザーとしてクラスターにアクセスできる。
  • MicroShift がまだ初めて起動されていないか、停止している。
  • OpenShift CLI (oc) がインストールされている。
  • 認証局がカスタム証明書 (CA) を発行している。

手順

  1. 指定されている config.yaml.default ファイルのコピーを /etc/microshift/ ディレクトリーに作成し、名前を config.yaml に変更します。
  2. 新しい MicroShift の config.yaml/etc/microshift/ ディレクトリーに保持します。config.yaml ファイルは、MicroShift サービスが起動するたびに読み取られます。

    注記

    これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。

  3. オプション: 既存の MicroShift YAML を使用している場合は、設定スニペットを使用します。詳細は、関連情報セクションの「設定スニペットの使用」を参照してください。
  4. MicroShift YAML の tls セクションのデフォルト値を、有効な値に置き換えます。

    TLS 1.2 設定の例

    apiServer:
    # ...
      tls:
        cipherSuites: 
    1
    
        - <cipher_suite_1> 
    2
    
        - ...
        minVersion: VersionTLS12 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    設定された minVersion のスイートがデフォルトになります。minVersion が設定されていない場合、デフォルト値は TLS 1.2 になります。
    2
    サポートされている暗号スイートのリストから、使用する暗号スイートを指定します。このリストを設定しない場合は、サポートされているすべての暗号スイートが使用されます。API サーバーに接続するすべてのクライアントは、設定された暗号スイートをサポートする必要があります。そうしないと、TLS ハンドシェイクフェーズ中に接続が失敗します。CA 証明書バンドルを、TLS クライアントまたはサーバーが信頼する CA 証明書のリストに必ず追加してください。
    3
    VersionTLS12 または VersionTLS13 を指定します。
    重要

    最小 TLS バージョンとして TLS 1.3 を選択した場合、デフォルトの MicroShift 暗号スイートのみを使用できます。追加の暗号スイートは設定できません。TLS 1.3 で使用する他の暗号スイートが設定されている場合、それらのスイートは無視され、MicroShift のデフォルトによって上書きされます。

  5. 必要なその他の追加設定を完了したら、次のコマンドを実行して MicroShift を再起動します。

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap
7.2.2.1. デフォルトの暗号スイート

MicroShift には、TLS 1.2 と TLS 1.3 の両方のデフォルトの暗号スイートが含まれています。TLS 1.3 の暗号スイートはカスタマイズできません。

TLS 1.2 のデフォルトの暗号スイート

次のリストは、TLS 1.2 のデフォルトの暗号スイートを指定します。

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
  • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

TLS 1.3 のデフォルトの暗号スイート

次のリストは、TLS 1.3 のデフォルトの暗号スイートを指定します。

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256

7.3. 監査ロギングポリシーの設定

設定値を使用して、MicroShift 監査ログファイルのローテーションと保持を制御できます。

7.3.1. 監査ログファイルの制限設定について

設定値を使用して MicroShift 監査ログファイルのローテーションと保持を制御すると、ファーエッジデバイスの限られたストレージ容量を超えないようにすることができます。このようなデバイスでは、ログデータの蓄積によってホストシステムまたはクラスターのワークロードが制限され、デバイスの動作が停止する可能性があります。監査ログポリシーを設定すると、重要な処理スペースを継続して利用できるようにします。

MicroShift 監査ログを制限するために設定した値を使用すると、監査ログバックアップのサイズ、数、保存期間の制限を適用できます。フィールド値は、優先順位を付けずに、互いに独立して処理されます。

フィールドを組み合わせて設定し、保持されるログの最大ストレージ制限を定義できます。以下に例を示します。

  • ログストレージの上限を作成するには、maxFileSizemaxFiles の両方を設定します。
  • maxFileAge 値を設定すると、maxFiles 値に関係なく、ファイル名のタイムスタンプより古いファイルが自動的に削除されます。
7.3.1.1. デフォルトの監査ログ値

MicroShift には、次のデフォルトの監査ログローテーション値が含まれています。

Expand
表7.2 MicroShift のデフォルトの監査ログ値
監査ログパラメーターデフォルト設定定義

maxFileAge:

0

ログファイルが自動的に削除されるまでの保持期間。デフォルト値は、経過時間をベースにしてログファイルが削除されないという意味です。この値は設定可能です。

maxFiles:

10

保持されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。

maxFileSize:

200

デフォルトでは、audit.log ファイルが maxFileSize の制限に達すると、audit.log ファイルがローテーションされ、MicroShift は新しい audit.log ファイルへの書き込みを開始します。この値はメガバイト単位で設定できます。

profile:

Default

Default プロファイル設定では、読み取りおよび書き込み要求のメタデータのみがログに記録されます。OAuth アクセストークン要求を除き、要求本文はログに記録されません。このフィールドを指定しない場合は、Default プロファイルが使用されます。

ファイルが 10 個以下の場合、監査ログの保持の最大デフォルトストレージ使用量は 2000 Mb です。

フィールドに値を指定しない場合は、デフォルト値が使用されます。以前に設定したフィールド値を削除すると、次回の MicroShift サービスの再起動後にデフォルト値が復元されます。

重要

アプリケーション Pod によって生成されるログは、Red Hat Enterprise Linux (RHEL) で監査ログの保持およびローテーションを設定する必要があります。これらのログはコンソールに出力され、保存されます。MicroShift クラスターの健全性を維持するために、RHEL /var/log/audit/audit.log ファイルにログ設定が設定されていることを確認してください。

7.3.2. 監査ログポリシープロファイルについて

監査ログプロファイルは、OpenShift API サーバーおよび Kubernetes API サーバーに送信されるリクエストをログに記録する方法を定義します。

MicroShift は、次の定義済み監査ポリシープロファイルをサポートしています。

Expand
Profile説明

Default

読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。これはデフォルトポリシーになります。

WriteRequestBodies

すべてのリクエストのメタデータのログに加えて、API サーバーへのすべての書き込みリクエスト (createupdatepatchdeletedeletecollection) のリクエスト本文をログに記録します。このプロファイルには、Default プロファイルよりも多くのリソースのオーバーヘッドがあります。[1]

AllRequestBodies

すべての要求のメタデータをロギングする以外にも、API サーバーへの読み取りおよび書き込み要求ごとに要求の本文をログに記録します (getlistcreateupdatepatch)。このプロファイルには最も多くのリソースのオーバーヘッドがあります。[1]

None

OAuth アクセストークン要求や OAuth 承認トークン要求などの要求はログに記録されません。

警告

問題のトラブルシューティング時に有用なデータが記録されないリスクを完全に理解していない限り、None プロファイルを使用して監査ロギングを無効にしないようにしてください。監査ロギングを無効にしてサポートが必要な状況が生じた場合は、適切にトラブルシューティングを行うために監査ロギングを有効にし、問題を再現することを推奨します。

  1. SecretRouteOAuthClient オブジェクトなどの機密リソースは、メタデータレベルでのみログ記録されます。

デフォルトでは、MicroShift は Default の監査ログプロファイルを使用します。リクエスト本文もログに記録する別の監査ポリシープロファイルを使用することもできますが、CPU、メモリー、I/O などのリソース使用量が増加することに注意してください。

7.3.3. 監査ログ値の設定

MicroShift サービス設定ファイルを使用して、監査ログ設定を指定できます。

手順

  1. 指定されている config.yaml.default ファイルのコピーを /etc/microshift/ ディレクトリーに作成し、名前を config.yaml に変更します。作成した新しい MicroShift config.yaml/etc/microshift/ ディレクトリーに保存します。MicroShift サービスが開始されるたびに、新しい config.yaml が読み取られます。これを作成すると、config.yaml ファイルは組み込み設定よりも優先されます。
  2. YAML の auditLog セクションのデフォルト値を必要な有効な値に置き換えてください。

    デフォルトの auditLog 設定の例

    apiServer:
    # ....
      auditLog:
        maxFileAge: 7 
    1
    
        maxFileSize: 200 
    2
    
        maxFiles: 1 
    3
    
        profile: Default 
    4
    
    # ....
    Copy to Clipboard Toggle word wrap

    1
    ログファイルが保持される最大時間を日数で指定します。この制限よりも古いファイルは削除されます。この例では、ログファイルは 7 日以上経過すると削除されます。ライブログが maxFileSize フィールドで指定された最大ファイルサイズに達したかどうかに関係なく、ファイルは削除されます。ファイルの有効期限は、ローテーションされたログファイルの名前に書き込まれたタイムスタンプによって決定されます (例: audit-2024-05-16T17-03-59.994.log)。値が 0 の場合、制限は無効になります。
    2
    監査ログファイルの最大サイズ (メガバイト単位)。この例では、ライブログが 200 MB の制限に達するとすぐにファイルがローテーションされます。値を 0 に設定すると、制限は無効になります。
    3
    保持されるローテーションされた監査ログファイルの最大数。制限に達すると、ログファイルは古いものから順に削除されます。この例では、値 1 を指定すると、現在のアクティブログに加えて、maxFileSize サイズのファイル 1 つだけが保持されます。値を 0 に設定すると、制限は無効になります。
    4
    読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、Default プロファイルが使用されます。
  3. オプション: ログ用の新しいディレクトリーを指定するには、MicroShift を停止し、/var/log/kube-apiserver ディレクトリーを目的の場所に移動します。

    1. 次のコマンドを実行して MicroShift を停止します。

      $ sudo systemctl stop microshift
      Copy to Clipboard Toggle word wrap
    2. 以下のコマンドを実行して、/var/log/kube-apiserver ディレクトリーを目的の場所に移動します。

      $ sudo mv /var/log/kube-apiserver <~/kube-apiserver> 
      1
      Copy to Clipboard Toggle word wrap
      1
      <~/kube-apiserver> は、使用するディレクトリーへのパスに置き換えます。
    3. ログの新規ディレクトリーを指定した場合、次のコマンドを実行して、/var/log/kube-apiserver にカスタムディレクトリーへのシンボリックリンクを作成します。

      $ sudo ln -s <~/kube-apiserver> /var/log/kube-apiserver 
      1
      Copy to Clipboard Toggle word wrap
      1
      <~/kube-apiserver> は、使用するディレクトリーへのパスに置き換えます。これにより、SOS レポートでのログの収集が可能になります。
  4. 実行中のインスタンスで監査ログポリシーを設定する場合は、次のコマンドを入力して MicroShift を再起動します。

    $ sudo systemctl restart microshift
    Copy to Clipboard Toggle word wrap

7.3.4. 監査ログ設定のトラブルシューティング

カスタム監査ログ設定とファイルの場所のトラブルシューティングを行うには、次の手順に従います。

手順

  • 次のコマンドを実行して、現在設定されている値を確認します。

    $ sudo microshift show-config --mode effective
    Copy to Clipboard Toggle word wrap

    出力例

    auditLog:
        maxFileSize: 200
        maxFiles: 1
        maxFileAge: 7
        profile: AllRequestBodies
    Copy to Clipboard Toggle word wrap

  • 次のコマンドを実行して、audit.log ファイルのパーミッションを確認します。

    $ sudo ls -ltrh /var/log/kube-apiserver/audit.log
    Copy to Clipboard Toggle word wrap

    出力例

    -rw-------. 1 root root 46M Mar 12 09:52 /var/log/kube-apiserver/audit.log
    Copy to Clipboard Toggle word wrap

  • 次のコマンドを実行して、現在のログディレクトリーの内容をリスト表示します。

    $ sudo ls -ltrh /var/log/kube-apiserver/
    Copy to Clipboard Toggle word wrap

    出力例

    total 6.0M
    -rw-------. 1 root root 2.0M Mar 12 10:56 audit-2024-03-12T14-56-16.267.log
    -rw-------. 1 root root 2.0M Mar 12 10:56 audit-2024-03-12T14-56-49.444.log
    -rw-------. 1 root root 962K Mar 12 10:57 audit.log
    Copy to Clipboard Toggle word wrap

7.4. サプライチェーンセキュリティーのためのコンテナー署名を検証する

sigstore 署名方法を使用することで、サプライチェーンのセキュリティーを強化できます。

重要

sigstore サポートはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

7.4.1. sigstore を使用してコンテナー署名を検証する方法

sigstore 署名方法を使用してイメージの整合性を検証するように、コンテナーランタイムを設定できます。MicroShift コンテナーランタイムを設定すると、イメージの整合性を検証できます。sigstore プロジェクトを使用すると、開発者はビルドした成果物にデジタル署名を追加できます。これにより、ソフトウェアのソースまで追跡できる、より安全な保管の連鎖を構築できます。その後、管理者は署名を検証し、大規模なワークフローを監視できます。sigstore を使用すると、ビルドイメージと同じレジストリーに署名を保存できます。

  • ユーザー固有のイメージの場合は、適切な公開鍵を指すように設定ファイルを更新するか、それらのイメージソースの署名検証を無効にする必要があります。
重要

非接続設定またはオフライン設定の場合、公開鍵の内容をオペレーティングシステムイメージに埋め込む必要があります。

7.4.2. sigstore を使用してコンテナー署名を検証する

コンテナーランタイムで sigstore を使用するように設定して、MicroShift のコンテナー署名を検証します。コンテナー署名の検証では、イメージへの署名時に Red Hat キーペアの公開鍵が使用されます。sigstore を使用するには、コンテナーランタイムパッケージの一部としてインストールされているデフォルトの /etc/containers/policy.json ファイルを編集します。

Red Hat 公開鍵には次のリンクからアクセスできます。

MicroShift コンテナーの署名検証には、リリースキー 3 を使用する必要があります。

前提条件

  • MicroShift ホストへの管理者アクセス権がある。
  • MicroShift をインストールしている。

手順

  1. 関連する公開鍵をダウンロードし、次のコマンドを実行して /etc/containers/RedHat_ReleaseKey3.pub として保存します。

    $ sudo curl -sL https://access.redhat.com/security/data/63405576.txt -o /etc/containers/RedHat_ReleaseKey3.pub
    Copy to Clipboard Toggle word wrap
  2. Red Hat ソースからのイメージを検証するようにコンテナーランタイムを設定するには、/etc/containers/policy.json ファイルを編集して次の設定を追加します。

    ポリシー JSON ファイルの例

    {
        "default": [
            {
                "type": "reject"
            }
        ],
        "transports": {
            "docker": {
                "quay.io/openshift-release-dev": [{
                    "type": "sigstoreSigned",
                    "keyPath": "/etc/containers/RedHat_ReleaseKey3.pub",
                    "signedIdentity": {
                        "type": "matchRepoDigestOrExact"
                    }
                }],
                "registry.redhat.io": [{
                    "type": "sigstoreSigned",
                    "keyPath": "/etc/containers/RedHat_ReleaseKey3.pub",
                    "signedIdentity": {
                        "type": "matchRepoDigestOrExact"
                    }
                }]
            }
        }
    }
    Copy to Clipboard Toggle word wrap

  3. /etc/containers/registries.d/registry.redhat.io.yaml` ファイルを編集して次の設定を追加し、イメージをローカルストレージにプルするときに sigstore アタッチメントを使用するように Red Hat リモートレジストリーを設定します。

    $ cat /etc/containers/registries.d/registry.redhat.io.yaml
    docker:
         registry.redhat.io:
             use-sigstore-attachments: true
    Copy to Clipboard Toggle word wrap
  4. /etc/containers/registries.d/registry.quay.io.yaml ファイルを編集して次の設定を追加し、イメージをローカルストレージにプルするときに sigstore アタッチメントを使用するように Red Hat リモートレジストリーを設定します。

    $ cat /etc/containers/registries.d/quay.io.yaml
    docker:
      quay.io/openshift-release-dev:
        use-sigstore-attachments: true
    Copy to Clipboard Toggle word wrap
  5. ユースケースでこれらのイメージソースの署名検証が必要な場合は、ユーザー固有のレジストリー設定ファイルを作成します。ここで示した例を基にして、独自の要件を追加できます。

次のステップ

  1. ミラーレジストリーを使用している場合は、sigstore アタッチメントを有効にします。
  2. それ以外の場合は、ローカルコンテナーストレージの消去に進みます。
7.4.2.1. ミラーレジストリーの sigstore アタッチメントを有効にする

ミラーレジストリーを使用している場合は、sigstore アタッチメントとダイジェストによるミラーリングを有効にするために、追加の設定を適用する必要があります。

前提条件

  • MicroShift ホストへの管理者アクセス権がある。
  • 「sigstore を使用してコンテナー署名を検証する」にある手順を完了した。

手順

  1. /etc/containers/registries.d/mirror.registry.local.yaml ファイルを作成して、sigstore アタッチメントを有効にします。

    $ cat /etc/containers/registries.d/<mirror.registry.local.yaml> 
    1
    
    docker:
       mirror.registry.local:
            use-sigstore-attachments: true
    Copy to Clipboard Toggle word wrap
    1
    ミラーレジストリー URL に基づき、<mirror.registry.local.yaml> ファイルに名前を付けます。
  2. 次の内容で /etc/containers/registries.conf.d/999-microshift-mirror.conf を作成し、ダイジェストによるミラーリングを有効にします。

    $ cat /etc/containers/registries.conf.d/999-microshift-mirror.conf
    [[registry]]
        prefix = "quay.io/openshift-release-dev"
        location = "mirror.registry.local"
        mirror-by-digest-only = true
    
    [[registry]]
        prefix = "registry.redhat.io"
        location = "mirror.registry.local"
        mirror-by-digest-only = true
    Copy to Clipboard Toggle word wrap

次のステップ

  1. ローカルコンテナーストレージを消去します。
7.4.2.2. ローカルコンテナーストレージの消去

既存のシステムに設定を適用する場合は、ローカルコンテナーストレージを消去する必要があります。コンテナーストレージを消去することで、署名付きのコンテナーイメージが適切にダウンロードされます。

前提条件

  • MicroShift ホストへの管理者アクセス権がある。
  • ミラーレジストリーで sigstore を有効にした。

手順

  1. 次のコマンドを実行して、CRI-O コンテナーランタイムサービスと MicroShift を停止します。

    $ sudo systemctl stop crio microshift
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、CRI-O コンテナーのランタイムストレージを消去します。

    $ sudo crio wipe --force
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、CRI-O コンテナーランタイムサービスと MicroShift を再起動します。

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

検証

次のコマンドを入力して、すべての Pod が正常な状態で実行されていることを確認します。

$ oc get pods -A
Copy to Clipboard Toggle word wrap

出力例

NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m
Copy to Clipboard Toggle word wrap

注記

この出力例は、基本的な MicroShift を示しています。オプションの RPM をインストールしている場合は、それらのサービスを実行している Pod のステータスも出力に表示されるはずです。

第8章 低レイテンシーの設定

8.1. 低レイテンシーの設定

低レイテンシー機能を設定してチューニングすることで、エッジデバイスでアプリケーションのパフォーマンスを向上させることができます。

8.1.1. MicroShift アプリケーションのレイテンシーの短縮

レイテンシーは、イベントからそのイベントへの応答までの時間として定義されます。エッジデバイスが外部イベントに迅速に応答する必要がある、運用上またはソフトウェア定義の制御システムで実行されている MicroShift クラスターで、低レイテンシー設定およびチューニングを使用できます。MicroShift の設定とオペレーティングシステムのチューニングとワークロードのパーティション分割を組み合わせることで、低レイテンシーのパフォーマンスを完全に最適化できます。

重要

MicroShift サービス、OVS、CRI-O、MicroShift Pod、分離されたコアなどの管理アプリケーションの CPU セットには、すべてのオンライン CPU が含まれている必要があります。

8.1.1.1. MicroShift アプリケーションの低レイテンシーを設定するためのワークフロー

MicroShift クラスターで実行されているアプリケーションの低レイテンシーを設定するには、次のタスクを完了する必要があります。

必須
  • microshift-low-latency RPM をインストールします。
  • ワークロードのパーティション分割を設定します。
  • /etc/microshift/ ディレクトリーにある config.yaml ファイルの kubelet セクションを設定します。
  • TuneD プロファイルを設定してアクティブ化します。TuneD は、ホストシステムを監視し、特定のワークロードでパフォーマンスを最適化する Red Hat Enterprise Linux (RHEL) のサービスです。
  • ホストを再起動します。
任意

8.1.2. MicroShift の低レイテンシー RPM パッケージのインストール

MicroShift をインストールする際に、低レイテンシー RPM パッケージはデフォルトでインストールされません。低レイテンシー RPM は、オプションのパッケージとしてインストールできます。

前提条件

  1. MicroShift RPM をインストールしている。
  2. MicroShift のワークロードのパーティション分割を設定している。

手順

  • 次のコマンドを実行して、低レイテンシーの RPM パッケージをインストールします。

    $ sudo dnf install -y microshift-low-latency
    Copy to Clipboard Toggle word wrap
    ヒント

    TuneD プロファイルがアクティブ化されるのを待ってから、ホストを再起動します。ホストを再起動することで MicroShift と CRI-O が再起動され、低レイテンシーマニフェストが適用され、TuneD プロファイルがアクティブ化されます。

次のステップ

  1. MicroShift config.yaml で、低レイテンシー用の kubelet パラメーターを設定します。
  2. オペレーティングシステムを調整してください。たとえば、TuneD プロファイルを設定してアクティブ化します。
  3. オプション: TuneD プロファイルの自動アクティブ化を設定します。
  4. オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールします。
  5. 低レイテンシー用にワークロードを準備します。

8.1.3. MicroShift での kubelet パラメーターおよび値の設定

MicroShift クラスターへの低レイテンシーを有効化するための最初の手順は、MicroShift config.yaml ファイルに設定を追加することです。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターへの root アクセス権限がある。
  • /etc/microshift/ ディレクトリーにある指定された config.yaml.default ファイルのコピーを作成し、config.yaml という名前を付けている。

手順

  • kubelet 設定を MicroShift config.yaml ファイルに追加します。

    パススルー kubelet 設定の例

    apiServer:
    # ...
    kubelet: 
    1
    
      cpuManagerPolicy: static 
    2
    
      cpuManagerPolicyOptions:
        full-pcpus-only: "true" 
    3
    
      cpuManagerReconcilePeriod: 5s
      memoryManagerPolicy: Static 
    4
    
      topologyManagerPolicy: single-numa-node
      reservedSystemCPUs: 0-1 
    5
    
      reservedMemory:
      - limits:
          memory: 1100Mi 
    6
    
        numaNode: 0
      kubeReserved:
        memory: 500Mi
      systemReserved:
        memory: 500Mi
      evictionHard: 
    7
    
        imagefs.available: "15%" 
    8
    
        memory.available: "100Mi" 
    9
    
        nodefs.available: "10%" 
    10
    
        nodefs.inodesFree: "5%" 
    11
    
      evictionPressureTransitionPeriod: 5m 
    12
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    kubelet 設定で CPU またはメモリーマネージャーを変更する場合は、以前の設定をキャッシュするファイルを削除する必要があります。ホストを再起動してそれらを自動的に削除するか、/var/lib/kubelet/cpu_manager_state ファイルおよび /var/lib/kubelet/memory_manager_state ファイルを手動で削除します。
    2
    使用するポリシーの名前。有効な値は none および static です。CPUManager フィーチャーゲートを有効化する必要があります。デフォルト値は none です。
    3
    CPUManager ポリシーの動作を微調整する追加のオプションを設定するための key=value ペアのセット。デフォルト値は null です。CPUManagerCPUManagerPolicyOptions 機能ゲートの両方を有効化する必要があります。
    4
    Memory Manager が使用するポリシーの名前。大文字と小文字を区別します。デフォルト値は none です。MemoryManager フィーチャーゲートを有効化する必要があります。
    5
    必須。reservedSystemCPUs の値は、オフライン化された CPU の逆数である必要があります。なぜなら、これら両方を合わせた値は、システム上のすべての CPU を考慮する必要があるためです。このパラメーターは、管理およびアプリケーションワークロードを分割する上で不可欠です。このパラメーターを使用して、ホストレベルのシステムおよび Kubernetes デーモン、さらに割り込みやタイマーのための静的 CPU セットを定義します。その後、システム上の残りの CPU はワークロード専用に使用できます。
    6
    この例の reservedMemory[0].limits.memory1100 Mi の値は、kubeReserved.memory + systemReserved.memory + evictionHard.memory.available に相当します。
    7
    evictionHard パラメーターは、kubelet が Pod をエビクトする条件を定義します。evictionHard スタンザの 1 つのみのパラメーターのデフォルト値を変更する場合、他のパラメーターのデフォルト値は継承されず、ゼロに設定されます。1 つだけ変更したい場合でも、すべてのしきい値を指定します。
    8
    imagefs は、コンテナーランタイムがコンテナーイメージとコンテナーの書き込み可能な階層を保存するために使用するファイルシステムです。この例では、evictionHard.imagefs.available パラメーターは、イメージファイルシステムで利用可能な領域が 15% 未満の場合に Pod がエビクトされることを意味します。
    9
    この例では、evictionHard.memory.available パラメーターは、ノードの利用可能なメモリーが 100 MiB 未満の場合に Pod がエビクトされることを意味します。
    10
    この例では、evictionHard.nodefs.available パラメーターは、ノードのメインファイルシステムに空き容量が 10% 未満になると Pod がエビクトされることを意味します。
    11
    この例では、evictionHard.nodefs.inodesFree パラメーターは、ノードのメインファイルシステムの inode のうち 15% 強が使用されている場合に Pod がエビクトされることを意味します。
    12
    コンテナーのガベージコレクションの場合: エビクションプレッシャー状態から移行するまでの待機時間。evictionPressureTransitionPeriod パラメーターを 0 に設定すると、デフォルト値の 5 分が設定されます。

検証

  • 次のステップを完了してホストを再起動したら、root-access アカウントを使用して、設定が /var/lib/microshift/resources/kubelet/config/ ディレクトリーの config.yaml ファイルにあることを確認できます。

次のステップ

  1. ワークロードのパーティション分割を有効化します。
  2. オペレーティングシステムを調整します。たとえば、TuneD プロファイルを設定およびアクティブ化します。
  3. オプション: TuneD プロファイルの自動有効化を設定します。
  4. オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。
  5. 低レイテンシー用に MicroShift ワークロードを準備します。

8.1.4. Red Hat Enterprise Linux 9 のチューニング

Red Hat Enterprise Linux (RHEL) システム管理者は、TuneD サービスを使用して、さまざまなユースケースに対して RHEL のパフォーマンスプロファイルを最適化できます。TuneD は、レイテンシーのパフォーマンスを含む、特定のワークロードでシステムパフォーマンスを監視し、最適化します。

  • TuneD プロファイルを使用して、低レイテンシーの MicroShift クラスターのデプロイなど、さまざまなユースケースに合わせてシステムを調整します。
  • 各プロファイルに定義されたルールを変更し、特定のデバイスのチューニングをカスタマイズできます。
  • 別のプロファイルに切り替えたり、TuneD を非アクティブ化すると、以前のプロファイルがシステム設定に加えた変更はすべて、元の状態に戻ります。
  • また、TuneD を設定してデバイスの使用状況の変化に対応し、設定を調整して、アクティブなデバイスのパフォーマンスを向上させ、非アクティブなデバイスの消費電力を削減することもできます。
8.1.4.1. MicroShift TuneD プロファイルの設定

microshift-low-latency RPM パッケージをインストールした後、Red Hat Enterprise Linux (RHEL) /etc/tuned/ ホストディレクトリーで提供される microshift-baseline-variables.conf 設定ファイルを使用して、MicroShift ワークロードで低レイテンシーを使用するようにホストの TuneD プロファイルを設定します。

前提条件

  • クラスターへの root アクセス権限がある。
  • microshift-low-latency RPM パッケージをインストールしている。
  • RHEL ホストに TuneD がインストールされている。TuneD のスタートガイド (RHEL ドキュメント) を参照してください。

手順

  1. /etc/tuned/ ディレクトリープロファイルでデフォルトの microshift-baseline-variables.conf TuneD プロファイルを使用するか、独自のチューニングを作成してチューニングをさらに追加できます。

    microshift-baseline-variables.conf TuneD プロファイルの例

    # Isolate cores 2-7 for running application workloads
    isolated_cores=2-7 
    1
    
    
    # Size of the hugepages
    hugepages_size=2M 
    2
    
    
    # Number of hugepages
    hugepages=0
    
    # Additional kernel arguments
    additional_args= 
    3
    
    
    # CPU set to be offlined
    offline_cpu_set= 
    4
    Copy to Clipboard Toggle word wrap

    1
    分離する必要のあるコアを制御します。MicroShift では、ハウスキーピング用にソケットごとに 1 コアがデフォルトで予約されています。他のコアは分離されます。有効な値はコアリストまたは範囲です。任意の範囲 (例: isolated_cores=2,4-7 または isolated_cores=2-23) を分離できます。
    重要

    isolated_cores= 変数を 1 つだけ維持する必要があります。

    注記

    Kubernetes CPU マネージャーは、kubelet 設定で定義された予約済み CPU を除き、任意の CPU を使用してワークロードを実行できます。このような理由から、以下が最善となります。

    • kubelet の予約 CPU と分離されたコアの合計には、すべてのオンライン CPU が含まれます。
    • 分離されたコアは、kubelet 設定で定義された予約済み CPU に補完されます。
    2
    hugepages のサイズ。有効な値は 2M または 1G です。
    3
    追加のカーネル引数 (additional_args=console=tty0 console=ttyS0,115200 など)
    4
    オフラインに設定された CPU。
    重要

    isolated_cores と重複することはできません。

  2. 次のコマンドを実行して、プロファイルを有効化するか、変更をアクティブにします。

    $ sudo tuned-adm profile microshift-baseline
    Copy to Clipboard Toggle word wrap
  3. ホストを再起動して、カーネル引数をアクティブにします。

検証

  • オプション: 起動時に現在実行中のカーネルに指定された引数を含む /proc/cmdline ファイルを読み取ることができます。

    $ cat /proc/cmdline
    Copy to Clipboard Toggle word wrap

    出力例

    BOOT_IMAGE=(hd0,msdos2)/ostree/rhel-7f82ccd9595c3c70af16525470e32c6a81c9138c4eae6c79ab86d5a2d108d7fc/vmlinuz-5.14.0-427.31.1.el9_4.x86_64+rt crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=rhel/root fips=0 console=ttyS0,115200n8 root=/dev/mapper/rhel-root rw ostree=/ostree/boot.1/rhel/7f82ccd9595c3c70af16525470e32c6a81c9138c4eae6c79ab86d5a2d108d7fc/0 skew_tick=1 tsc=reliable rcupdate.rcu_normal_after_boot=1 nohz=on nohz_full=2,4-5 rcu_nocbs=2,4-5 tuned.non_isolcpus=0000000b intel_pstate=disable nosoftlockup hugepagesz=2M hugepages=10
    Copy to Clipboard Toggle word wrap

次のステップ

  1. 低レイテンシー用に MicroShift ワークロードを準備します。
  2. オプション: TuneD プロファイルの自動有効化を設定します。
  3. オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。
8.1.4.2. MicroShift TuneD プロファイルを自動的に有効化する

microshift-low-latency RPM パッケージには、システムの起動時に TuneD プロファイルを自動的に有効化するように設定可能な systemd サービスが含まれています。この機能は、大量のデバイスに MicroShift をインストールする場合に特に便利です。

前提条件

  1. ホストに microshift-low-latency RPM パッケージをインストールしている。
  2. MicroShift の config.yaml で低レイテンシーを有効化している。
  3. TuneD プロファイルを作成している。
  4. microshift-baseline-variables.conf ファイルを設定している。

手順

  1. /etc/microshift/ ディレクトリーで tuned.yaml を設定します。次に例を示します。

    tuned.yaml の例

    profile: microshift-baseline 
    1
    
    reboot_after_apply: True 
    2
    Copy to Clipboard Toggle word wrap

    1
    アクティブ化する TuneD プロファイルを制御します。この例では、プロファイルの名前は microshift-baseline です。
    2
    プロファイルの適用後にホストを再起動する必要があるかどうかを制御します。有効な値は True および False です。たとえば、True 設定を使用して、新しい ostree コミットがデプロイされた後にホストを自動的に再起動します。
    重要

    ホストは、microshift-tuned.service の実行時に再起動されますが、新しいコミットのデプロイ時にシステムは再起動されません。ホストを再起動して新しいコミットを有効化する必要があります。その後、起動時に microshift-tuned.service が実行され、プロファイルと変数への変更が検出されたときに、システムが再び起動します。

    この二重ブートはロールバックに影響を及ぼす可能性があります。自動プロファイルアクティブ化の使用時に、ロールバック前に許可される greenboot での再起動の回数を調整してください。たとえば、greenboot でロールバック前に 3 回の再起動が許可されている場合、その回数を 4 回に増やします。詳細は、「関連情報」のリストを参照してください。

  2. 次のコマンドを入力して、microshift-tuned.service が各システムの起動時に実行できるようにします。

    $ sudo systemctl enable microshift-tuned.service
    Copy to Clipboard Toggle word wrap
    重要

    reboot_after_applyTrue に設定する場合は、TuneD プロファイルがアクティブであること、および他のプロファイルが MicroShift サービス外でアクティブ化されていないことを確認してください。そのように設定されずに microshift-tuned.service を起動すると、ホストが再起動します。

  3. 次のコマンドを実行して、microshift-tuned.service を起動します。

    $ sudo systemctl start microshift-tuned.service
    Copy to Clipboard Toggle word wrap
    注記

    microshift-tuned.service は、収集したチェックサムを使用して、一部の TuneD プロファイルと変数への変更を検出します。ディスクにチェックサムがない場合は、サービスは TuneD プロファイルをアクティブ化し、ホストを再起動します。microshift-tuned.service の初めて起動する際は、ホストの再起動が必要です。

次のステップ

  • オプション: x86_64 アーキテクチャーを使用している場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) をインストールできます。

8.1.5. Red Hat Enterprise Linux for Real-Time の使用

割り込み処理やプロセススケジューリングなど、コアカーネル機能に対してマイクロ秒 (μs) 単位の厳格な低レイテンシーかつ決定性のある動作がワークロードに求められる場合は、Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) を使用できます。リアルタイムカーネルの目的は、予測可能な応答時間を提供する、一貫性のある低レイテンシーの決定論です。

システムのチューニングを検討する際には、以下の要素を考慮してください。

  • リアルタイムカーネルを使用する場合でも、標準カーネルと同様にシステムのチューニングは重要です。
  • RHEL 9 リリースの一部として提供される標準カーネルを実行する未チューニングのシステムに、リアルタイムカーネルをインストールしても、目立った利点はありません。
  • 標準カーネルを調整することで、達成可能なレイテンシー改善の 90% が得られます。
  • リアルタイムカーネルは、最も要求の厳しいワークロードで必要とされる、レイテンシー改善の最後の 10% を提供します。
8.1.5.1. Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) のインストール

低レイテンシーのワークロードにはリアルタイムカーネルは必要ありませんが、リアルタイムカーネルを使用すると低レイテンシーのパフォーマンスを最適化できます。RPM パッケージを使用してホストにインストールし、Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージのデプロイメントに追加できます。

前提条件

  • Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) を含む Red Hat サブスクリプションがある。たとえば、ホストマシンが登録され、Red Hat Enterprise Linux (RHEL) が RHEL for Real Time サブスクリプにアタッチされています。
  • x86_64 アーキテクチャーを使用している。

手順

  1. 次のコマンドを実行して、リアルタイムカーネルリポジトリーを有効化します。

    $ sudo subscription-manager repos --enable rhel-9-for-x86_64-rt-rpms
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、リアルタイムカーネルをインストールします。

    $ sudo dnf install -y kernel-rt
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、リアルタイムカーネルのバージョンをクエリーします。

    $ RTVER=$(rpm -q --queryformat '%{version}-%{release}.%{arch}' kernel-rt | sort | tail -1)
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、リアルタイムカーネルをデフォルトのカーネルとして指定する GRUB に永続的な変更を加えます。

    $ sudo grubby --set-default="/boot/vmlinuz-${RTVER}+rt"
    Copy to Clipboard Toggle word wrap
  5. ホストを再起動して、リアルタイムカーネルをアクティブ化します。

次のステップ

  1. 低レイテンシー用に MicroShift ワークロードを準備します。
  2. オプション: ブループリントを使用して、RHEL for Edge イメージにリアルタイムカーネルをインストールします。

Image Builder を使用して、RHEL for Edge イメージデプロイメントにリアルタイムカーネルを含めることができます。次のブループリントセクションの例には、MicroShift クラスターの低レイテンシーを設定するために必要だった前の手順で収集した参照が含まれています。

前提条件

  • Red Hat Enterprise Linux for Real Time (リアルタイムカーネル) を含むホストで Red Hat サブスクリプションを有効化している。
  • x86_64 アーキテクチャーを使用している。
  • kernel-rt リポジトリーを使用するように osbuild を設定している。
重要

リアルタイムカーネルを含むサブスクリプションは、コミットのビルドに使用するホストで有効化する必要があります。

手順

  • RHEL for Edge イメージにリアルタイムカーネルをインストールするための完全なインストールブループリントに、以下の例のブループリントセクションを追加してください。

    リアルタイムカーネルのブループリントスニペットの例

    [[packages]]
    name = "microshift-low-latency"
    version = "*"
    
    # Kernel RT is supported only on the x86_64 architecture
    [customizations.kernel]
    name = "kernel-rt"
    
    [customizations.services]
    enabled = ["microshift", "microshift-tuned"]
    
    [[customizations.files]]
    path = "/etc/microshift/config.yaml"
    data = """
    kubelet:
      cpuManagerPolicy: static
      cpuManagerPolicyOptions:
        full-pcpus-only: "true"
      cpuManagerReconcilePeriod: 5s
      memoryManagerPolicy: Static
      topologyManagerPolicy: single-numa-node
      reservedSystemCPUs: 0-1
      reservedMemory:
      - limits:
          memory: 1100Mi
        numaNode: 0
      kubeReserved:
        memory: 500Mi
      systemReserved:
        memory: 500Mi
      evictionHard:
        imagefs.available: 15%
        memory.available: 100Mi
        nodefs.available: 10%
        nodefs.inodesFree: 5%
      evictionPressureTransitionPeriod: 5m
    """
    
    [[customizations.files]]
    path = "/etc/tuned/microshift-baseline-variables.conf"
    data = """
    # Isolated cores should be complementary to the kubelet configuration reserved CPUs.
    # Isolated and reserved CPUs must contain all online CPUs.
    # Core #3 is for testing offlining, therefore it is skipped.
    isolated_cores=2,4-5
    hugepages_size=2M
    hugepages=10
    additional_args=test1=on test2=true dummy
    offline_cpu_set=3
    """
    
    [[customizations.files]]
    path = "/etc/microshift/tuned.yaml"
    data = """
    profile: microshift-baseline
    reboot_after_apply: True
    """
    Copy to Clipboard Toggle word wrap

次のステップ

  1. イメージのビルドプロセスを完了します。
  2. MicroShift クラスターの低レイテンシーを有効化するための以前の手順を完了していない場合は、今すぐ完了してください。これらの手順で収集された情報を使用してブループリントを更新します。
  3. ワークロードのパーティション分割を設定していない場合は、今すぐ設定してください。
  4. 低レイテンシー用に MicroShift ワークロードを準備します。

ビルドプロセスを完了するには、RHEL for Edge イメージに MicroShift を埋め込む以下の手順から開始します。次に、RHEL for Edge イメージに MicroShift をインストールするためのインストールドキュメントの残りの手順を完了します。

8.1.7. 低レイテンシーに対する MicroShift ワークロードの準備

低レイテンシーを利用するには、MicroShift で実行されるワークロードでは、RuntimeClass 機能を使用して microshift-low-latency コンテナーのランタイム設定を行う必要があります。CRI-O RuntimeClass オブジェクトは microshift-low-latency RPM でインストールされるため、Pod アノテーションのみを設定する必要があります。

前提条件

  • microshift-low-latency RPM パッケージをインストールしている。
  • ワークロードのパーティション分割を設定している。

手順

  • 以下の例を使用して、Pod 仕様で次のアノテーションを設定します。

    cpu-load-balancing.crio.io: "disable"
    irq-load-balancing.crio.io: "disable"
    cpu-quota.crio.io: "disable"
    cpu-load-balancing.crio.io: "disable"
    cpu-freq-governor.crio.io: "<governor>"
    Copy to Clipboard Toggle word wrap

    oslat テストを実行する Pod の例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: oslat
      annotations:
        cpu-load-balancing.crio.io: "disable" 
    1
    
        irq-load-balancing.crio.io: "disable" 
    2
    
        cpu-quota.crio.io: "disable" 
    3
    
        cpu-c-states.crio.io: "disable" 
    4
    
        cpu-freq-governor.crio.io: "<governor>" 
    5
    
    spec:
      runtimeClassName: microshift-low-latency 
    6
    
      containers:
      - name: oslat
        image: quay.io/container-perf-tools/oslat
        imagePullPolicy: Always
        resources:
          requests:
            memory: "400Mi"
            cpu: "2"
          limits:
            memory: "400Mi"
            cpu: "2"
        env:
        - name: tool
          value: "oslat"
        - name: manual
          value: "n"
        - name: PRIO
          value: "1"
        - name: delay
          value: "0"
        - name: RUNTIME_SECONDS
          value: "60"
        - name: TRACE_THRESHOLD
          value: ""
        - name: EXTRA_ARGS
          value: ""
        securityContext:
          privileged: true
          capabilities:
            add:
              - SYS_NICE
              - IPC_LOCK
    Copy to Clipboard Toggle word wrap

    1
    Pod の CPU 負荷分散を無効化します。
    2
    Pod の割り込み処理 (IRQ) をオプトアウトします。
    3
    Pod の実行時に CPU Completely Fair Scheduler (CFS) のクォータを無効にします。
    4
    各 CPU の C- 状態を有効化または無効化します。優先順位の高い Pod で最高のパフォーマンスを提供するには、値を disable に設定します。
    5
    各 CPU の cpufreq ガバナーを設定します。performance ガバナーは、優先度の高いワークロードに推奨されます。
    6
    runtimeClassName は、クラスターで設定したパフォーマンスプロファイルの名前と一致している必要があります。たとえば、microshift-low-latency です。
    注記

    CPU マネージャーの静的ポリシーが有効化され、CPU 全体を使用する Guaranteed QoS を持つ Pod に対してのみ、CPU 負荷分散を無効化します。これ以外の場合に CPU 負荷分散を無効にすると、クラスター内の他のコンテナーのパフォーマンスに影響する可能性があります。

    重要

    Pod が Guaranteed QoS クラスを持つには、要求と制限で CPU およびメモリーの値が同じである必要があります。Guaranteed (Kubernetes アップストリームのドキュメント) を参照してください。

イメージのブループリントは、複数のビルドを作成できる必要なイメージのカスタマイズの永続的な定義です。各イメージビルドのブループリントを再設定する代わりに、ブループリントからイメージを継続的に再ビルドできるように、ブループリントを編集、再ビルド、削除、および保存できます。

RHEL for Edge イメージにリアルタイムカーネルをインストールするために使用されるブループリントの例

name = "microshift-low-latency"
description = "RHEL 9.4 and MicroShift configured for low latency"
version = "0.0.1"
modules = []
groups = []
distro = "rhel-94"

[[packages]]
name = "microshift"
version = "*"

[[packages]]
name = "microshift-greenboot"
version = "*"

[[packages]]
name = "microshift-networking"
version = "*"

[[packages]]
name = "microshift-selinux"
version = "*"

[[packages]]
name = "microshift-low-latency"
version = "*"

# Kernel RT is only available for x86_64
[customizations.kernel]
name = "kernel-rt"

[customizations.services]
enabled = ["microshift", "microshift-tuned"]

[customizations.firewall]
ports = ["22:tcp", "80:tcp", "443:tcp", "5353:udp", "6443:tcp", "30000-32767:tcp", "30000-32767:udp"]

[customizations.firewall.services]
enabled = ["mdns", "ssh", "http", "https"]

[[customizations.firewall.zones]]
name = "trusted"
sources = ["10.42.0.0/16", "169.254.169.1"]

[[customizations.files]]
path = "/etc/microshift/config.yaml"
data = """
kubelet:
  cpuManagerPolicy: static
  cpuManagerPolicyOptions:
    full-pcpus-only: "true"
  cpuManagerReconcilePeriod: 5s
  memoryManagerPolicy: Static
  topologyManagerPolicy: single-numa-node
  reservedSystemCPUs: 0-1
  reservedMemory:
  - limits:
      memory: 1100Mi
    numaNode: 0
  kubeReserved:
    memory: 500Mi
  systemReserved:
    memory: 500Mi
  evictionHard:
    imagefs.available: 15%
    memory.available: 100Mi
    nodefs.available: 10%
    nodefs.inodesFree: 5%
  evictionPressureTransitionPeriod: 5m
"""

[[customizations.files]]
path = "/etc/tuned/microshift-baseline-variables.conf"
data = """
# Isolated cores should be complementary to the kubelet configuration reserved CPUs.
# Isolated and reserved CPUs must contain all online CPUs.
# Core #3 is for testing offlining, therefore it is skipped.
isolated_cores=2,4-5
hugepages_size=2M
hugepages=10
additional_args=test1=on test2=true dummy
offline_cpu_set=3
"""

[[customizations.files]]
path = "/etc/microshift/tuned.yaml"
data = """
profile: microshift-baseline
reboot_after_apply: True
"""
Copy to Clipboard Toggle word wrap

8.2. ワークロードのパーティション分割

ワークロードのパーティション分割は、ノードの CPU リソースを個別の CPU セットに分割します。主な目的は、ユーザーのワークロード用に残りのデバイス CPU リソースを予約するすべてのコントロールプレーンコンポーネントの CPU 使用率を制限することです。

ワークロードのパーティション分割は、予約済みの CPU セットを MicroShift サービス、クラスター管理ワークロード、およびインフラストラクチャー Pod に割り当て、クラスターデプロイメント内の残りの CPU が変更されずに、プラットフォーム以外のワークロード専用になるようにします。

8.2.1. ワークロードのパーティション分割の有効化

MicroShift でワークロードのパーティション分割を有効化するには、次の設定変更を行います。

  • MicroShift config.yaml ファイルを更新して、kubelet 設定ファイルを含めます。
  • CRI-O systemd および設定ファイルを作成します。
  • MicroShift および CRI-O サービスの systemd 設定ファイルをそれぞれ作成および更新します。

手順

  1. MicroShift config.yaml ファイルを更新して、kubelet 設定ファイルを含め、ワークロードの CPU マネージャーを有効化して設定します。

    • パス /etc/kubernetes/openshift-workload-pinning に kubelet 設定ファイルを作成します。kubelet 設定は、容量および割り当て可能な CPU に基づいてノードリソースを変更するように kubelet に指示します。

      kubelet 設定の例

      # ...
      {
        "management": {
          "cpuset": "0,6,7" 
      1
      
        }
      }
      # ...
      Copy to Clipboard Toggle word wrap

      1
      cpuset は、8 つの VCPU (4 コア) を搭載したマシンに適用され、ドキュメント全体で有効です。
    • パス /etc/microshift/config.yaml 内の MicroShift config.yaml ファイルを更新します。MicroShift config.yaml ファイルに kubelet 設定を埋め込んで、ワークロードの CPU マネージャーを有効化して設定します。

      MicroShift の config.yaml の例

      # ...
      kubelet:
        reservedSystemCPUs: 0,6,7 
      1
      
        cpuManagerPolicy: static
        cpuManagerPolicyOptions:
          full-pcpus-only: "true" 
      2
      
        cpuManagerReconcilePeriod: 5s
      # ...
      Copy to Clipboard Toggle word wrap

      1
      システムデーモンと割り込み/タイマー用の排他的な cpuset。
      2
      kubelet 設定では、CPUManagerPolicyOptions オプションを full-pcpus-only に設定し、コア全体をコンテナーのワークロードに割り当てできるようにします。
  2. CRI-O systemd および設定ファイルを作成します。

    • パス /etc/crio/crio.conf.d/20-microshift-workload-partition.conf に CRI-O 設定ファイルを作成します。このファイルは、11-microshift-ovn.conf ファイルにすでに存在するデフォルト設定をオーバーライドします。

      CRI-O 設定の例

      # ...
      [crio.runtime]
      infra_ctr_cpuset = "0,6,7"
      
      [crio.runtime.workloads.management]
      activation_annotation = "target.workload.openshift.io/management"
      annotation_prefix = "resources.workload.openshift.io"
      resources = { "cpushares" = 0, "cpuset" = "0,6,7" }
      # ...
      Copy to Clipboard Toggle word wrap

    • パス /etc/systemd/system/crio.service.d/microshift-cpuaffinity.conf に CRI-O の systemd ファイルを作成します。

      CRI-O systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard Toggle word wrap

  3. MicroShift および CRI-O サービスの CPUAffinity 値を使用して、systemd 設定ファイルを作成および更新します。

    • パス /etc/systemd/system/microshift.service.d/microshift-cpuaffinity.conf に MicroShift サービスの systemd ファイルを作成します。MicroShift は、systemd CPUAffinity 値を使用して固定されます。

      MicroShift サービスの systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard Toggle word wrap

    • パス /etc/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf の MicroShift ovs-vswitchd systemd ファイルの CPUAffinity 値を更新します。

      MicroShift ovs-vswitchd systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard Toggle word wrap

    • パス /etc/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf の MicroShift ovsdb-server systemd ファイルの CPUAffinity 値を更新します。

      MicroShift ovsdb-server systemd 設定の例

      # ...
      [Service]
      CPUAffinity=0,6,7
      # ...
      Copy to Clipboard Toggle word wrap

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat