本页面介绍了将容器映像上传到 Harbor,并在 GDC 沙盒实例中部署该映像的过程。
准备工作
按照连接到实例 中的说明,使用 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 注册表实例 中的说明操作;或者,您也可以使用预先创建的沙盒 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.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 --dns通过发送 HTTP 请求 http://${IP}` 测试服务:
curl http://${IP}