本頁說明將容器映像檔上傳至 Harbor,並在 GDC Sandbox 執行個體中部署該映像檔的程序。
準備
請按照「連線至執行個體」中的操作說明,透過 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 登錄檔執行個體」一文的說明操作,也可以使用預先建立的 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_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}