이 페이지에서는 컨테이너 이미지를 Harbor에 업로드하고 GDC 샌드박스 인스턴스에 해당 이미지를 배포하는 과정을 설명합니다.
준비
인스턴스에 연결의 안내에 따라 Linux 명령줄 액세스로 인스턴스에 연결합니다. 원격 데스크톱을 통해 게이트웨이에 연결하거나 Linux 머신에서
sshuttle
를 실행할 수 있습니다.사용자에게 프로젝트 수준에서
secret-admin
,namespace-admin
,global-pnp-admin
,project-viewer
역할이 할당되어 있는지 확인합니다.다음 안내에서 사용할 환경 변수를 설정합니다.
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 레지스트리 인스턴스 만들기를 따르거나 미리 만들어진 샌드박스 Harbor 인스턴스를 사용할 수 있습니다. GDC 샌드박스의 기본
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_NAME
Docker에 로그인합니다. 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.k8s.io/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 --dns
HTTP 요청 http://${IP}를 전송하여 서비스를 테스트합니다.
curl http://${IP}