본문 바로가기

VMware TANZU/TKG: Tanzu Kubernetes Grid

TKG 1.6 Airgap 환경 구성 시 image upload 문제

TKG 1.6 문서를 보고서 인터넷이 되지 않는 환경을 구성을 하다가 보면 image 다운로드 이후, private harbor로 전환하는 과정에서 오류가 발생하는 것을 볼 수 있습니다.

 

image 옮기는 download-images.sh 스크립트를 실행 시, 일부 image에서 옵션 값이 맞지 않음으로 발생하는 현상입니다.

 

이를 위해, script의 echo 메시지 항목을 조금 수정하여, 어떤 image에서 에러가 발생하는지 확인 후, 옵션 값을 조절할 필요가 있습니다.

 

#!/bin/bash

set -euo pipefail

images_script=${1:-}
if [ ! -f $images_script ]; then
  echo "You may add your images list filename as an argument."
  echo "E.g ./download-images.sh image-copy-list"
fi

commands="$(cat ${images_script} |grep imgpkg |sort |uniq)"

while IFS= read -r cmd; do
  echo -e "\nrunning $cmd\n"
  until $cmd; do
     echo -e "\nDownload failed. Retrying.... $cmd\n"
     sleep 1
  done
done <<< "$commands"

#### while 문 안에 echo 구문을 수정 - $cmd를 추가하여, 어느 명령줄에서 error가 발생하는지 확인 필요함. 원문은 error를 표시하나, command에 grep sort 구문으로 인하여, image-copy-list와는 순서가 맞지 않음. 그럼으로 sort를 하지 않거나, $cmd를 추가해서 확인
#### 혹은 image-copy-list를 바로 실행 모드로 image-copy-list.sh 형태로 복사하여, 실행하는게 더 오류 시 위치를 직관적으로 알 수 있습니다. 이미 진행된 명령줄은 삭제를 하면 됨.

(굳이 script를 실행하지 않더라도, image-copy-list에 있는 명령문을 일정 행씩 복사하여, 실행하여 실패하는 행만을 다시 수정 실행하는 것도 한가지 대안이 될 수 있습니다. 조금 번거롭긴 하지만 말입니다.)

 

일단, 위와 같이 스크립트를 수정하여 실행 후, 에러가 나는 행을 확인한 다음 다시 image-copy-list를 백업 파일을 만든 후, 에러가 난 이전의 행을 삭제하고, 에러가 난 행을 수정한 다음에 download-images.sh을 실행하면 됩니다.

 

현재 에러가 나는 행은 2곳으로 확인됩니다.

 

As-Is:
imgpkg copy -i projects.registry.vmware.com/tkg/packages/capabilities:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/capabilities --registry-ca-cert-path /tmp/cacrtbase64d.crt

To-Be:
imgpkg copy -b projects.registry.vmware.com/tkg/packages/capabilities:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/capabilities --registry-ca-cert-path /tmp/cacrtbase64d.crt

 

As-Is:
imgpkg copy -i projects.registry.vmware.com/tkg/packages/tkg-storageclass:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/tkg-storageclass --registry-ca-cert-path /tmp/cacrtbase64d.crt

To-Be:
imgpkg copy -b projects.registry.vmware.com/tkg/packages/tkg-storageclass:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/tkg-storageclass --registry-ca-cert-path /tmp/cacrtbase64d.crt

 

 


 

전체 설치 과정

 

Tanzu CLI tool 설치

# tanzu directory 안에서 실행
#tanzu tool install
sudo install core/v0.25.0/tanzu-core-linux_amd64 /usr/local/bin/tanzu

#tanzu 초기화 및 버전 확인
tanzu init
tanzu version

# 옵션: Plugin 재설치 - tanzu directory 안에서 실행
tanzu plugin clean
tanzu plugin sync

Kubernetes tool 설치

# Kubernetes tool 설치

chmod ugo+x kubectl-linux-v1.23.8+vmware.2
sudo install kubectl-linux-v1.23.8+vmware.2 /usr/local/bin/kubectl

Tanzu Cavel cli tool

cd cli

gunzip ytt-linux-amd64-v0.41.1+vmware.1.gz
sudo chmod ugo+x ytt-linux-amd64-v0.41.1+vmware.1
sudo mv ./ytt-linux-amd64-v0.41.1+vmware.1 /usr/local/bin/ytt

