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를 통해 작업자 노드에 연결하여 두 가지 조사 단계를 수행할 수 있습니다.
  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. 암호 데이터 맵의 컨텐츠가 이중 base64로 인코딩되어 있는지 확인합니다. 이중 base64 인코딩은 필수입니다. 데이터 맵 값의 컨텐츠가 base64로 이중으로 인코딩되지 않으면 결과 PEM 파일을 처리할 수 없습니다.