이 페이지에서는 컨테이너 이미지를 Harbor에 업로드하고 GDC Sandbox 인스턴스에 해당 이미지를 배포하는 프로세스를 설명합니다.
준비
인스턴스에 연결 의 안내에 따라 Linux 명령줄 액세스로 인스턴스에 연결합니다. 원격 데스크톱을 통해 게이트웨이에 연결하거나 Linux 머신에서
sshuttle을 실행할 수 있습니다.조직 IAM 관리자에게 프로젝트 수준에서 다음 역할을 부여해 달라고 요청하세요.
- Secret 관리자 (
secret-admin): GDC 콘솔에서 작동하는 데 필요합니다. - 네임스페이스 관리자 (
namepspace-admin): 프로젝트에서 컨테이너 워크로드를 배포하는 데 필요합니다. - 전역 PNP 관리자 (
global-project-networkpolicy-admin): 영역 간에 프로젝트 네트워크 정책을 만들고 관리하는 데 필요합니다. - 프로젝트 뷰어()(
project-viewer): GDC 콘솔 및 Distributed Cloud CLI에 액세스하는 데 필요합니다. - Harbor 인스턴스 뷰어 (
harbor-instance-viewer): Harbor 인스턴스를 보고 선택하는 데 필요합니다. - Harbor 프로젝트 생성자 (
harbor-project-creator): Harbor 프로젝트에 액세스하고 관리하는 데 필요합니다.
- Secret 관리자 (
다음 안내에서 사용할 환경 변수를 설정합니다.
export TENANT_PROJECT=TENANT_PROJECT # Intended deployment project for the container workflow. export HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME # Harbor Container Registry instance name. export HARBOR_PROJECT=HARBOR_PROJECT # Container registry project name for your images. export AO_USER=AO_USER # Your user name in the instance, e.g.: fop-my-user@example.com. export INSTANCE_URL=${HARBOR_INSTANCE_NAME}-${TENANT_PROJECT}.org-1.zone1.google.gdch.test. export DOCKER_CONFIG_PATH=DOCKER_CONFIG_PATH # Path to docker config file e.g.: /root/.docker/config.json.Harbor 레지스트리 인스턴스를 만들려면 Harbor 레지스트리 인스턴스 만들기를 따르거나 미리 생성된 Sandbox Harbor 인스턴스를 사용할 수 있습니다. GDC Sandbox의 기본
user-project에는 이미 배포된 Harbor 인스턴스인user-haas-instance가 포함되어 있으며 이는 개발에 사용할 수 있습니다.export HARBOR_INSTANCE_NAME=user-haas-instance export TENANT_PROJECT=user-project export INSTANCE_URL=${HARBOR_INSTANCE_NAME}-${TENANT_PROJECT}.org-1.zone1.google.gdch.test
Harbor에 이미지 업로드
Harbor 프로젝트 만들기에 따라 Harbor 프로젝트를 만듭니다.
예:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=TENANT_PROJECT \ --instance=HARBOR_INSTANCE_NAMEDocker에 로그인합니다. CLI 보안 비밀로 Docker 또는 Helm에 로그인에서 시작합니다.
컨테이너 이미지를 다운로드하거나 빌드하고 Google Distributed Cloud 에어 갭 안내에 따라 이미지를 푸시 하여 Harbor로 푸시합니다.
예를 들어 Gitlab에서 가져오고 Harbor로 푸시하는 워크플로는 다음과 같습니다.
Gitlab 컨테이너 레지스트리에 로그인하고 가져옵니다.
export GITLAB_ID=GITLAB_ID export GITLAB_PROJECT_NAME=GITLAB_PROJECT_NAME export GITLAB_IMAGE_PATH=registry.gitlab.com/GITLAB_ID/GITLAB_PROJECT_NAME docker login registry.gitlab.com docker pull ${GITLAB_IMAGE_PATH}Gitlab 이미지를 Harbor로 푸시합니다.
export TAG=demo-image docker tag ${TAG} ${GITLAB_IMAGE_PATH} docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/${TAG}
컨테이너 앱 배포
Kubernetes 이미지 가져오기 보안 비밀 만들기로 계속 진행하여 보안 비밀을 만들고 앱을 배포합니다.
네트워크 정책 만들기
모든 네트워크 트래픽을 테넌트 프로젝트로 허용하는 네트워크 정책을 만듭니다.
kubectl --kubeconfig GLOBAL_API_KUBECONFIG -n TENANT_PROJECT \ create -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ProjectNetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOF
애플리케이션에 연결
서비스의 IP 주소를 내보냅니다.
export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \ -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`sshuttle을 사용하여 로컬 머신에서 연결하려면 다음 명령어를 실행하여 SSH 터널을 만듭니다. 인스턴스에 연결할 때 만든 기존sshuttle세션이 있는 경우 다음 명령어를 실행하기 전에 해당 세션을 종료해야 합니다.sshuttle -r zone1-org-1-data@GDC_SANDBOX_INSTANCE_NAME --no-latency-control \ --ssh-cmd 'gcloud compute ssh --project PROJECT_NAME --zone ZONE --tunnel-through-iap' \ 10.200.0.0/16 --dnsHTTP 요청 http://${IP}`을 보내 서비스 테스트:
curl http://${IP}