gunzip kapp-linux-amd64-v0.49.0+vmware.1.gz
sudo chmod ugo+x kapp-linux-amd64-v0.49.0+vmware.1
sudo mv ./kapp-linux-amd64-v0.49.0+vmware.1 /usr/local/bin/kapp

gunzip kbld-linux-amd64-v0.34.0+vmware.1.gz
sudo chmod ugo+x kbld-linux-amd64-v0.34.0+vmware.1
sudo mv ./kbld-linux-amd64-v0.34.0+vmware.1 /usr/local/bin/kbld

gunzip imgpkg-linux-amd64-v0.29.0+vmware.1.gz
sudo chmod ugo+x imgpkg-linux-amd64-v0.29.0+vmware.1
sudo mv ./imgpkg-linux-amd64-v0.29.0+vmware.1 /usr/local/bin/imgpkg

Docker Instllation on Ubuntu(이미 docker client가 설치되어 동작중이라면 제외)

#docker install

sudo apt remove docker-desktop

rm -r $HOME/.docker/desktop

sudo rm /usr/local/bin/com.docker.cli

sudo apt purge docker-desktop

sudo apt-get update

sudo apt-get update

sudo apt-get install \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo chmod a+r /etc/apt/keyrings/docker.gpg

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo service docker start

### To install a specific version of Docker Engine, list the available versions in the repo, then select and install:
apt-cache madison docker-ce

인터넷 되는 머신에서 아래와 같이 변수 값을 설정 필요

  • 이 변수 설정과 별개로 비보안 자체 인증서로 docker 로그인을 위한 과정 필요하며, ubuntu에서 certificate update를 사용하거나, /etc/docker/certs.d/{registry host}/{ca.crt} 의 위치에 클라이언트 키가 위치해 있어야 합니다.
docker login {prviate registry host}
예) docker login vmk-hbr.vmk.corp
## docker login이 가능하도록 먼저 준비 해주세요.
  • private harbor의 인증서에 .cert 파일에 대한 base64 치환으로 키 생성하여 TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE에 입력
  • 예제: base64 -w 0 vmk-hbr.vmk.corp.cert
#Air-gapped 환경에서 인터넷 되는 machine에서 private harbor로 image 전송을 위한 설정
export TKG_CUSTOM_IMAGE_REPOSITORY="vmk-hbr.vmk.corp/test/1.6.0"
export TKG_IMAGE_REPO="projects.registry.vmware.com/tkg"
export TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE=LS0t[...]tLS0tLQ==

#DNS에 private registry 등록이 되어 있고, 배포되는 bootstrap 및 node에서 dns lookup으로 조회되고 통신이 된다면 추가적인 overlay 설정은 필요치 않음.

export는 ~/.bashrc 를 수정하여, 기재해 놓을 경우에는 로그인 시 지속 적용 가능함.

Overlay - 1 설정

~/.config/tanzu/tkg/providers/ 아래의 각 배포 플랫폼에 맞는 폴더를 찾아서 해당 파일의 최 하단에 code 추가 이후, echo 영역에 IP와 registry path를 기재

예) echo “10.109.211.15 vmk-hbr.vmk.corp/test/1.6.0” >> /etc/hosts

~/.config/tanzu/tkg/providers/infrastructure-vsphere/ytt/vsphere-overlay.yaml

#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"KubeadmControlPlane"})
---
spec:
  kubeadmConfigSpec:
    preKubeadmCommands:
    #! Add nameserver to all k8s nodes
    #@overlay/append
    - echo "PRIVATE-REGISTRY-IP   PRIVATE-REGISTRY-HOSTNAME" >> /etc/hosts
#@overlay/match by=overlay.subset({"kind":"KubeadmConfigTemplate"}), expects="1+"
---
spec:
  template:
    spec:
      preKubeadmCommands:
      #! Add nameserver to all k8s nodes
      #@overlay/append
      - echo "PRIVATE-REGISTRY-IP   PRIVATE-REGISTRY-HOSTNAME" >> /etc/hosts

Overlay - 2 설정

