TKG クラスタ ポッドで外部コンテナ レジストリを使用できます。

コンテナ レジストリからイメージをプルするときに発生したエラーのトラブルシューティング

信頼する証明書を使用して TKG を構成し、自己署名証明書をクラスタの kubeconfig に追加すると、その自己署名証明書を使用するプライベート レジストリからコンテナ イメージを正常にプルできるようになります。

次のコマンドは、コンテナ イメージがポッド ワークロードに対して正常にプルされたかどうかを判断するのに役立ちます。
kubectl describe pod PODNAME

このコマンドを実行すると、特定のポッドの詳細なステータスとエラー メッセージが表示されます。カスタム証明書をクラスタに追加する前にイメージをプルする例を次に示します。

Events:
  Type     Reason                        Age               From               Message
  ----     ------                        ----              ----               -------
  Normal   Scheduled                     33s               default-scheduler  ...
  Normal   Image                         32s               image-controller   ...
  Normal   Image                         15s               image-controller   ...
  Normal   SuccessfulRealizeNSXResource  7s (x4 over 31s)  nsx-container-ncp  ...
  Normal   Pulling                       7s                kubelet            Waiting test-gc-e2e-demo-ns/testimage-8862e32f68d66f727d1baf13f7eddef5a5e64bbd-v10612
  Warning  Failed                        4s                kubelet            failed to get images: ... Error: ... x509: certificate signed by unknown authority
次のコマンドを実行します。
kubectl get pods
ポッド全体のステータス ビューに ErrImagePull エラーも表示されます。
NAME                                         READY   STATUS         RESTARTS   AGE
testimage-nginx-deployment-89d4fcff8-2d9pz   0/1     Pending        0          17s
testimage-nginx-deployment-89d4fcff8-7kp9d   0/1     ErrImagePull   0          79s
testimage-nginx-deployment-89d4fcff8-7mpkj   0/1     Pending        0          21s
testimage-nginx-deployment-89d4fcff8-fszth   0/1     ErrImagePull   0          50s
testimage-nginx-deployment-89d4fcff8-sjnjw   0/1     ErrImagePull   0          48s
testimage-nginx-deployment-89d4fcff8-xr5kg   0/1     ErrImagePull   0          79s
エラー「x509: certificate signed by unknown authority」と「ErrImagePull」は、プライベート コンテナ レジストリに接続するための正しい証明書を使用してクラスタが構成されていないことを示しています。証明書が見つからないか、構成が正しくありません。

証明書の構成後にプライベート レジストリに接続するとエラーが発生する場合は、構成に適用された証明書がクラスタに適用されているかどうかを確認できます。構成に適用された証明書が正しく適用されているかどうかを確認するには、SSH を使用します。

SSH を使用してワーカー ノードに接続することで、2 つの調査手順を実行できます。
  1. フォルダ /etc/ssl/certs/tkg-<cert_name>.pem という名前のファイルがあるかを確認します。<cert_name> は、TkgServiceConfiguration に追加された証明書の「name」プロパティです。証明書が TkgServiceConfiguration 内の証明書と一致していてもプライベート レジストリの使用が機能しない場合は、次の手順を実行してさらに診断します。
  2. openssl s_client -connect hostname:port_num コマンドを実行して、自己署名証明書を使用したターゲット サーバへの openssl 接続テストを実行します。hostname は自己署名証明書を使用しているプライベート レジストリのホスト名/DNS 名で、port_num はサービスが実行されているポート番号です(HTTPS の場合は通常 443)。

    自己署名証明書を使用しているエンドポイントに接続するときに openssl によって返されるエラーを正確に確認し、適切な証明書を TkgServiceConfiguration に追加するなどしてその状況を解決できます。TKG クラスタに誤った証明書が組み込まれている場合は、正しい証明書を使用して構成を更新し、TKG クラスタを削除してから、正しい証明書を含む構成を使用してクラスタを再作成する必要があります。

  3. シークレットのデータ マップの内容が double 型の base64 エンコード形式であることを確認します。base64 二重エンコードは必須です。データ マップ値の内容が base6 二重エンコードでない場合は、結果の PEM ファイルを処理できません。