3.2. API サーバー証明書の追加
クラスター外のクライアントが API サーバーの証明書を検証できるようにするには、デフォルトの API サーバー証明書を、クライアントが信頼する CA が発行した証明書に置き換えることができます。
デフォルトでは、API サーバー証明書は OpenShift Container Platform クラスターの内部 CA によって発行されます。その結果、クラスター外のクライアントは API サーバーの証明書を検証できません。
Hosted Control Plane クラスターでは、Kubernetes API サーバーに必要な数のカスタム証明書を追加できます。ただし、ワーカーノードがコントロールプレーンとの通信に使用するエンドポイントの証明書は追加しないでください。
3.2.1. API サーバーの名前付き証明書の初回追加 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの API サーバー証明書は、OpenShift Container Platform クラスター内部の認証局 (CA) によって発行されます。
リバースプロキシーやロードバランサーが使用される場合など、クライアントが要求する完全修飾ドメイン名 (FQDN) に基づいて、API サーバーが返す代替証明書を追加できます。
カスタム API サーバー名前付き証明書を初めて追加すると、kube-apiserver-operator が API サーバー Pod の新しいリビジョンをロールアウトするようになります。ノードの再起動は不要です。
前提条件
- FQDN とそれに対応するプライベートキーの証明書が必要です。それぞれが個別の PEM 形式のファイルである必要があります。
- プライベートキーの暗号化は解除されている必要があります。
-
証明書には、FQDN を示す
subjectAltName拡張が含まれる必要があります。 - 証明書ファイルでは、チェーンに 1 つ以上の証明書を含めることができます。API サーバーの FQDN 用証明書をファイルの最初に配置し、続いて中間証明書、最後にルート CA 証明書を配置する必要があります。
内部ロードバランサーに名前付き証明書を指定しないようにしてください (ホスト名 api-int.<cluster_name>.<base_domain>)。これを指定すると、クラスターの状態は動作の低下した状態になります。
手順
kubeadminユーザーとして CLI にログインします。$ oc login -u kubeadmin -p <password> https://<fqdn>:6443各項目の説明:
<password>- クラスター管理者パスワードを指定します。
<fqdn>- 内部クラスター API エンドポイントの完全修飾ドメイン名を指定します。
openshift-confignamespace に証明書およびプライベートキーが含まれるシークレットを作成します。$ oc create secret tls <secret_name> \ --cert=<path_to_certificate_file> \ --key=<path_to_private_key_file> \ -n openshift-config各項目の説明:
<secret_name>- 暗号鍵ペアを格納する新しいシークレットリソースの名前を指定します。
<path_to_certificate_file>- カスタム証明書チェーンファイルへの絶対ローカルパスを指定します。
<path_to_private_key_file>- 証明書に関連付けられた暗号化されていない秘密鍵ファイルへの絶対ローカルパスを指定します。
API サーバーを作成されたシークレットリソースを参照するように更新します。
$ oc patch apiserver cluster --type=merge -p ' { "spec": { "servingCerts": { "namedCertificates": [ { "names": ["<fqdn>"], "servingCertificate": { "name": "<secret_name>" } } ] } } }'各項目の説明:
<fqdn>- API サーバーがこのカスタム証明書を提供する、完全修飾ドメイン名を指定します。ポート番号は含めないでください。
<secret_name>- 前のステップで作成したシークレットの名前を指定します。
Operator のステータスを確認して、Kubernetes API サーバーの新しいリビジョンがロールアウトされたことを確認します。
$ oc get clusteroperators kube-apiserver注記API サーバー Operator がカスタム証明書で設定された新しい Pod リビジョンをデプロイしている間、
PROGRESSINGステータス列はTrueに変わります。ロールアウト作業中は、プロセスを中断したり、追加の設定更新を適用したりしないでください。ステータスがFalseに戻り、AVAILABLEがTrueと表示されてから、作業を続行してください。