하위 파일을 편집기로 수정하여 아래 code을 spec.template.spec 아래 항목의 “container” block 시작 지점 직전에 삽입을 해야 합니다.

~/.config/tanzu/tkg/providers/ytt/03_customizations/01_tkr/tkr_overlay.lib.yaml

삽입 코드

#@overlay/match missing_ok=True
hostAliases:
- ip: PRIVATE-REGISTRY-IP
  hostnames:
  - PRIVATE-REGISTRY-HOSTNAME

예제

#@overlay/match by=overlay.subset({"kind":"Deployment","metadata":{"name": "tkr-controller-manager"}})
---
spec:
  template:
    spec:
      #@overlay/match missing_ok=True
      hostAliases:
      - ip: 10.109.211.15
        hostnames:
        - vmk-hbr.vmk.corp/test/1.6.0
      containers:
      #@overlay/match by=overlay.subset({"name":"manager"})
      #! TODO: Consume image from BOM
      - image: #@ "{}/{}:{}".format(get_image_repo_for_component(bomData.components["tanzu-framework"][0].images.tkrImage), bomData.components["tanzu-framework"][0].images.tkrImage.imagePath, bomData.components["tanzu-framework"][0].images.tkrImage.tag)

TKr 버전을 지정하여 다운로드

# TKr 리스트
imgpkg pull -i ${TKG_IMAGE_REPO}/tkr-compatibility:v$(imgpkg tag list -i ${TKG_IMAGE_REPO}/tkr-compatibility |sed 's/v//' |sort -rn |head -1) --output "tkr-tmp"; cat tkr-tmp/tkr-compatibility.yaml; rm -rf tkr-tmp;

# 인터넷에서 파일 다운로드 후, harbor로 전송을 위한 버전 지정
# TKr 호환성 리스트에서는 v1.23.8+~~~~ 형태로 표시됨으로 + 는 _ 로 치환
export DOWNLOAD_TKRS="v1.23.8_vmware.2-tkg.1"

Image downlod용 shell script

wget https://raw.githubusercontent.com/vmware-tanzu/tanzu-framework/e3de5b1557d9879dc814d771f431ce8945681c48/hack/gen-publish-images.sh

chmod +x gen-publish-images.sh

./gen-publish-images.sh > image-copy-list

cat image-copy-list

image를 Harbor 에 push shell script

#!/bin/bash

set -euo pipefail

images_script=${1:-}
if [ ! -f $images_script ]; then
  echo "You may add your images list filename as an argument."
  echo "E.g ./download-images.sh image-copy-list"
fi

commands="$(cat ${images_script} |grep imgpkg |sort |uniq)"

while IFS= read -r cmd; do
  echo -e "\\nrunning $cmd\\n"
  until $cmd; do
     echo -e "\\nDownload failed. Retrying.... $cmd\\n"
     sleep 1
  done
done <<< "$commands"

#### while 문 안에 echo 구문을 수정 - $cmd를 추가하여, 어느 명령줄에서 error가 발생하는지 확인 필요함. 원문은 error를 표시하나, command에 grep sort 구문으로 인하여, image-copy-list와는 순서가 맞지 않음. 그럼으로 sort를 하지 않거나, $cmd를 추가해서 확인
#### 혹은 image-copy-list를 바로 실행 모드로 image-copy-list.sh 형태로 복사하여, 실행하는게 더 오류 시 위치를 직관적으로 알 수 있습니다. 이미 진행된 명령줄은 삭제를 하면 됨.

download-images.sh 을 실행

chmod +x download-images.sh
docker login ${TKG_CUSTOM_IMAGE_REPOSITORY}
./download-images.sh image-copy-list

실행 전에 아래 image-copy-list를 일부 행 수정 필요

Image copy list 2곳의 -i → -b 옵션으로 변경 필요

# We shoud correct two lines.

imgpkg copy -i projects.registry.vmware.com/tkg/packages/capabilities:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/capabilities --registry-ca-cert-path /tmp/cacrtbase64d.crt
=>
imgpkg copy -b projects.registry.vmware.com/tkg/packages/capabilities:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/capabilities --registry-ca-cert-path /tmp/cacrtbase64d.crt
imgpkg copy -i projects.registry.vmware.com/tkg/packages/tkg-storageclass:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/tkg-storageclass --registry-ca-cert-path /tmp/cacrtbase64d.crt
  ==>
