Supervisor Series: Ep 2. Deploying Contour and Harbor as Supervisor Services

프라이빗 클라우드 플랫폼은 워크로드의 요구 사항을 충족하기 위해 최신 런타임(VM 및 Kubernetes) 그 이상을 필요로 합니다. 워크로드와 비즈니스 요구가 변화함에 따라 필수 서비스와 부가 가치 서비스의 수가 진화합니다. Supervisor를 IaaS 플랫폼 계층으로 활용하면 vCenter를 통해 필요한 서비스를 직접 제공할 수 있습니다. Supervisor 서비스 프레임워크를 사용하여 S3, OCI 이미지 레지스트리, L7 인그레스, 백업 및 복구, 인증서 관리와 같은 선별된 서비스 세트를 배포 및 관리하거나 자체적인 인하우스 플랫폼 서비스를 배포하여 플랫폼 소비자가 워크로드 요구 사항을 신속하게 충족할 수 있도록 지원할 수 있습니다.

이 에피소드에서는 L7 인그레스 컨트롤러인 Contour와 애플리케이션 이미지를 저장하는 데 사용할 OCI 이미지 레지스트리인 Harbor를 배포합니다.

Contour와 Harbor 소개

Contour는 Envoy 프록시를 역방향 프록시 및 로드 밸런서로 배포하여 작동하는 Kubernetes용 인그레스 컨트롤러이다. Contour 패키지는 Harbor의 전제 조건이며 먼저 설치해야 합니다.

Harbor는 콘텐츠를 저장, 서명 및 스캔하는 신뢰할 수 있는 오픈 소스 클라우드 네이티브 레지스트리 프로젝트입니다. Harbor는 보안, ID 및 관리와 같이 일반적으로 사용자에게 필요한 기능을 추가하여 오픈 소스 Docker 배포를 확장합니다. 레지스트리를 빌드 및 실행 환경에 더 가깝게 배치하면 이미지 전송 효율을 높일 수 있습니다. Harbor는 레지스트리 간 이미지 복제를 지원하며 사용자 관리, 액세스 제어, 활동 감사 등의 고급 보안 기능도 제공합니다.

https://github.com/vsphere-tmm/Supervisor-Services/blob/main/README.md 에서 모든 설치 패키지와 샘플 구성 파일을 다운로드할 수 있습니다.

이 배포를 완료하려면 다음 파일이 필요합니다:

  • contour.yml
  • controur-data-values.yml
  • harbor.yml
  • harbor-data-values.yml

Contour 배포

Workload Management 보기에서 Services를 클릭합니다.

Add New Service를 클릭하고 contour.yml 파일을 선택하여 Contour 패키지를 vCenter에 등록합니다.

Contour가 추가되면 Actions을 클릭하고 Install on Supervisors를 선택합니다.

Supervisor-1 옆의 확인란을 선택하고 contour-data-values.yml 파일의 내용을 YAML 서비스 구성 창에 붙여넣습니다. 데모 목적으로는 기본값을 사용할 수 있으며, 이 기본값은 서비스 구성에 사용됩니다.

각 Supervisor Service에 대해 새 서비스 네임스페이스가 생성됩니다. Supervisor Service는 인벤토리에 표시되는 vSphere 포드를 활용합니다.

svc-contour 네임스페이스를 클릭하고 Compute 탭을 선택하여 모든 vSphere 포드가 실행 중인지 확인합니다.

Network를 클릭하고 Services를 선택하여 Harbor 리포지토리에 액세스하는 데 사용할 External IP를 얻습니다. 이 IP 주소를 DNS 서버에 추가합니다.

Harbor 이미지 레지스트리 배포

Worklod Management, Services로 돌아가서 Add New Service를 클릭합니다.

harbor.yml을 선택하여 Harbor 패키지를 업로드하고 vCenter에 등록합니다.

harbor-data-values.yml을 열고 최소한 다음 값을 수정합니다:

  • hostname – 레지스트리에 액세스하는 데 사용할 호스트 이름을 입력합니다. 이 데모에서는 harbor.vmw.lab을 사용합니다.
  • harborAdminPassword – 관리자 비밀번호를 변경합니다.
  • storageClass – 5개의 퍼시스턴트볼륨클레임 모두에서 사용자 환경에 맞게 스토리지 클래스 이름을 변경합니다(이 데모에서는 k8s-storage-policy 사용).

harbor-data-value.yaml

#! The FQDN for accessing Harbor admin UI and Registry service.
hostname: harbor.vmw.lab

#! The network port of the Envoy service in Contour or other Ingress Controller.
port:
  https: 443

#! Do not change tlsSecretLabels. It is required for TKG  integration to work.
tlsCertificate:
  tlsSecretLabels: {"managed-by": "vmware-vRegistry"}
 
#! [Required] The initial password for the Harbor admin account. This is applied
#! only during installation. Future updates to the password should be done
#! using the Harbor UI or API.
harborAdminPassword: Harbor12345
 
#! [Required] The secret key used for encryption. Must be a string of 16 chars.
secretKey: 0123456789ABCDEF
 
database:
  #! [Required] The initial password of the postgres database.
  password: change-it
 
core:
  replicas: 1
  #! [Required] Secret is used when core server communicates with other components.
  secret: change-it
  #! [Required] The XSRF key. Must be a string of 32 chars.
  xsrfKey: 0123456789ABCDEF0123456789ABCDEF
