設定
第1章 MicroShift の config.yaml の使用
YAML ファイルは、設定およびパラメーターを使用して MicroShift インスタンスをカスタマイズします。
kustomize
マニフェスト以外のツールを使用し、MicroShif API を介して設定を変更したり、アプリケーションをデプロイしたりする場合は、greenboot ヘルスチェックが完了するまで待つ必要があります。これにより、greenboot が rpm-ostree
システムを以前の状態にロールバックしても、変更が失われなくなります。
1.1. デフォルトの設定
config.yaml
ファイルを作成しない場合は、デフォルト値が使用されます。次の例は、デフォルトの設定を示しています。
デフォルト値を確認するには、次のコマンドを実行します。
$ microshift show-config
YAML 形式でのデフォルト値の出力例
apiServer: advertiseAddress: 10.44.0.0/32 1 auditLog: maxFileAge: 0 2 maxFileSize: 200 3 maxFiles: 10 4 profile: Default 5 namedCertificates: - certPath: "" keyPath: "" names: - "" subjectAltNames: [] 6 debugging: logLevel: "Normal" 7 dns: baseDomain: microshift.example.com 8 etcd: memoryLimitMB: 0 9 ingress: listenAddress: - "" 10 ports: 11 http: 80 https: 443 routeAdmissionPolicy: namespaceOwnership: InterNamespaceAllowed 12 status: Managed 13 manifests: 14 kustomizePaths: - /usr/lib/microshift/manifests - /usr/lib/microshift/manifests.d/* - /etc/microshift/manifests - /etc/microshift/manifests.d/* network: clusterNetwork: - 10.42.0.0/16 15 serviceNetwork: - 10.43.0.0/16 16 serviceNodePortRange: 30000-32767 17 node: hostnameOverride: "" 18 nodeIP: "" 19
- 1
- API サーバーがクラスターのメンバーにアドバタイズされる IP アドレスを指定する文字列。デフォルト値は、サービスネットワークのアドレスに基づいて計算されます。
- 2
- ログファイルが自動的に削除されるまでの保存期間。
maxFileAge
パラメーターのデフォルト値0
に設定すると、ログファイルが経過時間をベースに削除されなくなります。この値は設定可能です。 - 3
- デフォルトでは、
audit.log
ファイルがmaxFileSize
の制限に達すると、audit.log
ファイルがローテーションされ、MicroShift は新しいaudit.log
ファイルへの書き込みを開始します。この値は設定可能です。 - 4
- 保存されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。
- 5
- 読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、
Default
プロファイルが使用されます。 - 6
- API サーバー証明書のサブジェクト代替名 (SAN)。
- 7
- ログの詳細レベル。このフィールドの有効な値は、
Normal
、Debug
、Trace
、またはTraceAll
です。 - 8
- デフォルトでは、
etcd
はシステムの負荷を処理するために必要な量のメモリーを使用します。ただし、メモリー制約のあるシステムでは、etcd
が特定の時点で使用できるメモリーの量を制限することが望ましいか、または制限する必要がある場合があります。 - 9
- クラスターのベースドメイン。管理されるすべての DNS レコードはこのベースのサブドメインです。
- 10
ingress.listenAddress
の値は、デフォルトでホストのネットワーク全体に設定されます。有効な設定可能な値は、単一の IP アドレスまたは NIC 名、あるいは複数の IP アドレスと NIC 名のリストです。- 11
- デフォルトのポートが表示されます。設定可能です。両方のポートエントリーの有効な値は、1 - 65535 の範囲にある単一の一意のポートです。
ports.http
およびports.https
フィールドの値は、同じにすることはできません。 - 12
- 複数の namespace のホスト名要求の処理方法を記述します。デフォルトでは、ルートが、複数の namespace においてホストが同じ名前でパスが異なる要求を許可します。有効な値は
Strict
およびInterNamespaceAllowed
です。Strict
を指定すると、namespace が異なるルートが、同じホスト名を要求しなくなります。カスタマイズされた MicroShift のconfig.yaml
で値が削除されると、InterNamespaceAllowed
値が自動的に設定されます。 - 13
- デフォルトのルーターステータスは、
Managed
またはRemoved
のいずれかになります。 - 14
- マニフェストをロードするために使用する
kustomization
ファイルをスキャンするファイルシステム上の場所。パスのリストを設定すると、それらのパスのみをスキャンします。マニフェストの読み込みを無効にするには、空のリストに設定します。リスト内のエントリーは、複数のサブディレクトリーに一致する glob パターンに指定できます。 - 15
- Pod IP アドレスの割り当てに使用する IP アドレスのブロック。このフィールドは、インストール後は不変です。
- 16
- Kubernetes サービスの仮想 IP アドレスのブロック。サービスの IP アドレスプール。単一のエントリーがサポートされます。このフィールドは、インストール後は不変です。
- 17
NodePort
タイプの Kubernetes サービスに許可されるポート範囲。指定しない場合、デフォルトの範囲の 30000-32767 が使用されます。NodePort
が指定されていないサービスは、この範囲から自動的に割り当てられます。このパラメーターは、クラスターのインストール後に更新できます。- 18
- ノードの名前。デフォルト値はホスト名です。空でない場合、この文字列はホスト名ではなく、ノードを識別するために使用されます。MicroShift の初回起動後に、この不変設定を変更することはできません。
- 19
- ノードの IP アドレス。デフォルト値は、デフォルトルートの IP アドレスです。
1.2. YAML 設定ファイルの使用
MicroShift は、起動時にシステム全体の /etc/microshift/
ディレクトリーで config.yaml
という名前の設定ファイルがあるか確認します。ディレクトリー内に設定ファイルが存在しない場合は、組み込みのデフォルト値を使用してサービスが開始されます。
1.2.1. カスタム設定
カスタム設定を作成するには、MicroShift を起動または再起動する前に、/etc/microshift/
ディレクトリーに config.yaml
ファイルを作成し、デフォルトをオーバーライドするための設定を変更する必要があります。
設定を変更したら、MicroShift を再起動して有効にします。config.yaml
は MicroShift 起動時の読み取り専用ファイルです。
必要な設定をすべて一度に追加すると、システムの再起動を最小限に抑えることができます。
1.2.2. アドバタイズアドレスネットワークフラグの設定
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.2.3. NodePort サービスのポート範囲の拡張
serviceNodePortRange
設定では、NodePort サービスで使用できるポート範囲が拡張します。このオプションは、30000-32767
範囲内で特定の標準ポートを公開する必要がある場合に役立ちます。たとえば、クライアントデバイスは別のポートを使用できないため、デバイスはネットワーク上で 1883/tcp
MQ Telemetry Transport (MQTT) ポートを公開する必要があります。
NodePort がシステムポートと重複し、システムまたは MicroShift の誤動作を引き起こす可能性があります。
NodePort サービス範囲を設定するときは、次の点を考慮してください。
-
nodePort
を明示的に選択せずに NodePort サービスを作成しないでください。明示的なnodePort
が指定されていない場合、このポートはkube-apiserver
によってランダムに割り当てられるため、予測できません。 -
デバイスの
HostNetwork
で公開するシステムサービスポート、MicroShift ポート、またはその他のサービスに対して NodePort サービスを作成しないでください。 表 1 は、ポート範囲の拡張時に避けるべきポートを示しています。
表1.1 回避するポート ポート 説明 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 スケジューラー
1.3. 関連情報
第2章 kubeconfig を使用したクラスターアクセス
MicroShift デプロイメントで kubeconfig
ファイルがどのように使用されるかを説明します。CLI ツールは、kubeconfig
ファイルを使用してクラスターの API サーバーと通信します。これらのファイルには、クラスターの詳細、IP アドレス、および認証に必要なその他の情報が含まれています。
2.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
2.2. ローカルアクセスの kubeconfig ファイル
ローカルアクセスの kubeconfig
ファイルは /var/lib/microshift/resources/kubeadmin/kubeconfig
に書き込まれます。この kubeconfig
ファイルは、localhost
を使用した API サーバーへのアクセスを提供します。クラスターをローカルに接続する場合は、このファイルを選択します。
ローカルアクセス用の kubeconfig
の内容例
clusters: - cluster: certificate-authority-data: <base64 CA> server: https://localhost:6443
localhost
の kubeconfig
ファイルは、同じホストから API サーバーに接続するクライアントからのみ使用できます。ファイル内の証明書はリモート接続では機能しません。
2.2.1. MicroShift クラスターへのローカルアクセス
以下の手順に従って、kubeconfig
ファイルを使用して MicroShift クラスターをローカルでアクセスします。
前提条件
-
oc
バイナリーがインストールされている。
手順
オプション: Red Hat Enterprise Linux (RHEL) マシンに
~/.kube/
フォルダーがない場合は、次のコマンドを実行してフォルダーを作成します。$ mkdir -p ~/.kube/
次のコマンドを実行して、生成されたローカルアクセス
kubeconfig
ファイルを~/.kube/
ディレクトリーにコピーします。$ sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
次のコマンドを実行して、
~/.kube/config
ファイルの権限を更新します。$ chmod go-r ~/.kube/config
検証
次のコマンドを入力して、MicroShift が実行されていることを確認します。
$ oc get all -A
2.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
2.3.1. リモートアクセスのカスタマイズ
異なる IP アドレスまたはホスト名でクラスターにアクセスするために、複数のリモートアクセス kubeconfig
ファイル値を生成できます。apiServer.subjectAltNames
パラメーターのエントリーごとに追加の kubeconfig
ファイルが生成されます。IP 接続中にホストからリモートアクセス kubeconfig
ファイルをコピーし、それを使用して他のワークステーションから API サーバーにアクセスできます。
2.4. リモートアクセス用の追加の kubeconfig ファイルの生成
デフォルトのリモートアクセスファイルが提供するものより多くのホスト名または IP アドレスが必要な場合は、追加の kubeconfig
ファイルを生成して使用できます。
設定の変更を実装するには、MicroShift を再起動する必要があります。
前提条件
-
MicroShift の
config.yaml
が作成されている。
手順
オプション:
config.yaml
の内容を表示できます。以下のコマンドを実行します。$ cat /etc/microshift/config.yaml
オプション: リモートアクセス
kubeconfig
ファイルの内容を表示できます。以下のコマンドを実行します。$ cat /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig
重要追加のリモートアクセス
kubeconfig
ファイルには、Red Hat build of MicroShiftconfig.yaml
ファイルにリストされているサーバー名のいずれかを含める必要があります。追加のkubeconfig
ファイルも検証に同じ CA を使用する必要があります。追加の 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
MicroShift を再起動して設定の変更を適用し、次のコマンドを実行して必要な
kubeconfig
ファイルを自動生成します。$ sudo systemctl restart microshift
追加のリモートアクセス
kubeconfig
ファイルの内容を確認するには、config.yaml
にリストされている名前または IP アドレスをcat
コマンドに挿入します。たとえば、次のコマンド例ではalt-name-1
が使用されています。$ cat /var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig
クラスターの接続に使用する SAN または IP アドレスを含む、使用する
kubeconfig
ファイルを選択します。この例では、cluster.server
フィールドに `alt-name-1` を含むkubeconfig
が正しいファイルです。追加の
kubeconfig
ファイルの内容の例clusters: - cluster: certificate-authority-data: <base64 CA> server: https://alt-name-1:6443 1
- 1
/var/lib/microshift/resources/kubeadmin/alt-name-1/kubeconfig
ファイルの値は、apiServer.subjectAltNames
設定値からのものです。
これらのパラメーターはすべて、API サーバーの外部提供証明書に共通名 (CN) およびサブジェクト代替名 (SAN) として含まれています。
2.4.1. MicroShift クラスターへのリモートアクセス用にファイアウォールを開く
リモートユーザーが MicroShift クラスターにアクセスできるように、次の手順を使用してファイアウォールを開きます。この手順は、ワークステーションユーザーがリモートでクラスターにアクセスする前に完了する必要があります。
この手順では、user@microshift
は、MicroShift ホストマシン上のユーザーであり、別のワークステーション上のリモートユーザーがアクセスできるようにそのマシンをセットアップする責任があります。
前提条件
-
oc
バイナリーがインストールされている。 - クラスター管理者の権限がある。
手順
MicroShift ホストの
user@microshift
として、次のコマンドを実行して、Kubernetes API サーバー (6443/tcp
) のファイアウォールポートを開きます。[user@microshift]$ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp && sudo firewall-cmd --reload
検証
user@microshift
として次のコマンドを実行して、MicroShift が入力されていることを確認します。[user@microshift]$ oc get all -A
2.4.2. MicroShift クラスターへのリモートアクセス
以下の手順に従って、kubeconfig
ファイルを使用してリモートロケーションから MicroShift クラスターにアクセスします。
user@workstation
ログインは、ホストマシンにリモートからアクセスするのに使用されます。手順の <user>
値は、user@workstation
が MicroShift ホストにログインするユーザーの名前になります。
前提条件
-
oc
バイナリーがインストールされている。 -
user@microshift
は、ローカルホストからファイアウォールを開いている。
手順
user@workstation
として、Red Hat Enterprise Linux (RHEL) マシンに~/.kube/
フォルダーがない場合は、次のコマンドを実行してフォルダーを作成します。[user@workstation]$ mkdir -p ~/.kube/
user@workstation
として、次のコマンドを実行して、MicroShift ホストのホスト名の変数を設定します。[user@workstation]$ MICROSHIFT_MACHINE=<name or IP address of MicroShift machine>
user@workstation
として、次のコマンドを実行して、MicroShift を実行している RHEL マシンからローカルマシンに接続するホスト名または IP アドレスを含む生成されたkubeconfig
ファイルをコピーします。[user@workstation]$ ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/config
注記この手順の
kubeconfig
ファイルを生成するには、リモートアクセス用の kubeconfig ファイルの追加生成 を参照してください。user@workstation
として、次のコマンドを実行して~/.kube/config
ファイルのパーミッションを更新します。$ chmod go-r ~/.kube/config
検証
user@workstation
として、次のコマンドを入力して、MicroShift が実行されていることを確認します。[user@workstation]$ oc get all -A
第3章 カスタム認証局の設定
MicroShift サービスでは、カスタム証明局 (CA) を使用して接続を暗号化できます。
3.1. MicroShift でのカスタム認証局の仕組み
デフォルトの API サーバー証明書は、内部の MicroShift クラスター認証局 (CA) によって発行されます。デフォルトでは、クラスター外部のクライアントは API サーバー証明書を検証できません。この証明書は、クライアントが信頼するカスタム CA によって外部的に発行されたカスタムサーバー証明書に置き換えることができます。次の手順は、MicroShift のワークフローを示しています。
- 証明書とキーをホストオペレーティングシステムの優先ディレクトリーにコピーします。ファイルに root のみがアクセスできることを確認してください。
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 名を指定できます。
-
MicroShift サービスが再起動した後、生成された
kubeconfig
ファイルをクライアントにコピーする必要があります。 - クライアントシステムで追加の CA を設定します。たとえば、Red Hat Enterprise Linux (RHEL) トラストストア内の CA バンドルを更新できます。
- 証明書と鍵は、ホスト上の指定されたファイルの場所から読み取られます。設定のテストおよび検証はクライアントから行われます。
- 外部サーバー証明書は自動的に更新されません。外部証明書を手動でローテーションする必要があります。
検証に失敗した場合、MicroShift サービスはカスタム設定をスキップし、デフォルトの証明書を使用して起動します。サービスを中断せずに継続することが最優先事項です。MicroShift は、サービスの開始時にエラーを記録します。一般的なエラーには、証明書の期限切れ、ファイルの欠落、IP アドレスの誤りなどがあります。
カスタムサーバー証明書は、ホストオペレーティングシステムの信頼ルートに設定された CA データに対して検証する必要があります。詳細は、システム全体のトラストストア を参照してください。
3.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
設定ファイルが存在する。
手順
- 追加するカスタム証明書を MicroShift ホストの信頼ルートにコピーします。証明書と秘密鍵に MicroShift のみがアクセス可能であることを確認します。
必要なカスタム 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
次のコマンドを実行して、MicroShift を再起動し、証明書を適用します。
$ systemctl microshift restart
-
システムが再起動してカスタムサーバーが適用されるまで数分間待ちます。新しい
kubeconfig
ファイルは/var/lib/microshift/resources/kubeadmin/
ディレクトリーに生成されます。 -
kubeconfig
ファイルをクライアントにコピーします。IP アドレスにワイルドカードを指定した場合は、kubeconfig
を更新してサーバーのパブリック IP アドレスを削除し、その IP アドレスを使用する特定のワイルドカード範囲に置き換えます。 クライアントからは、次の手順を実行します。
次のコマンドを実行して、使用する
kubeconfig
を指定します。$ export KUBECONFIG=~/custom-kubeconfigs/kubeconfig 1
- 1
- コピーした
kubeconfig
ファイルの場所をパスとして使用します。
次のコマンドを使用して、証明書が適用されていることを確認します。
$ oc --certificate-authority ~/certs/ca.ca get node
出力例
oc get node NAME STATUS ROLES AGE VERSION dhcp-1-235-195.arm.example.com Ready control-plane,master,worker 76m v1.29.2
次のコマンドを実行して、新しい CA ファイルを $KUBECONFIG 環境変数に追加します。
$ oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
次のコマンドを実行して、新しい
kubeconfig
ファイルに新しい CA が含まれていることを確認します。$ oc config view --flatten
外部で生成された
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: {}
- 1
- 外部で生成された
kubeconfig
ファイルには、certificate-authority-data
セクションが存在しません。これは、以前使用したoc config set
コマンドで追加されます。
次のコマンドを実行して、カスタマイズされた API サーバー認証局の
subject
とissuer
を確認します。$ curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
出力例
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.
重要生成された
kubeconfig
ファイル内のcertificate-authority-data
を新しいrootCA
に置き換えるか、certificate-authority-data
をオペレーティングシステムの信頼ルートに追加します。両方の方法を使用しないでください。オペレーティングシステムの信頼ルートで追加の CA を設定します。たとえば、クライアントシステム上の RHEL クライアントトラストストア内などです。詳細は、システム全体のトラストストア を参照してください。
- CA を含む設定で証明書バンドルを更新することを推奨します。
-
証明書バンドルを設定しない場合は、代わりに
oc login localhost:8443 --certificate-authority=/path/to/cert.crt
コマンドを使用することもできますが、この方法は推奨されません。
3.3. カスタム証明書の予約名の値
次の証明書の問題により、MicroShift は証明書を動的に無視し、エラーをログに記録します。
- 証明書ファイルがディスク上に存在しないか、読み取り可能ではありません。
- 証明書は解析できません。
-
証明書は、
SubjectAlternativeNames
(SAN) フィールド内の内部証明書の IPAddress/DNSNames を上書きします。SAN を設定するときは予約名を使用しないでください。
住所 | 型 | コメント |
---|---|---|
| DNS | |
| IP Address | |
| IP Address | クラスターネットワーク |
| IP Address | サービスネットワーク |
169.254.169.2/29 | IP Address | br-ex ネットワーク |
| DNS | |
| DNS | |
| DNS |
3.4. カスタム証明書のトラブルシューティング
カスタム証明書の実装のトラブルシューティングを行うには、次の手順を実行します。
手順
MicroShift から、次のコマンドを実行して、証明書が
kube-apiserver
によって提供されていることを確認し、証明書パスが--tls-sni-cert-key
フラグに追加されていることを確認します。$ journalctl -u microshift -b0 | grep tls-sni-cert-key
出力例
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
クライアントから次のコマンドを実行して、
kube-apiserver
が正しい証明書を提供していることを確認します。$ openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
3.5. カスタム証明書のクリーンアップおよび再作成
MicroShift サービスを停止するには、カスタム証明書をクリーンアップし、カスタム証明書を再作成するには、次の手順を使用します。
手順
次のコマンドを実行して、MicroShift サービスを停止し、カスタム証明書をクリーンアップします。
$ sudo microshift-cleanup-data --cert
出力例
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
次のコマンドを実行して、MicroShift サービスを再起動し、カスタム証明書を再作成します。
$ sudo systemctl start microshift
3.6. 関連情報
第4章 greenboot スクリプトのステータスの確認
kustomize
マニフェスト以外のツールを使用して MicroShift API を通じてアプリケーションをデプロイしたり、その他の変更を加えたりするには、greenboot ヘルスチェックが完了するまで待つ必要があります。これにより、greenboot が rpm-ostree
システムを以前の状態にロールバックしても、変更が失われなくなります。
greenboot-healthcheck
サービスは 1 回実行してから終了します。greenboot が終了し、システムが正常な状態になったら、設定の変更とデプロイメントを続行できます。
4.1. greenboot ヘルスチェックのステータスの確認
システムに変更を加える前、またはトラブルシューティング中に、greenboot ヘルスチェックのステータスを確認します。次のコマンドのいずれかを使用すると、greenboot スクリプトの実行が完了したことを確認できます。
手順
ヘルスチェックステータスのレポートを表示するには、次のコマンドを使用します。
$ systemctl show --property=SubState --value greenboot-healthcheck.service
-
start
が出力される場合、greenboot チェックがまだ実行中であることを意味します。 -
exited
が出力される場合、チェックが合格し、greenboot が終了したことを意味します。Greenboot は、システムが正常な状態の場合、green.d
ディレクトリー内のスクリプトを実行します。 -
failed
の出力は、チェックが合格しなかったことを意味します。システムがこの状態にある場合、Greenboot はred.d
ディレクトリー内のスクリプトを実行し、システムを再起動する可能性があります。
-
サービスの数値終了コードを示すレポートを表示するには、次のコマンドを使用します。
0
は成功を、0 以外の値は失敗を意味します。$ systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
Boot Status is GREEN - Health Check SUCCESS
など、ブートステータスに関するメッセージを表示するレポートを表示するには、次のコマンドを使用します。$ cat /run/motd.d/boot-status
第5章 監査ロギングポリシーの設定
設定値を使用して、MicroShift 監査ログファイルのローテーションと保持を制御できます。
5.1. 監査ログファイルの制限設定について
設定値を使用して MicroShift 監査ログファイルのローテーションと保持を制御すると、ファーエッジデバイスの限られたストレージ容量を超えないようにすることができます。このようなデバイスでは、ログデータの蓄積によってホストシステムまたはクラスターのワークロードが制限され、デバイスの動作が停止する可能性があります。監査ログポリシーを設定すると、重要な処理スペースを継続して利用できるようにします。
MicroShift 監査ログを制限するために設定した値を使用すると、監査ログバックアップのサイズ、数、保存期間の制限を適用できます。フィールド値は、優先順位を付けずに、互いに独立して処理されます。
フィールドを組み合わせて設定し、保持されるログの最大ストレージ制限を定義できます。以下に例を示します。
-
ログストレージの上限を作成するには、
maxFileSize
とmaxFiles
の両方を設定します。 -
maxFileAge
値を設定すると、maxFiles
値に関係なく、ファイル名のタイムスタンプより古いファイルが自動的に削除されます。
5.1.1. デフォルトの監査ログ値
MicroShift には、次のデフォルトの監査ログローテーション値が含まれています。
監査ログパラメーター | デフォルト設定 | 定義 |
---|---|---|
|
| ログファイルが自動的に削除されるまでの保持期間。デフォルト値は、経過時間をベースにしてログファイルが削除されないという意味です。この値は設定可能です。 |
|
| 保持されるログファイルの合計数。デフォルトでは、MicroShift は 10 個のログファイルを保持します。余分なファイルが作成されると、最も古いものが削除されます。この値は設定可能です。 |
|
|
デフォルトでは、 |
|
|
|
ファイルが 10 個以下の場合、監査ログの保持の最大デフォルトストレージ使用量は 2000 Mb です。
フィールドに値を指定しない場合は、デフォルト値が使用されます。以前に設定したフィールド値を削除すると、次回の MicroShift サービスの再起動後にデフォルト値が復元されます。
アプリケーション Pod によって生成されるログは、Red Hat Enterprise Linux (RHEL) で監査ログの保持およびローテーションを設定する必要があります。これらのログはコンソールに出力され、保存されます。MicroShift クラスターの健全性を維持するために、RHEL /var/log/audit/audit.log
ファイルにログ設定が設定されていることを確認してください。
関連情報
- 環境を保護するための auditd の設定
- Audit ログファイルについて
- How to use logrotate utility to rotate log files (2024 年 8 月 7 日付けのソリューション記事)
5.2. 監査ログポリシープロファイルについて
監査ログプロファイルは、OpenShift API サーバーおよび Kubernetes API サーバーに送信されるリクエストをログに記録する方法を定義します。
MicroShift は、次の定義済み監査ポリシープロファイルをサポートしています。
Profile | 説明 |
---|---|
| 読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。これはデフォルトポリシーになります。 |
|
すべてのリクエストのメタデータのログに加えて、API サーバーへのすべての書き込みリクエスト ( |
|
すべての要求のメタデータをロギングする以外にも、API サーバーへの読み取りおよび書き込み要求ごとに要求の本文をログに記録します ( |
| OAuth アクセストークン要求や OAuth 承認トークン要求などの要求はログに記録されません。 警告
問題のトラブルシューティング時に有用なデータが記録されないリスクを完全に理解していない限り、 |
-
Secret
、Route
、OAuthClient
オブジェクトなどの機密リソースは、メタデータレベルでのみログ記録されます。
デフォルトでは、MicroShift は Default
の監査ログプロファイルを使用します。リクエスト本文もログに記録する別の監査ポリシープロファイルを使用することもできますが、CPU、メモリー、I/O などのリソース使用量が増加することに注意してください。
5.3. 監査ログ値の設定
MicroShift サービス設定ファイルを使用して、監査ログ設定を指定できます。
手順
-
指定されている
config.yaml.default
ファイルのコピーを/etc/microshift/
ディレクトリーに作成し、名前をconfig.yaml
に変更します。作成した新しい MicroShiftconfig.yaml
を/etc/microshift/
ディレクトリーに保存します。MicroShift サービスが開始されるたびに、新しいconfig.yaml
が読み取られます。これを作成すると、config.yaml
ファイルは組み込み設定よりも優先されます。 YAML の
auditLog
セクションのデフォルト値を必要な有効な値に置き換えてください。デフォルトの
auditLog
設定の例apiServer: # .... auditLog: maxFileAge: 7 1 maxFileSize: 200 2 maxFiles: 1 3 profile: Default 4 # ....
- 1
- ログファイルが保持される最大時間を日数で指定します。この制限よりも古いファイルは削除されます。この例では、ログファイルは 7 日以上経過すると削除されます。ライブログが
maxFileSize
フィールドで指定された最大ファイルサイズに達したかどうかに関係なく、ファイルは削除されます。ファイルの有効期限は、ローテーションされたログファイルの名前に書き込まれたタイムスタンプによって決定されます (例:audit-2024-05-16T17-03-59.994.log)
。値が0
の場合、制限は無効になります。 - 2
- 監査ログファイルの最大サイズ (メガバイト単位)。この例では、ライブログが 200 MB の制限に達するとすぐにファイルがローテーションされます。値を
0
に設定すると、制限は無効になります。 - 3
- 保持されるローテーションされた監査ログファイルの最大数。制限に達すると、ログファイルは古いものから順に削除されます。この例では、値
1
を指定すると、現在のアクティブログに加えて、maxFileSize
サイズのファイル 1 つだけが保持されます。値を0
に設定すると、制限は無効になります。 - 4
- 読み取りおよび書き込み要求のメタデータのみをログに記録します。OAuth アクセストークン要求を除く要求の本文はログに記録されません。このフィールドを指定しない場合は、
Default
プロファイルが使用されます。
オプション: ログ用の新しいディレクトリーを指定するには、MicroShift を停止し、
/var/log/kube-apiserver
ディレクトリーを目的の場所に移動します。次のコマンドを実行して MicroShift を停止します。
$ sudo systemctl stop microshift
以下のコマンドを実行して、
/var/log/kube-apiserver
ディレクトリーを目的の場所に移動します。$ sudo mv /var/log/kube-apiserver <~/kube-apiserver> 1
- 1
- <~/kube-apiserver> は、使用するディレクトリーへのパスに置き換えます。
ログの新規ディレクトリーを指定した場合、次のコマンドを実行して、
/var/log/kube-apiserver
にカスタムディレクトリーへのシンボリックリンクを作成します。$ sudo ln -s <~/kube-apiserver> /var/log/kube-apiserver 1
- 1
- <~/kube-apiserver> は、使用するディレクトリーへのパスに置き換えます。これにより、SOS レポートでのログの収集が可能になります。
実行中のインスタンスで監査ログポリシーを設定する場合は、次のコマンドを入力して MicroShift を再起動します。
$ sudo systemctl restart microsohift
5.4. 監査ログ設定のトラブルシューティング
カスタム監査ログ設定とファイルの場所のトラブルシューティングを行うには、次の手順に従います。
手順
次のコマンドを実行して、現在設定されている値を確認します。
$ sudo microshift show-config --mode effective
出力例
auditLog: maxFileSize: 200 maxFiles: 1 maxFileAge: 7 profile: AllRequestBodies
次のコマンドを実行して、
audit.log
ファイルのパーミッションを確認します。$ sudo ls -ltrh /var/log/kube-apiserver/audit.log
出力例
-rw-------. 1 root root 46M Mar 12 09:52 /var/log/kube-apiserver/audit.log
次のコマンドを実行して、現在のログディレクトリーの内容をリスト表示します。
$ sudo ls -ltrh /var/log/kube-apiserver/
出力例
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