第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.yaml
MicroShift 設定ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、MicroShift を再起動し、証明書を適用します。
systemctl microshift restart
$ systemctl microshift restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
システムが再起動してカスタムサーバーが適用されるまで数分間待ちます。新しい
kubeconfig
ファイルは/var/lib/microshift/resources/kubeadmin/
ディレクトリーに生成されます。 -
kubeconfig
ファイルをクライアントにコピーします。IP アドレスにワイルドカードを指定した場合は、kubeconfig
を更新してサーバーのパブリック IP アドレスを削除し、その IP アドレスを使用する特定のワイルドカード範囲に置き換えます。 クライアントからは、次の手順を実行します。
次のコマンドを実行して、使用する
kubeconfig
を指定します。export KUBECONFIG=~/custom-kubeconfigs/kubeconfig
$ export KUBECONFIG=~/custom-kubeconfigs/kubeconfig
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- コピーした
kubeconfig
ファイルの場所をパスとして使用します。
次のコマンドを使用して、証明書が適用されていることを確認します。
oc --certificate-authority ~/certs/ca.ca get node
$ oc --certificate-authority ~/certs/ca.ca get node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
oc get node NAME STATUS ROLES AGE VERSION dhcp-1-235-195.arm.example.com Ready control-plane,master,worker 76m v1.32.3
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 Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、新しい CA ファイルを $KUBECONFIG 環境変数に追加します。
oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
$ oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、新しい
kubeconfig
ファイルに新しい CA が含まれていることを確認します。oc config view --flatten
$ oc config view --flatten
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 外部で生成された
kubeconfig
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 外部で生成された
kubeconfig
ファイルには、certificate-authority-data
セクションが存在しません。これは、以前使用したoc config set
コマンドで追加されます。
次のコマンドを実行して、カスタマイズされた API サーバー認証局の
subject
とissuer
を確認します。curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
$ curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要生成された
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
$ journalctl -u microshift -b0 | grep tls-sni-cert-key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
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
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 Copied! Toggle word wrap Toggle overflow クライアントから次のコマンドを実行して、
kube-apiserver
が正しい証明書を提供していることを確認します。openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
$ openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.5. カスタム証明書のクリーンアップおよび再作成 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift サービスを停止するには、カスタム証明書をクリーンアップし、カスタム証明書を再作成するには、次の手順を使用します。
手順
次のコマンドを実行して、MicroShift サービスを停止し、カスタム証明書をクリーンアップします。
sudo microshift-cleanup-data --cert
$ sudo microshift-cleanup-data --cert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、MicroShift サービスを再起動し、カスタム証明書を再作成します。
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow