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. Bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die folgenden Rollen auf Projektebene zuzuweisen:

    • Secret-Administrator (secret-admin): erforderlich für die Verwendung der GDC-Konsole.
    • Namespace-Administrator (namepspace-admin): Erforderlich, um Containerarbeitslasten in Ihrem Projekt bereitzustellen.
    • Globaler PNP-Administrator (global-project-networkpolicy-admin): Erforderlich, um Projektnetzwerkrichtlinien zonenübergreifend zu erstellen und zu verwalten.
    • Projektbetrachter (project-viewer): erforderlich für den Zugriff auf die GDC-Konsole und die Distributed Cloud CLI.
    • Harbor Instance Viewer (harbor-instance-viewer): erforderlich, um eine Harbor-Instanz anzusehen und auszuwählen.
    • Harbor Project Creator (harbor-project-creator): Erforderlich für den Zugriff auf und die Verwaltung eines Harbor-Projekts.
  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-Umgebungen ohne Internetverbindung, um ein Image per Push an Harbor zu übertragen.

    Hier ist ein Beispiel für 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-Secret zum Abrufen von Images erstellen fort, um ein Secret zu erstellen und Ihre App bereitzustellen.

Netzwerkrichtlinie erstellen

  1. Erstellen Sie eine Netzwerkrichtlinie, die den gesamten Netzwerk-Traffic zum Mandantenprojekt zulässt:

    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
    

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 einer 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}