第7章 MicroShift の認証とセキュリティーの設定
7.1. カスタム認証局の設定 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift のデフォルトの API サーバー証明書を認証局 (CA) が発行したカスタムサーバー証明書に置き換えることで、外部クライアントとの接続が許可および暗号化されます。
7.1.1. MicroShift API サーバーのカスタム認証局の使用 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift が起動すると、内部の MicroShift クラスター認証局 (CA) によってデフォルトの API サーバー証明書が発行されます。デフォルトでは、クラスター外のクライアントは MicroShift が発行した API サーバー証明書を検証できません。MicroShift API サーバーと外部クライアント間のセキュアなアクセスを許可し、接続を暗号化できます。デフォルトの証明書は、クライアントが信頼する CA によって外部的に発行されたカスタムサーバー証明書に置き換えます。
次のステップは、MicroShift で API サーバー証明書設定をカスタマイズするためのワークフローを示しています。
- 証明書とキーをホストオペレーティングシステムの優先ディレクトリーにコピーします。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 バンドルを更新できます。
重要カスタムサーバー証明書は、ホストオペレーティングシステムの信頼ルートに設定された CA データに対して検証する必要があります。詳細は、以下のドキュメントを参照してください。
証明書と鍵は、ホスト上の指定されたファイルの場所から読み取られます。クライアントから設定をテストして検証できます。
- 検証に失敗した場合、MicroShift はカスタム設定をスキップし、デフォルトの証明書を使用して起動します。サービスを中断せずに継続することが最優先事項です。MicroShift は、サービスの開始時にエラーを記録します。一般的なエラーには、証明書の期限切れ、ファイルの欠落、IP アドレスの誤りなどがあります。
- 外部サーバー証明書は自動的に更新されません。外部証明書を手動でローテーションする必要があります。
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設定ファイルが存在する。
手順
- 追加するカスタム証明書を MicroShift ホストの信頼ルートにコピーします。証明書と秘密鍵に MicroShift のみがアクセス可能であることを確認します。
必要なカスタム CA ごとに、次の例を使用して、
namedCertificatesというapiServerセクションを/etc/microshift/config.yamlMicroShift 設定ファイルに追加します。apiServer: namedCertificates: - certPath: ~/certs/api_fqdn_1.crt1 keyPath: ~/certs/api_fqdn_1.key2 - 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/kubeconfig1 - 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.32.3次のコマンドを実行して、新しい 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.crt1 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コマンドを使用することもできますが、この方法は推奨されません。
7.1.3. カスタム証明書の予約名の値 リンクのコピーリンクがクリップボードにコピーされました!
次の証明書の問題により、MicroShift は証明書を動的に無視し、エラーをログに記録します。
- 証明書ファイルがディスク上に存在しないか、読み取り可能ではありません。
- 証明書は解析できません。
-
証明書は、
SubjectAlternativeNames(SAN) フィールドの内部証明書の IP アドレスまたは DNS 名をオーバーライドします。SAN を設定するときは予約名を使用しないでください。
| アドレス | 型 | コメント |
|---|---|---|
|
| DNS | |
|
| IP Address | |
|
| IP Address | クラスターネットワーク |
|
| IP Address | サービスネットワーク |
| 169.254.169.2/29 | IP Address | br-ex ネットワーク |
|
| DNS | |
|
| DNS | |
|
| DNS |
7.1.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"
7.1.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