本页介绍了将容器映像上传到 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 Secret 登录 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 映像拉取 Secret,以创建 Secret 并部署应用。
创建网络政策
创建网络政策以允许所有网络流量流向租户项目:
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}