部署容器工作负载

本页介绍了将容器映像上传到 Harbor 以及在 GDC 沙盒实例中部署该映像的流程。

准备工作

  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 注册表实例中的步骤操作;您也可以使用预先创建的沙盒 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

  1. 按照创建 Harbor 项目中的说明创建 Harbor 项目。

    示例:

    gdcloud harbor harbor-projects create HARBOR_PROJECT  \
    --project=TENANT_PROJECT \
    --instance=HARBOR_INSTANCE_NAME
    
  2. 登录 Docker。请先参阅使用 CLI Secret 登录 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 映像拉取 Secret,以创建 Secret 并部署应用。

创建网络政策

  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}