5.2. API サーバー証明書の追加

デフォルトの API サーバー証明書は、内部 OpenShift Container Platform クラスター CA によって発行されます。クラスター外のクライアントは、デフォルトで API サーバーの証明書を検証できません。この証明書は、クライアントが信頼する CA によって発行される証明書に置き換えることができます。

5.2.1. API サーバーの名前付き証明書の追加

デフォルトの API サーバー証明書は、内部 OpenShift Container Platform クラスター CA によって発行されます。リバースプロキシーやロードバランサーが使用される場合などに、クライアントの要求 URLに基づいて送信できるように証明書を API サーバーに追加できます。

前提条件

  • クライアントの URL についての PEM 形式の証明書およびキーが必要です。
  • 証明書は、API サーバーに到達できるように、クライアントによって使用される URL について発行される必要があります。
  • 証明書には、URL の subjectAltName 拡張がなければなりません。
  • サーバー証明書の認証に証明書チェーンが必要な場合は、証明書チェーンをサーバー証明書に追加する必要があります。証明書ファイルは Base64 PEM でエンコードされており、通常は .crt または .pem 拡張があります。例:

    $ cat server_cert.pem int2ca_cert.pem int1ca_cert.pem rootca_cert.pem>combined_cert.pem

    証明書を組み合わせる際には、証明書の順序が重要になります。以下の証明書はその前にある証明書を直接認証する必要があります。たとえば、以下のようになります。

    1. OpenShift Container Platform マスターホストサーバー証明書。
    2. サーバー証明書を認定する中間 CA 証明書。
    3. 中間 CA 証明書を認定するルート CA 証明書。
警告

内部ロードバランサーに名前付きの証明書を指定しないようにしてください (ホスト名 api-int.<cluster_name>.<base_domain>)。これを指定すると、クラスターの状態は動作の低下した状態になります。

手順

  1. openshift-config namespace に証明書およびキーが含まれるシークレットを作成します。

    $ oc create secret tls <certificate> \1
         --cert=</path/to/cert.crt> \2
         --key=</path/to/cert.key> \3
         -n openshift-config
    1
    <certificate> は、証明書が含まれるシークレットの名前です。
    2
    </path/to/cert.crt> は、ローカルファイルシステム上の証明書へのパスです。
    3
    </path/to/cert.key> は、この証明書に関連付けられるプライベートキーへのパスです。
  2. API サーバーを作成されたシークレットを参照するように更新します。

    $ oc patch apiserver cluster \
         --type=merge -p \
         '{"spec":{"servingCerts": {"namedCertificates":
         [{"names": ["<hostname>"], 1
         "servingCertificate": {"name": "<certificate>"}}]}}}' 2
    1
    <hostname> を、API サーバーが証明書を提供するホスト名に置き換えます。
    2
    <certificate> を、直前の手順のシークレットで使用された名前に置き換えます。
  3. apiserver/cluster オブジェクトを検査し、シークレットが参照されていることを確認します。

    $ oc get apiserver cluster -o yaml
    ...
    spec:
      servingCerts:
        namedCertificates:
        - names:
          - <hostname>
          servingCertificate:
            name: <certificate>
    ...