Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第10章 カスタム証明書の設定

10.1. 概要

管理者は、OpenShift Container Platform API のパブリックホスト名および Web コンソール用のカスタム提供証明書を設定できます。この設定は、通常インストール (Advanced installation) の実行時か、またはインストール後に行うことができます。

10.2. インストール時のカスタム証明書の設定

通常インストール (Advanced installation) の実行時に、カスタム証明書はインベントリーファイルで設定可能な openshift_master_named_certificates パラメーターと openshift_master_overwrite_named_certificates パラメーターを使用して設定できます。詳細については、「Ansible を使用したカスタム証明書の設定」を参照してください。

カスタム証明書の設定パラメーター

openshift_master_overwrite_named_certificates=true 1
openshift_master_named_certificates=[{"certfile": "/path/on/host/to/crt-file", "keyfile": "/path/on/host/to/key-file", "names": ["public-master-host.com"], "cafile": "/path/on/host/to/ca-file"}] 2
openshift_hosted_router_certificate={"certfile": "/path/on/host/to/app-crt-file", "keyfile": "/path/on/host/to/app-key-file", "cafile": "/path/on/host/to/app-ca-file"} 3

1
openshift_master_named_certificates パラメーターの値を指定した場合は、このパラメーターを true に設定します。
2
マスター API 証明書をプロビジョニングします。
3
ワイルドカード API 証明書をプロビジョニングします。

以下は、マスター API 証明書のパラメーターの例です。

