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
ファイルでそれらを指定する必要があります。
-
Maistra リポジトリー からサンプル証明書をローカルに保存し、
<path>
を証明書へのパスに置き換えます。 cacert
という名前のシークレットを作成します。これには、入力ファイルのca-cert.pem
、ca-key.pem
、root-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
ServiceMeshControlPlane
リソースで、spec.security.dataPlane.mtls true
をtrue
に設定し、以下の例のように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
cacert
シークレットを作成/変更/削除した後に、変更を有効にするために、Service Mesh コントロールプレーンのistiod
とgateway
Pod を再起動する必要があります。以下のコマンドで Pod を再起動します。$ oc -n istio-system delete pods -l 'app in (istiod,istio-ingressgateway, istio-egressgateway)'
Operator は、Pod を削除した後、自動的に再作成します。
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
以下のコマンドで、Pod が作成され、準備ができたことを確認します。
$ oc get pods -n bookinfo