imgpkg copy -b projects.registry.vmware.com/tkg/packages/tkg-storageclass:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/tkg-storageclass --registry-ca-cert-path /tmp/cacrtbase64d.crt

Bootstrap에서 실행 필요한 항목

이미지 copy는 인터넷이 되는 머신이고, bootstrap은 인터넷이 안되는 것을 가정하게 됨.

혹은 동일 머신일 경우일 수도 있음.

아래 tanzu config set 명령어는 ~/.config/tanzu/config.yaml 파일을 수정하는 것입니다.

즉 bootstrap에서 tanzu 명령어를 수행 시, 인터넷이 되지 않는 환경의 private registry 경로를 알 수 있도록 환경 값이 적용이 됩니다. 이는 bootstrap 자체에 임시 controlplane node를 생성하기 위한 작업임.

보안 인증된 인증서 사용하는 harbor

tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY custom-image-repository.io/yourproject
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY true

#### 예제
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY vmk-hbr.vmk.corp/test/1.6.0
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY true

셀프 인증서에 비보안 harbor

  • private harbor의 인증서에 .cert 파일에 대한 base64 치환으로 키 생성
  • 예제: base64 -w 0 vmk-hbr.vmk.corp.cert
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY custom-image-repository.io/yourproject
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY false
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE LS0t[...]tLS0tLQ==

#### 예제
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY vmk-hbr.vmk.corp/test/1.6.0
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY false
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE LS0t[...]tLS0tLQ==

Tanzu CLI tool 설치

# tanzu directory 안에서 실행
#tanzu tool install
sudo install core/v0.25.0/tanzu-core-linux_amd64 /usr/local/bin/tanzu

#tanzu 초기화 및 버전 확인
tanzu init
tanzu version

# 옵션: Plugin 재설치 - tanzu directory 안에서 실행
tanzu plugin clean
tanzu plugin sync

Kubernetes tool 설치

# Kubernetes tool 설치

chmod ugo+x kubectl-linux-v1.23.8+vmware.2
sudo install kubectl-linux-v1.23.8+vmware.2 /usr/local/bin/kubectl

Tanzu Cavel cli tool

cd cli

gunzip ytt-linux-amd64-v0.41.1+vmware.1.gz
sudo chmod ugo+x ytt-linux-amd64-v0.41.1+vmware.1
sudo mv ./ytt-linux-amd64-v0.41.1+vmware.1 /usr/local/bin/ytt

gunzip kapp-linux-amd64-v0.49.0+vmware.1.gz
sudo chmod ugo+x kapp-linux-amd64-v0.49.0+vmware.1
sudo mv ./kapp-linux-amd64-v0.49.0+vmware.1 /usr/local/bin/kapp

gunzip kbld-linux-amd64-v0.34.0+vmware.1.gz
sudo chmod ugo+x kbld-linux-amd64-v0.34.0+vmware.1
sudo mv ./kbld-linux-amd64-v0.34.0+vmware.1 /usr/local/bin/kbld

gunzip imgpkg-linux-amd64-v0.29.0+vmware.1.gz
sudo chmod ugo+x imgpkg-linux-amd64-v0.29.0+vmware.1
sudo mv ./imgpkg-linux-amd64-v0.29.0+vmware.1 /usr/local/bin/imgpkg

Docker Instllation on Ubuntu(이미 docker client가 설치되어 동작중이라면 제외)

#docker install

sudo apt remove docker-desktop

rm -r $HOME/.docker/desktop

sudo rm /usr/local/bin/com.docker.cli

sudo apt purge docker-desktop

sudo apt-get update

sudo apt-get update

sudo apt-get install \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo chmod a+r /etc/apt/keyrings/docker.gpg

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo service docker start

### To install a specific version of Docker Engine, list the available versions in the repo, then select and install:
apt-cache madison docker-ce

인터넷 되는 머신에서 아래와 같이 변수 값을 설정 필요

  • 이 변수 설정과 별개로 비보안 자체 인증서로 docker 로그인을 위한 과정 필요하며, ubuntu에서 certificate update를 사용하거나, /etc/docker/certs.d/{registry host}/{ca.crt} 의 위치에 클라이언트 키가 위치해 있어야 합니다.