openshift_master_overwrite_named_certificates=true
openshift_master_named_certificates=[{"names": ["master.148.251.233.173.nip.io"], "certfile": "/home/cloud-user/master-bundle.cert.pem", "keyfile": "/home/cloud-user/master.148.251.233.173.nip.io.key.pem" ]

以下は、ワイルドカード API 証明書のパラメーターの例です。

openshift_hosted_router_certificate={"certfile": "/home/cloud-user/star-apps.148.251.233.173.nip.io.cert.pem", "keyfile": "/home/cloud-user/star-apps.148.251.233.173.nip.io.key.pem", "cafile": "/home/cloud-user/ca-chain.cert.pem"}

10.3. Web コンソールまたは CLI 用カスタム証明書の設定

Web コンソールおよび CLI 用のカスタム証明書は、マスター設定ファイルservingInfo セクションで指定できます。

  • servingInfo.namedCertificates セクションでは、Web コンソール用のカスタム証明書を指定します。
  • servingInfo セクションでは、CLI およびその他の API 呼び出し用のカスタム証明書を指定します。

この方法で複数の証明書を設定し、それぞれの証明書を複数のホスト名複数のルーター、または OpenShift Container Platform イメージレジストリーに関連付けることができます。

デフォルトの証明書は、namedCertificates のほかにも servingInfo.certFile および servingInfo.keyFile 設定セクションに設定する必要があります。

注記

namedCertificates セクションは、/etc/origin/master/master-config.yaml ファイルの masterPublicURL および oauthConfig.assetPublicURL 設定に関連付けられたホスト名についてのみ設定する必要があります。masterURL に関連付けられたホスト名にカスタム提供証明書を使用すると、インフラストラクチャーコンポーネントが内部の masterURL ホストを使用してマスター API と通信しようとするため、TLS エラーが発生します。

カスタム証明書の設定

servingInfo:
  logoutURL: ""
  masterPublicURL: https://openshift.example.com:8443
  publicURL: https://openshift.example.com:8443/console/
  bindAddress: 0.0.0.0:8443
  bindNetwork: tcp4
  certFile: master.server.crt 1
  clientCA: ""
  keyFile: master.server.key 2
  maxRequestsInFlight: 0
  requestTimeoutSeconds: 0
  namedCertificates:
    - certFile: wildcard.example.com.crt 3
      keyFile: wildcard.example.com.key 4
      names:
        - "openshift.example.com"
  metricsPublicURL: "https://metrics.os.example.com/hawkular/metrics"

1 2
CLI およびその他の API 呼び出し用の証明書とキーファイルへのパス。
3 4
Web コンソール用の証明書とキーファイルへのパス。

Ansible インベントリーファイル (デフォルトでは /etc/ansible/hosts) の openshift_master_cluster_public_hostname パラメーターと openshift_master_cluster_hostname パラメーターは異なっていなければなりません。これらが同じであると、名前付き証明書が失敗し、証明書の再インストールが必要になります。

# Native HA with External LB VIPs
openshift_master_cluster_hostname=internal.paas.example.com
openshift_master_cluster_public_hostname=external.paas.example.com

OpenShift Container Platform で DNS を使用する方法の詳細については、「DNS のインストールの前提条件」を参照してください。

この方法では、OpenShift Container Platformによって生成される自己署名証明書を利用して、必要に応じて信頼できるカスタム証明書を個々のコンポーネントに追加できます。

内部インフラストラクチャーの証明書は自己署名のままであることに注意してください。これは一部のセキュリティーチームや PKI チームから不適切な使用法と見なされる場合があります。ただし、これらの証明書を信頼するクライアントはクラスター内のその他のコンポーネントだけであるため、これに伴うリスクは最小限です。外部のユーザーとシステムはすべて、信頼できるカスタム証明書を使用します。

相対パスは、マスター設定ファイルの場所に基づいて解決されます。設定の変更が反映されるようにサーバーを再起動します。

10.4. カスタムマスターホスト証明書の設定

OpenShift Container Platform の外部ユーザーとの信頼できる接続を容易にするために、Ansible インベントリーファイル (デフォルトでは /etc/ansible/hosts) の openshift_master_cluster_public_hostname パラメーターで指定されたドメイン名に一致する名前付き証明書をプロビジョニングできます。

この証明書は Ansible がアクセスできるディレクトリーに置き、以下のように Ansible インベントリーファイルにパスを追加する必要があります。

openshift_master_named_certificates=[{"certfile": "/path/to/console.ocp-c1.myorg.com.crt", "keyfile": "/path/to/console.ocp-c1.myorg.com.key", "names": ["console.ocp-c1.myorg.com"]}]

パラメーター値は以下のようになります。

  • certfile は、OpenShift Container Platform ルーター証明書を含むファイルへのパスです。
  • keyfile は、OpenShift Container Platform ワイルドカードキーを含むファイルへのパスです。
  • names は、クラスターのパブリックホスト名です。

ファイルパスは、Ansible が実行されるシステムにとってローカルでなければなりません。証明書はマスターホストにコピーされ、/etc/origin/master ディレクトリー内にデプロイされます。

レジストリーのセキュリティーを保護する場合、サービスのホスト名と IP アドレスをレジストリーのサーバー証明書に追加します。SAN (Subject Alternative Name) には以下の情報が含まれている必要があります。

  • 2 つのサービスホスト名。

    docker-registry.default.svc.cluster.local
    docker-registry.default.svc
  • サービス IP アドレス。

    例を以下に示します。

    172.30.252.46

    以下のコマンドを使って Docker レジストリーのサービス IP アドレスを取得します。

    oc get service docker-registry --template='{{.spec.clusterIP}}'
  • パブリックホスト名。

    docker-registry-default.apps.example.com

    以下のコマンドを使って Docker レジストリーのパブリックホスト名を取得します。

    oc get route docker-registry --template '{{.spec.host}}'

たとえば、サーバー証明書には以下のような SAN の詳細が記載されるはずです。

X509v3 Subject Alternative Name:
               DNS:docker-registry-public.openshift.com, DNS:docker-registry.default.svc, DNS:docker-registry.default.svc.cluster.local, DNS:172.30.2.98, IP Address:172.30.2.98

10.5. デフォルトルーター用のカスタムワイルドカード証明書の設定

OpenShift Container Platform のデフォルトルーターをデフォルトのワイルドカード証明書を使って設定できます。デフォルトのワイルドカード証明書を使用すると、OpenShift Container Platform にデプロイされているアプリケーションでカスタム証明書を使用せずにデフォルトの暗号化を簡単に使用することができます。

注記

デフォルトのワイルドカード証明書の使用は、非実稼働環境でのみ推奨されます。

デフォルトのワイルドカード証明書を設定するには、.<app_domain> で有効な証明書をプロビジョニングします。ここで、<app_domain> は、Ansible インベントリーファイル(デフォルトでは /etc/ansible/hosts) の openshift_master_default_subdomain の値です。プロビジョニングが完了したら、証明書、キー、CA 証明書ファイルを Ansible ホストに置き、以下の行を Ansible インベントリーファイルに追加します。

openshift_hosted_router_certificate={"certfile": "/path/to/apps.c1-ocp.myorg.com.crt", "keyfile": "/path/to/apps.c1-ocp.myorg.com.key", "cafile": "/path/to/apps.c1-ocp.myorg.com.ca.crt"}

例を以下に示します。

openshift_hosted_router_certificate={"certfile": "/home/cloud-user/star-apps.148.251.233.173.nip.io.cert.pem", "keyfile": "/home/cloud-user/star-apps.148.251.233.173.nip.io.key.pem", "cafile": "/home/cloud-user/ca-chain.cert.pem"}

パラメーター値は以下のようになります。

  • certfile は、OpenShift Container Platform ルーター証明書を含むファイルへのパスです。
  • keyfile は、OpenShift Container Platform ワイルドカードキーを含むファイルへのパスです。
  • cafile は、このキーと証明書のルート CA を含むファイルへのパスです。中間 CA を使用している場合は、中間 CA とルート CA の両方がこのファイルに含まれている必要があります。

これらの証明書ファイルを OpenShift Container Platform クラスターで初めて使用する場合は、Ansible deploy_router.yml Playbook を実行し、これらのファイルを OpenShift Container Platform 設定ファイルに追加します。この Playbook は、証明書ファイルを /etc/origin/master/ ディレクトリーに追加します。

# ansible-playbook [-i /path/to/inventory] \
    /usr/share/ansible/openshift-ansible/playbooks/openshift-hosted/deploy_router.yml

これらの証明書を使用するのが初めてでない場合、たとえば、既存の証明書を変更するか、期限切れの証明書を置き換える場合は、以下の Playbook を実行します。

ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/redeploy-certificates.yml
注記

この Playbook を実行する場合は、証明書名を変更しないでください。証明書名を変更した場合は、新規証明書の場合と同様に Ansible deploy_cluster.yml Playbook を再実行してください。

10.6. イメージレジストリー用のカスタム証明書の設定

OpenShift Container Platform イメージレジストリーは、ビルドとデプロイメントを容易にする内部サービスです。レジストリーとの通信の大部分は、OpenShift Container Platform の内部コンポーネントによって処理されます。そのため、レジストリーサービス自体が使用する証明書を置き換える必要はありません。

ただし、デフォルトでは、レジストリーは、外部のシステムとユーザーがイメージのプルとプッシュを実行できるルートを使用します。内部の自己署名証明書を使用する代わりに、外部ユーザーに提供されるカスタム証明書を使用してre-encrypt ルートを使用することができます。

これを設定するには、以下のコード行を Ansible インベントリーファイル (デフォルトでは /etc/ansible/hosts ファイル) の [OSEv3:vars] セクションに追加します。レジストリールートで使用する証明書を指定します。

openshift_hosted_registry_routehost=registry.apps.c1-ocp.myorg.com 1
openshift_hosted_registry_routecertificates={"certfile": "/path/to/registry.apps.c1-ocp.myorg.com.crt", "keyfile": "/path/to/registry.apps.c1-ocp.myorg.com.key", "cafile": "/path/to/registry.apps.c1-ocp.myorg.com-ca.crt"} 2
openshift_hosted_registry_routetermination=reencrypt 3
1
レジストリーのホスト名です。
2
cacertroot、および cafile ファイルの場所です。
  • certfile は、OpenShift Container Platform ルーター証明書を含むファイルへのパスです。
  • keyfile は、OpenShift Container Platform ワイルドカードキーを含むファイルへのパスです。
  • cafile は、このキーと証明書のルート CA を含むファイルへのパスです。中間 CA を使用している場合は、中間 CA とルート CA の両方がこのファイルに含まれている必要があります。
3
暗号化を実行する場所を指定します。
  • edge ルーターで暗号化を終了し、送信先から提供される新規の証明書で再暗号化するには、 reencrypt に設定し、re-encrypt ルートを指定します。
  • 送信先で暗号化を終了するには、passthrough に設定します。トラフィックは送信先で復号化されます。

10.7. ロードバランサー用のカスタム証明書の設定

OpenShift Container Platform クラスターでデフォルトのロードバランサーか、またはエンタープライズレベルのロードバランサーを使用している場合、カスタム証明書の使用により、 パブリックに署名されたカスタム証明書を使って Web コンソールと API を外部で利用できるようにし、既存の内部証明書を内部のエンドポイント用に残しておくことができます。

カスタム証明書をこの方法で使用するように OpenShift Container Platform を設定するには、以下を実行します。

  1. マスター設定ファイルservingInfo セクションを編集します。

    servingInfo:
      logoutURL: ""
      masterPublicURL: https://openshift.example.com:8443
      publicURL: https://openshift.example.com:8443/console/
      bindAddress: 0.0.0.0:8443
      bindNetwork: tcp4
      certFile: master.server.crt
      clientCA: ""
      keyFile: master.server.key
      maxRequestsInFlight: 0
      requestTimeoutSeconds: 0
      namedCertificates:
        - certFile: wildcard.example.com.crt 1
          keyFile: wildcard.example.com.key 2
          names:
            - "openshift.example.com"
      metricsPublicURL: "https://metrics.os.example.com/hawkular/metrics"
    1
    Web コンソールの証明書ファイルへのパスです。
    2
    Web コンソールのキーファイルへのパスです。
    注記

    masterPublicURL および oauthConfig.assetPublicURL 設定に関連付けられたホスト名についてのみ namedCertificates セクションを設定します。masterURL に関連付けられたホスト名にカスタム提供証明書を使用すると、インフラストラクチャーコンポーネントが内部の masterURL ホストを使用してマスター API と通信しようとするため、TLS エラーが発生します。

  2. Ansible インベントリーファイル (デフォルトでは /etc/ansible/hosts) で openshift_master_cluster_public_hostname パラメーターと openshift_master_cluster_hostname パラメーターを指定します。これらの値は異なっていなければなりません。同じ値を指定した場合、名前付き証明書が失敗します。

    # Native HA with External LB VIPs
    openshift_master_cluster_hostname=paas.example.com 1
    openshift_master_cluster_public_hostname=public.paas.example.com 2
    1
    SSL パススルー用に設定された内部ロードバランサーの FQDN です。
    2
    カスタム (パブリック) 証明書を使用する外部ロードバランサーの FQDN です。

お使いのロードバランサー環境に固有の情報については、お使いのプロバイダーについての OpenShift Container Platform リファレンスアーキテクチャーと「Custom Certificate SSL Termination (Production)」を参照してください。

10.8. カスタム証明書の変更およびクラスターへの組み込み

カスタムマスター証明書とカスタムルーター証明書を変更して、既存の OpenShift Container Platform クラスターに組み込むことができます。これを行うには、Ansible インベントリーファイル (デフォルトでは /etc/ansible/hosts) を編集し、Playbook を実行します。

10.8.1. カスタムマスター証明書の変更およびクラスターへの組み込み

カスタム証明書を変更するには、以下を実行します。

  1. Ansible インベントリーファイルを編集して openshift_master_overwrite_named_certificates=true を設定します。
  2. openshift_master_named_certificates パラメーターを使用して証明書へのパスを指定します。

    openshift_master_overwrite_named_certificates=true
    openshift_master_named_certificates=[{"certfile": "/path/on/host/to/crt-file", "keyfile": "/path/on/host/to/key-file", "names": ["public-master-host.com"], "cafile": "/path/on/host/to/ca-file"}] 1
    1
    マスター API 証明書へのパスです。
  3. 以下の Playbook を実行します。

    ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/redeploy-certificates.yml

10.8.2. カスタムルーター証明書の変更およびクラスターへの組み込み

カスタムルーター証明書を変更し、これを組み込むには、以下を実行します。

  1. Ansible インベントリーファイルを編集して openshift_master_overwrite_named_certificates=true を設定します。
  2. openshift_hosted_router_certificate パラメーターを使用して証明書へのパスを指定します。

    openshift_master_overwrite_named_certificates=true
    openshift_hosted_router_certificate={"certfile": "/path/on/host/to/app-crt-file", "keyfile": "/path/on/host/to/app-key-file", "cafile": "/path/on/host/to/app-ca-file"} 1
  3. 以下の Playbook を実行します。

    ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/openshift-hosted/redeploy-router-certificates.yml

10.9. その他のコンポーネントでのカスタム証明書の使用

ロギングやメトリクスなどのその他のコンポーネントでカスタム証明書を使用する方法については、「 Certificate Management」を参照してください。