このページでは、コンテナ イメージを Harbor にアップロードし、そのイメージを GDC Sandbox インスタンスにデプロイするプロセスについて説明します。
準備
インスタンスに接続する の手順に沿って、Linux コマンドライン アクセスでインスタンスに接続します。リモート デスクトップ経由でゲートウェイに接続するか、Linux マシンで
sshuttleを実行できます。組織の IAM 管理者に、プロジェクト レベルで次のロールを付与するよう依頼します。
- Secret 管理者(
secret-admin): GDC コンソールで操作するために必要です。 - Namespace 管理者(
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 レジストリ インスタンスを作成するの手順に沿って操作します。 または、事前作成された 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_NAMEDocker にログインします。CLI シークレットを使用して Docker または Helm にログインするから始めます。
コンテナ イメージをダウンロードまたはビルドし、 Google Distributed Cloud エアギャップの手順に沿って イメージを push して Harbor に push します。
たとえば、Gitlab から pull して Harbor に push するワークフローは次のようになります。
ログインして、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}Gitlab イメージを Harbor に push します。
export TAG=demo-image docker tag ${TAG} ${GITLAB_IMAGE_PATH} docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/${TAG}
コンテナ アプリをデプロイする
Kubernetes イメージ pull 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 --dnsHTTP リクエスト http://${IP} を送信してサービスをテストします。
curl http://${IP}