docker login {prviate registry host}
예) docker login vmk-hbr.vmk.corp
## docker login이 가능하도록 먼저 준비 해주세요.
  • private harbor의 인증서에 .cert 파일에 대한 base64 치환으로 키 생성하여 TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE에 입력
  • 예제: base64 -w 0 vmk-hbr.vmk.corp.cert
#Air-gapped 환경에서 인터넷 되는 machine에서 private harbor로 image 전송을 위한 설정
export TKG_CUSTOM_IMAGE_REPOSITORY="vmk-hbr.vmk.corp/test/1.6.0"
export TKG_IMAGE_REPO="projects.registry.vmware.com/tkg"
export TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE=LS0t[...]tLS0tLQ==

#DNS에 private registry 등록이 되어 있고, 배포되는 bootstrap 및 node에서 dns lookup으로 조회되고 통신이 된다면 추가적인 overlay 설정은 필요치 않음.

export는 ~/.bashrc 를 수정하여, 기재해 놓을 경우에는 로그인 시 지속 적용 가능함.

Overlay - 1 설정

~/.config/tanzu/tkg/providers/ 아래의 각 배포 플랫폼에 맞는 폴더를 찾아서 해당 파일의 최 하단에 code 추가 이후, echo 영역에 IP와 registry path를 기재

예) echo “10.109.211.15 vmk-hbr.vmk.corp/test/1.6.0” >> /etc/hosts

~/.config/tanzu/tkg/providers/infrastructure-vsphere/ytt/vsphere-overlay.yaml

#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"KubeadmControlPlane"})
---
spec:
  kubeadmConfigSpec:
    preKubeadmCommands:
    #! Add nameserver to all k8s nodes
    #@overlay/append
    - echo "PRIVATE-REGISTRY-IP   PRIVATE-REGISTRY-HOSTNAME" >> /etc/hosts
#@overlay/match by=overlay.subset({"kind":"KubeadmConfigTemplate"}), expects="1+"
---
spec:
  template:
    spec:
      preKubeadmCommands:
      #! Add nameserver to all k8s nodes
      #@overlay/append
      - echo "PRIVATE-REGISTRY-IP   PRIVATE-REGISTRY-HOSTNAME" >> /etc/hosts

Overlay - 2 설정

하위 파일을 편집기로 수정하여 아래 code을 spec.template.spec 아래 항목의 “container” block 시작 지점 직전에 삽입을 해야 합니다.

~/.config/tanzu/tkg/providers/ytt/03_customizations/01_tkr/tkr_overlay.lib.yaml

삽입 코드

#@overlay/match missing_ok=True
hostAliases:
- ip: PRIVATE-REGISTRY-IP
  hostnames:
  - PRIVATE-REGISTRY-HOSTNAME

예제

#@overlay/match by=overlay.subset({"kind":"Deployment","metadata":{"name": "tkr-controller-manager"}})
---
spec:
  template:
    spec:
      #@overlay/match missing_ok=True
      hostAliases:
      - ip: 10.109.211.15
        hostnames:
        - vmk-hbr.vmk.corp/test/1.6.0
      containers:
      #@overlay/match by=overlay.subset({"name":"manager"})
      #! TODO: Consume image from BOM
      - image: #@ "{}/{}:{}".format(get_image_repo_for_component(bomData.components["tanzu-framework"][0].images.tkrImage), bomData.components["tanzu-framework"][0].images.tkrImage.imagePath, bomData.components["tanzu-framework"][0].images.tkrImage.tag)

TKr 버전을 지정하여 다운로드

# TKr 리스트
imgpkg pull -i ${TKG_IMAGE_REPO}/tkr-compatibility:v$(imgpkg tag list -i ${TKG_IMAGE_REPO}/tkr-compatibility |sed 's/v//' |sort -rn |head -1) --output "tkr-tmp"; cat tkr-tmp/tkr-compatibility.yaml; rm -rf tkr-tmp;

# 인터넷에서 파일 다운로드 후, harbor로 전송을 위한 버전 지정
# TKr 호환성 리스트에서는 v1.23.8+~~~~ 형태로 표시됨으로 + 는 _ 로 치환
export DOWNLOAD_TKRS="v1.23.8_vmware.2-tkg.1"

