Containerarbeitslasten bereitstellen

Auf dieser Seite wird beschrieben, wie Sie ein Container-Image in Harbor hochladen und in Ihrer GDC Sandbox-Instanz bereitstellen.

Vorbereitung

  1. Folgen Sie der Anleitung unter Verbindung zur Instanz herstellen, um eine Verbindung zu Ihrer Instanz mit Linux-Befehlszeilenzugriff herzustellen. Sie können über Remote Desktop eine Verbindung zu Ihrem Gateway herstellen oder sshuttle auf Ihrem Linux-Computer ausführen.

  2. Achten Sie darauf, dass dem Nutzer auf Projektebene die Rollen secret-admin, namespace-admin, global-pnp-admin und project-viewer zugewiesen sind.

  3. Legen Sie Umgebungsvariablen fest, die in der folgenden Anleitung verwendet werden:

    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. Wenn Sie eine Harbor-Registrierungsinstanz erstellen möchten, folgen Sie der Anleitung unter Harbor-Registrierungsinstanz erstellen. Alternativ können Sie die vorkonfigurierte Sandbox-Harbor-Instanz verwenden: Die Standard-user-project in der GDC-Sandbox enthält bereits eine bereitgestellte Harbor-Instanz, user-haas-instance, die für die Entwicklung verwendet werden kann.

    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
    

Bild in Harbor hochladen

  1. Erstellen Sie ein Harbor-Projekt, indem Sie der Anleitung unter Harbor-Projekt erstellen folgen.

    Beispiel:

    gdcloud harbor harbor-projects create HARBOR_PROJECT  \
    --project=TENANT_PROJECT \
    --instance=HARBOR_INSTANCE_NAME
    
  2. Melden Sie sich bei Docker an. Beginnen Sie mit Mit CLI-Secrets bei Docker oder Helm anmelden.

  3. Laden Sie Ihr Container-Image herunter oder erstellen Sie es und folgen Sie der Anleitung für Google Distributed Cloud in Umgebungen ohne Internetverbindung, um ein Image per Push an Harbor zu übertragen.

    Hier sehen Sie beispielsweise einen Workflow zum Pullen aus GitLab und zum Pushen in Harbor:

    1. Melden Sie sich an und rufen Sie Daten aus Ihrer GitLab-Containerregistrierung ab.

      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. Übertragen Sie das GitLab-Image per Push in Harbor:

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

Container-App bereitstellen

Fahren Sie mit Kubernetes-Image-Pull-Secret erstellen fort, um ein Secret zu erstellen und Ihre App bereitzustellen.

Netzwerkrichtlinie erstellen

  1. Erstellen Sie eine Netzwerkrichtlinie, um den gesamten Netzwerk-Traffic zum Mandantenprojekt zuzulassen:

    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
    

Verbindung zur Anwendung herstellen

  1. Exportieren Sie die IP-Adresse für den Dienst:

    export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \
          -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
    
  2. Wenn Sie von Ihrem lokalen Computer aus eine Verbindung mit sshuttle herstellen möchten, führen Sie den folgenden Befehl aus, um einen SSH-Tunnel zu erstellen. Wenn Sie eine vorhandene sshuttle-Sitzung haben, die Sie beim Herstellen der Verbindung zu Ihrer Instanz erstellt haben, müssen Sie diese Sitzung beenden, bevor Sie den folgenden Befehl ausführen:

      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. Testen Sie den Dienst, indem Sie eine HTTP-Anfrage http://${IP}` senden:

      curl http://${IP}