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 つの調査手順を実行できます。
- フォルダ
/etc/ssl/certs/
にtkg-<cert_name>.pem
という名前のファイルがあるかを確認します。<cert_name>
は、TkgServiceConfiguration
に追加された証明書の「name」プロパティです。証明書がTkgServiceConfiguration
内の証明書と一致していてもプライベート レジストリの使用が機能しない場合は、次の手順を実行してさらに診断します。 openssl s_client -connect hostname:port_num
コマンドを実行して、自己署名証明書を使用したターゲット サーバへの openssl 接続テストを実行します。hostname
は自己署名証明書を使用しているプライベート レジストリのホスト名/DNS 名で、port_num
はサービスが実行されているポート番号です(HTTPS の場合は通常 443)。自己署名証明書を使用しているエンドポイントに接続するときに openssl によって返されるエラーを正確に確認し、適切な証明書を
TkgServiceConfiguration
に追加するなどしてその状況を解決できます。TKG クラスタに誤った証明書が組み込まれている場合は、正しい証明書を使用して構成を更新し、TKG クラスタを削除してから、正しい証明書を含む構成を使用してクラスタを再作成する必要があります。- シークレットのデータ マップの内容が double 型の base64 エンコード形式であることを確認します。base64 二重エンコードは必須です。データ マップ値の内容が base6 二重エンコードでない場合は、結果の PEM ファイルを処理できません。