문제

자체 서명된 인증서(또는 내부 CA에서 서명한 인증서)가 있는 개인 레지스트리는 x509: 이미지 풀링 중에 알 수 없는 기관에서 서명한 인증서를 생성합니다. 즉, 요청자(TKG 클러스터 작업자 노드)가 레지스트리에서 제공하는 인증서를 신뢰하지 않아 이미지 풀링이 실패합니다.

해결책

Tanzu Kubernetes Clusters에서 개인 레지스트리를 사용하려면 Tanzu Kubernetes 그리드 서비스 TkgServiceConfigurationadditionalTrustedCAs 필드를 사용하여 하나 이상의 자체 서명 인증서를 추가로 구성합니다:

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration
spec:
  defaultCNI: antrea
  trust:
    additionalTrustedCAs:
      - name: first-cert-name
        data: base64-encoded string of a PEM encoded public cert
      - name: second-cert-name
        data: base64-encoded string of a PEM encoded public cert

TLS 인증서는 다음에 클러스터가 생성될 때 새 클러스터에 적용되지만 기존 클러스터에는 적용되지 않으며 롤링 업데이트를 트리거하지 않습니다. 다음 번에 기존 TKC를 업데이트할 때 CA 인증서가 추가됩니다.

사용 사례 예제

다음 yaml과 명령을 사용하여 helm이 있는 다른 TKG 클러스터에 하버를 배치했습니다.

expose:
  type: loadBalancer
  tls:
    certSource: auto
    auto:
      commonName: "core.harbor.labs.satm.eng.vmware.com"

externalURL: https://core.harbor.labs.satm.eng.vmware.com

persistence:
  enabled: true
  resourcePolicy: ""
  persistentVolumeClaim:
    registry:
      storageClass: "vsan-default-storage-policy"
    chartmuseum:
      storageClass: "vsan-default-storage-policy"
    jobservice:
      storageClass: "vsan-default-storage-policy"
    database:
      storageClass: "vsan-default-storage-policy"
    redis:
      storageClass: "vsan-default-storage-policy"
    trivy:
      storageClass: "vsan-default-storage-policy"
  imageChartStorage:
    type: filesystem
    filesystem:
      rootdirectory: /storage

harborAdminPassword: "P@ssw0rd"

이렇게 하면 자체 서명 인증서와 nginx 배포를 생성하여 레지스트리를 앞에 두고, 배포 후 TKG 클러스터에서 인증서를 추출하여 로컬 파일 시스템에 다음과 같은 방법으로 배포할 수 있습니다.

kubectl get secret harbor-harbor-nginx -o=jsonpath="{.data.ca\.crt}" > harbor-ca.crt 

추출한 harbor-ca.crt(이미 우리를 위해 인코딩된 base64)를 TkgServiceConfiguration(이 파일을 tks.yaml이라고 함)에 항목으로 추가할 수 있습니다.

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration
spec:
  defaultCNI: antrea
  trust:
    additionalTrustedCAs:
      - name: harbor-ca
        data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lRUHdpYUV4RjZsUzA2cGQzc2FsRWIyREFOQmdrcWhraUc5dzBCQVFzRkFEQVUKTVJJd0VBWURWUVFERXdsb1lYSmliM0l0WTJFd0hoY05NakV3TXpFd01UTTFOVFF6V2hjTk1qSXdNekV3TVRNMQpOVFF6V2pBVU1SSXdFQVlEVlFRREV3bG9ZWEppYjNJdFkyRXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRRG5Ta0ZCRTNvbk4yR0VOYU1TRWJRSUNzVmVUajJOQTBWRC9nNHdKZ3pwMVU5alc3VE8KNC9KK0JxNE9aS2Nia2NTWFcxYkNDeWNKKzNpQ2RIdFFqaVUvSnZZRHZhcGlBVnA0UmIvRE5lYnJyL0VaR2hZQQpUUjAybWpuS0hlVGdJVXBsTk5OM0haM0x2OE1xemxwem1OaVNKZWZCOFpqMWI0eElZS09LVWZPSzBJRjQrTERsCkFEUHJ0L1B4TmN3NDQ3RUI4QVpuay92YVpGN1F3ekNzY2E4cUlyUlFzZmk4Z0JCcEJDVlllMk4wM1dPWE9aK2kKMXZ1WnVvREh3NEgwWGNQVjhiNlZnVGsxWjMrak92MUF0UXBIUXllcExpMCtnVDdXb1VJTCt5anJ0dVJHeGpkaAp1R2FoRnVhajRCNmZ1RHo1eHRtM2ZyMy9WNFRUYVEwRk9pbjVBZ01CQUFHallUQmZNQTRHQTFVZER3RUIvd1FFCkF3SUNwREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXcKQXdFQi96QWRCZ05WSFE0RUZnUVUvWEJZUW5SSlJjeXZzWjQxdHozMlRrZ2ZUdnd3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFMTWlGa1RlL1BtZCtuazZzVHFGQmlNd2REWEVFeTAyL2tsMVhLZ0RTOURVenU2bmpseXljSzFaCitGY3JNUGFpNnYrTjBySzBYbmt0TmRuRkxpdS9ZL2JiZENHSURWQ3R2c2FuY29rZHUyZFZyZDdRZWFXdzMwV3MKY1RKK0lGb214YUNDTjZ1bGd6QXNsbGJVL3ZJYzg5cHEzOEZNN3I4TXpUcjhyVFpIVzdiY29vZThlcHJHTE9PegpiR3Uxb2lCbWpBSlNrV3owejBETFJ0TGFhRHFUY1hsN09YNTZIWjRJamVSWll5RDloMFNRR0VtMURkR1EvSmdECmRQdXhsa01wSnZuQWtLcVN4K2JTMVlIdTA1dHdyYkdDRk5EY2RCd0owYlRJV1lVeUI1Y3BXUEJvQkxxMUxQQ1kKUHVyKzRRSWpjb05JME1uSCtEaW1Lb0Rwc0RMN083TT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=

이 기능을 슈퍼바이저 클러스터에 적용하면 이 시점 이후에 생성된 모든 TKG 클러스터가 자동으로 CA 인증서를 신뢰하므로 다음과 같은 레지스트리가 생성됩니다.

kubectl config use-context $Supervisor_Cluster_IP
kubectl apply -f tks.yaml 

맺음말

보시다시피 임의 CA 인증서를 추가하는 작업은 이제 vSphere with Tanzu에서 간단하며 적용 범위가 넓습니다. 하지만 이 새로운 기능은 새로운 Docker Hub 속도 제한 규칙이나 다른 이유로 인해 내부 레지스트리를 실행하는 사용자에게 매우 유용합니다.

이제 배포 후 클러스터를 수동으로 편집할 필요 없이 자체 서명된 CA 인증서 또는 내부 CA에서 서명한 인증서를 생성 시 TKG 클러스터에 할당할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

You May Also Like

VMware Tanzu Kubernetes Grid 1.2

VMware Tanzu Kubernetes Grid는 최종 사용자 워크로드 및 에코시스템 통합을 위한 일관되고, 업스트림 호환, 지역 쿠버네티스 서브스트레이트(substrate)를 조직에…