1.13.4. 外部認証局キーおよび証明書の追加

デフォルトで、Red Hat OpenShift Service Mesh は自己署名ルート証明書およびキーを生成し、それらを使用してワークロード証明書に署名します。ユーザー定義の証明書およびキーを使用して、ユーザー定義のルート証明書を使用してワークロード証明書に署名することもできます。このタスクは、証明書およびキーを Service Mesh にプラグインするサンプルを示しています。

前提条件

  • 相互 TLS を有効にして Red Hat OpenShift Service Mesh をインストールし、証明書を設定する。
  • この例では、Maistra リポジトリー からの証明書を使用します。実稼働環境の場合は、認証局から独自の証明書を使用します。
  • Bookinfo サンプルアプリケーションをデプロイして以下の手順で結果を確認しておく。
  • OpenSSL は、証明書を検証するために必要です。

1.13.4.1. 既存の証明書およびキーの追加

既存の署名 (CA) 証明書およびキーを使用するには、CA 証明書、キー、ルート証明書が含まれる信頼ファイルのチェーンを作成する必要があります。それぞれの対応する証明書について以下のファイル名をそのまま使用する必要があります。CA 証明書は ca-cert.pem と呼ばれ、キーは ca-key.pem であり、ca-cert.pem を署名するルート証明書は root-cert.pem と呼ばれます。ワークロードで中間証明書を使用する場合は、cert-chain.pem ファイルでそれらを指定する必要があります。

  1. Maistra リポジトリー からサンプル証明書をローカルに保存し、<path> を証明書へのパスに置き換えます。
  2. cacert という名前のシークレットを作成します。これには、入力ファイルの ca-cert.pemca-key.pemroot-cert.pem および cert-chain.pem が含まれます。

    $ oc create secret generic cacerts -n istio-system --from-file=<path>/ca-cert.pem \
        --from-file=<path>/ca-key.pem --from-file=<path>/root-cert.pem \
        --from-file=<path>/cert-chain.pem
  3. ServiceMeshControlPlane リソースで、spec.security.dataPlane.mtls truetrue に設定し、以下の例のように certificateAuthority フィールドを設定します。デフォルトの rootCADir/etc/cacerts です。キーおよび証明書がデフォルトの場所にマウントされている場合は、privateKey を設定する必要はありません。Service Mesh は、secret-mount ファイルから証明書およびキーを読み取ります。

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    spec:
      security:
        dataPlane:
          mtls: true
        certificateAuthority:
          type: Istiod
          istiod:
            type: PrivateKey
            privateKey:
              rootCADir: /etc/cacerts
  4. cacert シークレットを作成/変更/削除した後に、変更を有効にするために、Service Mesh コントロールプレーンの istiodgateway Pod を再起動する必要があります。以下のコマンドで Pod を再起動します。

    $ oc -n istio-system delete pods -l 'app in (istiod,istio-ingressgateway, istio-egressgateway)'

    Operator は、Pod を削除した後、自動的に再作成します。

  5. bookinfo アプリケーションの Pod を再起動し、sidecar プロキシーがシークレットの変更を取り込むようにします。以下のコマンドで Pod を再起動します。

    $ oc -n bookinfo delete pods --all

    以下のような出力が表示されるはずです。

    pod "details-v1-6cd699df8c-j54nh" deleted
    pod "productpage-v1-5ddcb4b84f-mtmf2" deleted
    pod "ratings-v1-bdbcc68bc-kmng4" deleted
    pod "reviews-v1-754ddd7b6f-lqhsv" deleted
    pod "reviews-v2-675679877f-q67r2" deleted
    pod "reviews-v3-79d7549c7-c2gjs" deleted
  6. 以下のコマンドで、Pod が作成され、準備ができたことを確認します。

    $ oc get pods -n bookinfo