Image downlod용 shell script

wget https://raw.githubusercontent.com/vmware-tanzu/tanzu-framework/e3de5b1557d9879dc814d771f431ce8945681c48/hack/gen-publish-images.sh

chmod +x gen-publish-images.sh

./gen-publish-images.sh > image-copy-list

cat image-copy-list

image를 Harbor 에 push shell script

#!/bin/bash

set -euo pipefail

images_script=${1:-}
if [ ! -f $images_script ]; then
  echo "You may add your images list filename as an argument."
  echo "E.g ./download-images.sh image-copy-list"
fi

commands="$(cat ${images_script} |grep imgpkg |sort |uniq)"

while IFS= read -r cmd; do
  echo -e "\\nrunning $cmd\\n"
  until $cmd; do
     echo -e "\\nDownload failed. Retrying.... $cmd\\n"
     sleep 1
  done
done <<< "$commands"

#### while 문 안에 echo 구문을 수정 - $cmd를 추가하여, 어느 명령줄에서 error가 발생하는지 확인 필요함. 원문은 error를 표시하나, command에 grep sort 구문으로 인하여, image-copy-list와는 순서가 맞지 않음. 그럼으로 sort를 하지 않거나, $cmd를 추가해서 확인
#### 혹은 image-copy-list를 바로 실행 모드로 image-copy-list.sh 형태로 복사하여, 실행하는게 더 오류 시 위치를 직관적으로 알 수 있습니다. 이미 진행된 명령줄은 삭제를 하면 됨.

download-images.sh 을 실행

chmod +x download-images.sh
docker login ${TKG_CUSTOM_IMAGE_REPOSITORY}
./download-images.sh image-copy-list

실행 전에 아래 image-copy-list를 일부 행 수정 필요

Image copy list 2곳의 -i → -b 옵션으로 변경 필요

# We shoud correct two lines.

imgpkg copy -i projects.registry.vmware.com/tkg/packages/capabilities:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/capabilities --registry-ca-cert-path /tmp/cacrtbase64d.crt
=>
imgpkg copy -b projects.registry.vmware.com/tkg/packages/capabilities:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/capabilities --registry-ca-cert-path /tmp/cacrtbase64d.crt
imgpkg copy -i projects.registry.vmware.com/tkg/packages/tkg-storageclass:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/tkg-storageclass --registry-ca-cert-path /tmp/cacrtbase64d.crt
  ==>
imgpkg copy -b projects.registry.vmware.com/tkg/packages/tkg-storageclass:v0.25.0-23-g6288c751_vmware.1 --to-repo vmk-hbr.vmk.corp/test/1.6.0/packages/tkg-storageclass --registry-ca-cert-path /tmp/cacrtbase64d.crt

Bootstrap에서 실행 필요한 항목

이미지 copy는 인터넷이 되는 머신이고, bootstrap은 인터넷이 안되는 것을 가정하게 됨.

혹은 동일 머신일 경우일 수도 있음.

아래 tanzu config set 명령어는 ~/.config/tanzu/config.yaml 파일을 수정하는 것입니다.

즉 bootstrap에서 tanzu 명령어를 수행 시, 인터넷이 되지 않는 환경의 private registry 경로를 알 수 있도록 환경 값이 적용이 됩니다. 이는 bootstrap 자체에 임시 controlplane node를 생성하기 위한 작업임.

보안 인증된 인증서 사용하는 harbor

tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY custom-image-repository.io/yourproject
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY true

#### 예제
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY vmk-hbr.vmk.corp/test/1.6.0
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY true

셀프 인증서에 비보안 harbor

  • private harbor의 인증서에 .cert 파일에 대한 base64 치환으로 키 생성
  • 예제: base64 -w 0 vmk-hbr.vmk.corp.cert
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY custom-image-repository.io/yourproject
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY false
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE LS0t[...]tLS0tLQ==

#### 예제
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY vmk-hbr.vmk.corp/test/1.6.0
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_SKIP_TLS_VERIFY false
tanzu config set env.TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE LS0t[...]tLS0tLQ==