部署容器工作負載

本頁說明將容器映像檔上傳至 Harbor,並在 GDC Sandbox 執行個體中部署該映像檔的程序。

準備

  1. 請按照「連線至執行個體」中的操作說明,透過 Linux 指令列存取執行個體。您可以透過遠端桌面連線至閘道,或在 Linux 電腦上執行 sshuttle

  2. 確認使用者在專案層級已獲派 secret-adminnamespace-adminglobal-pnp-adminproject-viewer 角色。

  3. 設定下列操作說明中會用到的環境變數:

    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.
    
  4. 如要建立 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

  1. 按照「建立 Harbor 專案」一文的說明建立 Harbor 專案。

    範例:

    gdcloud harbor harbor-projects create HARBOR_PROJECT  \
    --project=TENANT_PROJECT \
    --instance=HARBOR_INSTANCE_NAME
    
  2. 登入 Docker。請先參閱「使用 CLI 密鑰登入 Docker 或 Helm」。

  3. 下載或建構容器映像檔,然後按照 Google Distributed Cloud 氣隙環境的指示推送映像檔至 Harbor。

    舉例來說,以下是從 GitLab 提取並推送至 Harbor 的工作流程:

    1. 登入並從 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}
      
    2. 將 GitLab 映像檔推送至 Harbor:

      export TAG=demo-image
      docker tag ${TAG} ${GITLAB_IMAGE_PATH}
      docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/${TAG}
      

部署容器應用程式

請繼續參閱「建立 Kubernetes 映像檔提取密鑰」一文,瞭解如何建立密鑰及部署應用程式。

建立網路政策

  1. 建立網路政策,允許所有網路流量傳輸至租戶專案:

    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
    

連線至應用程式

  1. 匯出服務的 IP 位址:

    export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \
          -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
    
  2. 如要使用 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
    
  3. 傳送 HTTP 要求 http://${IP}` 測試服務:

      curl http://${IP}