コンテナ ワークロードをデプロイする

このページでは、コンテナ イメージを 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 のエアギャップの手順に沿ってイメージを push して Harbor に push します。

    たとえば、Gitlab からプルして Harbor にプッシュするワークフローは次のようになります。

    1. GitLab コンテナ レジストリにログインして pull します。

      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 に push します。

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

コンテナ アプリをデプロイする

Kubernetes イメージ pull 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}