第7章 Hosted Control Plane の証明書の設定
クライアントと Hosted Control Plane 間のセキュアで暗号化された通信を確立するには、ホステッドクラスター用のサーバー証明書を設定する必要があります。
Hosted Control Plane の場合、証明書の設定手順はスタンドアロンの OpenShift Container Platform の場合とは異なります。
7.1. ホステッドクラスターでカスタム API サーバー証明書を設定する リンクのコピーリンクがクリップボードにコピーされました!
API サーバーのカスタム証明書を設定するには、HostedCluster 設定の spec.configuration.apiServer セクションで証明書の詳細を指定します。
カスタム証明書は、Day 1 または Day 2 操作中に設定できます。ただし、サービス公開ストラテジーはホステッドクラスターの作成中に設定した後は変更できないため、設定する予定の Kubernetes API サーバーのホスト名を知っておく必要があります。
前提条件
管理クラスターにカスタム証明書が含まれる Kubernetes シークレットを作成しました。シークレットには次の鍵が含まれています。
-
tls.crt: 証明書 -
tls.key: 秘密鍵
-
HostedClusterの設定にspec.configuration.apiServer.servingCerts.namedCertificates仕様によるカスタム提供証明書が含まれている場合は、証明書のサブジェクト代替名 (SAN) が外部 API サーバーのアドレスと競合しないようにしてください。たとえば、環境で使用されるホスト名パターンに応じて、アドレスはapi.<cluster_name>.<domain>の形式になります。HostedClusterリソースは、デフォルトの Kubernetes API サーバー証明書の SAN に外部 API アドレスを自動的に含めます。カスタム証明書と自動生成された Kubernetes API サーバー証明書の両方に同じホスト名が含まれている場合、TLS サービスの曖昧さを防ぐために、設定は拒否されます。この検証は、
LoadBalancerやNodePortを含む、すべてのサービス公開ストラテジーに適用されます。唯一の例外は、プライベートまたはパブリックアンドプライベートのエンドポイントアクセス設定でプロバイダーとして Amazon Web Services (AWS) を使用する場合で、その場合はプラットフォームが SAN の競合を管理します。- 証明書は外部 API エンドポイントに対して有効である必要があります。
- 証明書の有効期間は、クラスターの予想されるライフサイクルと一致します。
手順
次のコマンドを入力して、カスタム証明書を使用してシークレットを作成します。
$ oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>次の例に示すように、カスタム証明書の詳細を使用して
HostedCluster設定を更新します。spec: configuration: apiServer: servingCerts: namedCertificates: - names: - api-custom-cert-sample-hosted.sample-hosted.example.com servingCertificate: name: sample-hosted-kas-custom-cert-
spec.configuration.apiServer.servingCerts.namedCertificates.namesは、証明書が有効な DNS 名のリストを指定します。 -
spec.configuration.apiServer.servingCerts.namedCertificates.servingCertificateは、カスタム証明書を含むシークレットの名前を指定します。
-
次のコマンドを入力して、
HostedCluster設定に変更を適用します。$ oc apply -f <hosted_cluster_config>.yaml
検証
- API サーバー Pod をチェックして、新しい証明書がマウントされていることを確認します。
- カスタムドメイン名を使用して API サーバーへの接続をテストします。
-
ブラウザーで、または
opensslなどのツールを使用して、証明書の詳細を確認します。