jobservice:
  replicas: 1
  #! [Required] Secret is used when job service communicates with other components.
  secret: change-it
registry:
  replicas: 1
  #! [Required] Secret is used to secure the upload state from client
  #! and registry storage backend.
  #! See: https://github.com/docker/distribution/blob/master/docs/configuration.md#http
  secret: change-it
notary:
  #! Notary is unsupported on vSphere Supervisor Clusters.
  enabled: false
 
#! Specify another StorageClass in the "storageClass" or set "existingClaim"
#! if you have already existing persistent volumes to use
persistence:
  persistentVolumeClaim:
    registry:
      #! Specify the "storageClass" used to provision the volume.
      #! Please use what is available in your environment.
      storageClass: "k8s-storage-policy"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 10Gi
    jobservice:
      storageClass: "k8s-storage-policy"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
    database:
      storageClass: "k8s-storage-policy"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
    redis:
      storageClass: "k8s-storage-policy"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
    trivy:
      storageClass: "k8s-storage-policy"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 5Gi
 
#! The metrics used by core, registry and exporter
metrics:
  enabled: true
  core:
    path: /metrics
    port: 8001
  registry:
    path: /metrics
    port: 8001
  exporter:
    path: /metrics
    port: 8001

#! Note: IPv6 is not supported on Supervisor. Including it will cause harbor-portal to fail.
network:
  ipFamilies: ["IPv4"]

Harbor가 추가되면 Actions을 클릭하고  Install on Supervisors를 선택합니다.

Supervisor-1 옆의 확인란을 선택하고 수정된 harbor-data-values.yml의 내용을 붙여넣습니다.

svc-harbor 네임스페이스를 클릭하고 모든vSphere Pods가 실행 상태가 될 때까지 기다립니다.

참고: 일부 파드는 배포 중에 실패하고 자동으로 다시 생성될 수 있으며, 이는 표준 쿠버네티스 동작이다. 배포를 보고 사용 가능 상태가 원하는 상태와 일치하는지 확인하여 배포가 완전히 완료되었는지 확인할 수 있습니다.

이제 harbor-data-values.yml에 정의된 FQDN, 사용자 이름 및 비밀번호를 사용하여 Harbor 인스턴스에 로그인할 수 있습니다.

레지스트리 인증서를 받으려면 Library를 클릭하고 인증서를 다운로드합니다.

이제 애플리케이션 이미지를 저장할 새 프로젝트를 만들겠습니다. 다음 슈퍼바이저 시리즈 에피소드에서 이 이미지를 사용하겠습니다.

하버에서 Projects로 이동하여 New Project를 클릭합니다. 프로젝트 이름 필드에 3ta를 입력합니다. Public 확인란을 선택하여 리포지토리를 공개적으로 사용할 수 있도록 설정할 수 있습니다. 이 데모에서는 리포지토리를 비공개로 유지하겠습니다.

Carvel 도구

Carvel은 애플리케이션 빌드, 구성 및 Kubernetes로의 배포를 지원하는 신뢰할 수 있는 단일 목적의 구성 가능한 도구 세트를 제공하며, http://carvel.dev 에서 다운로드할 수 있습니다.

이미지를 조작하기 위해 이미지를 조작하는 도구인 imgpkg를 사용하게 되는데, 이 도구는 쿠버네티스 구성과 종속된 OCI 이미지를 하나의 OCI 아티팩트인 번들로 패키징하는 도구입니다.

설치 지침에 따라 관리 머신에 카벨 도구를 설치하세요.

이미지를 Harbor 이미지 레지스트리로 푸시하기

Carvel 툴을 설치한 관리 머신에 로그인합니다. 이 데모에서는 우분투 가상 머신을 사용합니다.

다음 명령을 실행하여 애플리케이션 이미지를 로컬 tar 파일에 복사합니다:

  • imgpkg copy -i jswolf059/developer-utilities-backend:latest –to-tar=/tmp/backend.tar
  • imgpkg copy -i jswolf059/developer-utilities-frontend:latest –to-tar=/tmp/frontend.tar

다음 경로에서 ca.crt 파일을 생성하고 앞서 다운로드한 레지스트리 인증서를 붙여넣습니다:

  • sudo vi /etc/docker/certs.d/harbor.vmw.lab/ca.crt

참고: Harbor 인스턴스에 처음 연결하는 경우 docker 로그인 명령을 사용하여 로그인해야 할 수 있습니다:

  • docker login harbor.vmw.lab

imgpkg 복사본을 사용하여 로컬 tar 파일을 Harbor 이미지 레지스트리에 업로드합니다:

  • imgpkg copy –tar /tmp/backend.tar –to-repo=harbor.vmw.lab/3ta/backend –registry-ca-cert-path /etc/docker/certs.d/harbor.vmw.lab/ca.crt
  • imgpkg copy –tar /tmp/frontend.tar –to-repo=harbor.vmw.lab/3ta/frontend –registry-ca-cert-path /etc/docker/certs.d/harbor.vmw.lab/ca.crt

Harbor로 돌아가서 백엔드 및 프론트엔드 번들이 모두 3ta 프로젝트에 추가되었는지 확인합니다.

이 에피소드가 실제로 작동하는 모습 보기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like