Mit einem freigegebenen Cluster in Google Distributed Cloud (GDC) mit Air Gap können Sie containerisierte Anwendungen in isolierten Fehlerdomains in Ihrer Organisation ausführen. Nachdem Sie eine an ein Projekt angehängt haben, können Sie diese Arbeitslasten in einem dedizierten Namespace verwalten. In dieser Anleitung konfigurieren Sie eine verwaltete Harbor-Registry, übertragen ein NGINX-Beispiel-Image von Docker Hub und stellen den Webserver bereit.
Dieser Workflow richtet sich an Entwickler in der Gruppe der Anwendungsoperatoren, die Arbeitslasten für ihre Organisation erstellen. Weitere Informationen finden Sie unter Zielgruppen für die Dokumentation zu GDC mit Air Gap.
Ziele
- Verwaltete Harbor-Registry erstellen
- Container-Image per Push in die verwaltete Harbor-Registry übertragen.
- Freigegebenen Kubernetes-Cluster erstellen
- Beispiel-Containeranwendung im Cluster bereitstellen
Kosten
Da GDC für die Ausführung in einem Rechenzentrum mit Air Gap konzipiert ist, sind Abrechnungsprozesse und -informationen auf die GDC-Bereitstellung beschränkt und werden nicht von anderen Google-Produkten verwaltet.
Mit dem Preisrechner können Sie eine Kostenschätzung Ihrer voraussichtlichen Nutzung vornehmen.
Mit dem Dashboard „Prognostizierte Kosten“ können Sie zukünftige SKU-Kosten für Ihre Rechnungen prognostizieren.
Verwenden Sie die Dashboards zur Abrechnungsnutzung, um den Speicher- und Computing-Verbrauch zu verfolgen.
Hinweis
Zum Ausführen der Aufgaben in diesem Dokument müssen Sie die erforderlichen Berechtigungen anfordern und Ihre Umgebung vorbereiten.
Arbeiten Sie mit Ihrem Infrastrukturteam und Ihren Administratoren zusammen, um die Binärdatei Ihrer Anwendung auf Ihre Workstation mit Air Gap zu übertragen, oder führen Sie diese Anleitung direkt auf Ihrem CI/CD-Server (Continuous Integration/Continuous Delivery) aus.
IAM-Rollen anfordern
Sie benötigen bestimmte Rollen, um die Berechtigungen zu erhalten, die Sie für diesen Tutorial-Workflow benötigen. Sie müssen Rollen anfordern, die auf Ihr Projekt und Ihre Organisation beschränkt sind.
Organisationsrollen
Wenn Sie einen freigegebenen Kubernetes-Cluster erstellen, löschen, bearbeiten oder ansehen möchten, bitten Sie Ihren IAM-Admin der Organisation, Ihnen die Rolle Nutzercluster-Administrator (user-cluster-admin) zuzuweisen. Diese Rolle ist nicht an einen Namespace gebunden.
Wenn Sie nicht die Berechtigungen zum Erstellen eines freigegebenen Clusters haben, bitten Sie Ihren Plattformadministrator, einen für Sie zu erstellen.
Projektrollen
Bitten Sie Ihren IAM-Projektadministrator, Ihnen die folgenden Rollen in Ihrem Projekt-Namespace zuzuweisen, je nachdem, welche Aufgabe Sie ausführen möchten:
Namespace-Administrator (
namepspace-admin): Erstellen, Löschen, Bearbeiten und Ansehen von Projektressourcen. Diese Rolle ist erforderlich, um Containerarbeitslasten in Ihrem Projekt bereitzustellen.Harbor-Instanzadministrator (
harbor-instance-admin): Harbor-Ressourcen, einschließlich Harbor-Instanzen, erstellen, löschen, bearbeiten und ansehen.Harbor-Instanzbetrachter (
harbor-instance-viewer): Harbor-Instanz ansehen und auswählen.Harbor Project Creator (
harbor-project-creator): Harbor-Projekte erstellen und ansehen.
Umgebung vorbereiten
Für dieses Dokument benötigen Sie die folgenden Ressourcen:
Sie benötigen ein Projekt, um Ihre containerisierten Bereitstellungen zu verwalten. Erstellen Sie ein Projekt, falls Sie noch keines haben.
Legen Sie den Namespace Ihres Projekts als Umgebungsvariable fest:
export NAMESPACE=PROJECT_NAMESPACELaden Sie die gdcloud CLI herunter und installieren Sie sie.
Melden Sie sich beim zonalen Verwaltungs-API-Server an und generieren Sie die kubeconfig-Datei mit einer Nutzeridentität. Legen Sie den kubeconfig-Pfad als Umgebungsvariable fest:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Verwaltete Harbor-Registry erstellen
GDC mit Air Gap bietet Harbor as a Service, einen vollständig verwalteten Dienst, mit dem Sie Container-Images mit Harbor speichern und verwalten können.
Wenn Sie Harbor as a Service verwenden möchten, müssen Sie zuerst eine Harbor-Registry-Instanz und ein Harbor-Projekt erstellen.
Harbor-Registry-Instanz erstellen
So erstellen Sie eine Harbor-Container-Registry-Instanz:
Console
Wählen Sie im Navigationsmenü im Abschnitt CI/CD die Option Harbor Container Registry aus.
Wählen Sie die Zone aus, in der Sie Ihre Harbor-Instanz erstellen möchten. Eine Harbor-Instanz ist eine zonale Ressource und muss in jeder Zone manuell erstellt werden, um Hochverfügbarkeit zu gewährleisten.
Klicken Sie auf Instanz erstellen.
Geben Sie den Namen der Instanz ein und akzeptieren Sie die Nutzungsbedingungen für verwaltete Harbor-Instanzen.
Klicken Sie auf Instanz erstellen.
Prüfen Sie, ob die neue Harbor-Instanz im Abschnitt Harbor-Instanz vorhanden ist.
Klicken Sie auf den externen Link Zur Harbor-Instanz und notieren Sie sich die Instanz-URL. Das Instanz-URL-Format sieht beispielsweise so aus:
harbor-1.org-1.zone1.google.gdc.test. Die Instanz-URL darf nicht das Präfixhttps://enthalten.Legen Sie die Instanz-URL als Variable fest, die Sie später in der Anleitung verwenden können:
export INSTANCE_URL=INSTANCE_URLErsetzen Sie INSTANCE_URL durch die URL der Harbor-Registry-Instanz.
Beispiel:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Erstellen Sie die neue Harbor-Container-Registry-Instanz:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECT \Ersetzen Sie Folgendes:
INSTANCE_NAME: der Name der Harbor-Instanz.PROJECT: der Name des GDC-Projekts.
Listen Sie die URL der Instanz auf:
gdcloud harbor instances describe INSTANCE_NAME \ --project=PROJECTDie Ausgabe sieht dann ungefähr so aus:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.testLegen Sie die Instanz-URL als Variable fest, die Sie später in der Anleitung verwenden können:
export INSTANCE_URL=INSTANCE_URLErsetzen Sie INSTANCE_URL durch die URL der Harbor-Registry-Instanz. Achten Sie darauf, dass die Instanz-URL nicht das Präfix
https://enthält.Beispiel:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Harbor-Projekt in Registry erstellen
Sie müssen ein Harbor-Projekt in der Harbor-Registry-Instanz erstellen, um Ihre Container-Images zu verwalten:
Console
Klicken Sie auf der Seite Harbor Container Registry auf Create A Harbor Project.
Geben Sie den Namen des Projekts ein.
Klicken Sie auf Erstellen.
Legen Sie den Namen des Harbor-Projekts als Variable fest, die Sie später in der Anleitung verwenden können:
export HARBOR_PROJECT=HARBOR_PROJECT
gdcloud
Erstellen Sie das neue Harbor-Projekt:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=PROJECT \ --instance=INSTANCE_NAMEErsetzen Sie Folgendes:
HARBOR_PROJECT: der Name des zu erstellenden Harbor-Projekts.PROJECT: der Name des GDC-Projekts.INSTANCE_NAME: der Name der Harbor-Instanz.
Legen Sie den Namen des Harbor-Projekts als Variable fest, die Sie später in der Anleitung verwenden können:
export HARBOR_PROJECT=HARBOR_PROJECT
Docker konfigurieren
Führen Sie die folgenden Schritte aus, um Docker in Ihrer Harbor-Registry zu verwenden:
Konfigurieren Sie Docker so, dass Harbor as a Service vertraut wird. Weitere Informationen finden Sie unter Docker so konfigurieren, dass der Harbor-Root-CA vertraut wird.
Konfigurieren Sie die Docker-Authentifizierung für Harbor. Weitere Informationen finden Sie unter Docker-Authentifizierung für Harbor-Registry-Instanzen konfigurieren.
Kubernetes-Image-Pull-Secret erstellen
Da Sie ein privates Harbor-Projekt verwenden, müssen Sie ein Kubernetes-Image-Pull-Secret erstellen.
Fügen Sie ein Harbor-Projekt-Roboterkonto hinzu, das als Dienstkonto dient.
Wählen Sie in der Harbor-Konsole Ihr Harbor-Projekt aus.
Klicken Sie auf Roboterkonten.
Wählen Sie Neues Roboterkonto aus.
Geben Sie Ihrem neuen Roboterkonto einen Namen und legen Sie alle zusätzlichen Einstellungen fest.
Klicken Sie auf Hinzufügen.
Der Name und das Secret des Roboterkontos werden auf dem Erfolgsbildschirm angezeigt. Lassen Sie diesen Bildschirm geöffnet, um im nächsten Schritt darauf zurückgreifen zu können.
Weitere Informationen finden Sie in der Dokumentation zu Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
Melden Sie sich in einem neuen Terminalfenster mit dem Robot-Konto und dem Secret-Token Ihres Harbor-Projekts in Docker an:
docker login ${INSTANCE_URL}Geben Sie bei Aufforderung den Namen des Robot-Projekts als Nutzername und das Secret-Token als Passwort ein, die im vorherigen Schritt auf dem Erfolgsbildschirm der Harbor-Konsole angegeben wurden.
Legen Sie einen beliebigen Namen für das Image-Pull-Secret fest:
export SECRET=SECRETErstellen Sie das Secret, das für das Image-Pull erforderlich ist:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Ersetzen Sie
DOCKER_CONFIGdurch den Pfad zur Datei.docker/config.json.Prüfen Sie, ob das Secret im Namespace Ihres GDC-Projekts vorhanden ist:
kubectl get secrets -n ${NAMESPACE}Die Ausgabe sieht etwa so aus:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Container-Image per Push an die verwaltete Harbor-Registry übertragen
In dieser Anleitung laden Sie das Webserver-Image nginx herunter und übertragen es per Push in die verwaltete Harbor-Registry. Anschließend verwenden Sie es, um eine nginx-Beispiel-Webserver-Anwendung in einem freigegebenen Kubernetes-Cluster bereitzustellen. Die nginx-Webserver-Anwendung ist im öffentlichen Docker Hub-Repository verfügbar.
Rufen Sie das
nginx-Image von Docker Hub über ein externes Netzwerk auf Ihre lokale Workstation ab:docker pull nginxTaggen Sie das lokale Image mit dem Repository-Namen:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Übertragen Sie das Container-Image
nginxper Push in Ihre verwaltete Harbor-Registry:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Kubernetes-Cluster erstellen
Nachdem Sie das Container-Image nginx in der verwalteten Harbor-Registry gespeichert haben und darauf zugreifen können, erstellen Sie einen freigegebenen Kubernetes-Cluster, um den nginx-Webserver auszuführen.
Console
Wählen Sie im Navigationsmenü Kubernetes Engine > Cluster aus.
Klicken Sie auf Cluster erstellen.
Geben Sie im Feld Name einen Namen für den Cluster ein.
Wählen Sie die Zone aus, in der Sie Ihren Kubernetes-Cluster erstellen möchten. Ein Kubernetes-Cluster ist eine zonale Ressource und muss in jeder Zone manuell erstellt werden, um Hochverfügbarkeit zu gewährleisten.
Klicken Sie auf Projekt anhängen und wählen Sie ein Projekt aus, das Sie an Ihren Cluster anhängen möchten. Klicken Sie dann auf Speichern.
Klicken Sie auf Erstellen.
Warten Sie, bis der Cluster erstellt wurde. Wenn der Cluster verfügbar ist, wird neben dem Clusternamen der Status
READYangezeigt.
API
Erstellen Sie eine benutzerdefinierte
Cluster-Ressource und speichern Sie sie als YAML-Datei, z. B.cluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platformErsetzen Sie den Wert
CLUSTER_NAMEdurch den Namen des Clusters.Wenden Sie die benutzerdefinierte Ressource auf Ihre GDC-Instanz an:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Hängen Sie ein Projekt über die GDC Console an Ihren Kubernetes-Cluster an. Sie können derzeit kein Projekt über die API an den Cluster anhängen.
Weitere Informationen zum Erstellen eines freigegebenen Kubernetes-Clusters finden Sie unter Freigegebenen Cluster erstellen. Weitere Informationen zu den verfügbaren Clusterkonfigurationsoptionen finden Sie unter Kubernetes-Clusterkonfigurationen.
Beispielcontainer-Anwendung bereitstellen
Sie können jetzt das Container-Image nginx in Ihrem Kubernetes-Cluster bereitstellen.
Kubernetes stellt Anwendungen als Pod-Ressourcen dar. Dies sind skalierbare Einheiten, die einen oder mehrere Container enthalten. Der Pod ist die kleinste bereitstellbare Einheit in Kubernetes. In der Regel stellen Sie Pods als eine Reihe von Replikaten bereit, die gemeinsam im Cluster skaliert und verteilt werden können. Eine Möglichkeit, einen Satz von Replikaten bereitzustellen, besteht in der Nutzung eines Kubernetes-Deployment.
In diesem Abschnitt erstellen Sie ein Kubernetes-Deployment, um die Containeranwendung nginx auf Ihrem Cluster auszuführen. Dieses Deployment hat Replikate oder Pods. Ein Deployment-Pod enthält nur einen Container: das Container-Image nginx. Außerdem erstellen Sie eine Service-Ressource, die Clients eine stabile Möglichkeit bietet, Anfragen an die Pods Ihres Deployment zu senden.
Stellen Sie den nginx-Webserver in Ihrem Kubernetes-Cluster bereit:
Melden Sie sich beim Kubernetes-Cluster an und generieren Sie die kubeconfig-Datei mit einer Nutzeridentität. Legen Sie den kubeconfig-Pfad als Umgebungsvariable fest:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHErstellen Sie die benutzerdefinierten Kubernetes-Ressourcen
DeploymentundServiceund stellen Sie sie bereit:kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25 ports: - containerPort: 80 imagePullSecrets: - name: ${SECRET} --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 protocol: TCP type: LoadBalancer EOFPrüfen Sie, ob die Pods durch das Deployment erstellt wurden:
kubectl get pods -l app=nginx -n ${NAMESPACE}Die Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE nginx-deployment-1882529037-6p4mt 1/1 Running 0 1h nginx-deployment-1882529037-p29za 1/1 Running 0 1h nginx-deployment-1882529037-s0cmt 1/1 Running 0 1hErstellen Sie eine Netzwerkrichtlinie, um den gesamten Netzwerkverkehr zum Namespace zuzulassen:
kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOFExportieren Sie die IP-Adresse für den
nginx-Dienst:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`Testen Sie die IP-Adresse des
nginx-Servers mitcurl:curl http://$IP
Bereinigen
Löschen Sie die von Ihnen erstellten Ressourcen, um zu vermeiden, dass Ihrem GDC-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden.
Container-Image löschen
Wenn Sie das Container-Image aus Ihrer GDC mit Air Gap-Umgebung löschen möchten, können Sie entweder die Harbor-Instanz löschen, die das Image enthält, oder die Harbor-Instanz beibehalten und das einzelne Container-Image löschen.
So löschen Sie das Container-Image aus der verwalteten Harbor-Registry über die GDC-Konsole:
Wählen Sie im Navigationsmenü im Abschnitt CI/CD die Option Harbor Container Registry aus.
Klicken Sie auf den externen Link Zur Harbor-Instanz.
Löschen Sie das Container-Image über die Harbor-UI. Weitere Informationen finden Sie unter Harbor-Registry-Instanzen löschen.
Container-Anwendung löschen
Wenn Sie die bereitgestellte Container-App löschen möchten, löschen Sie entweder das GDC-Projekt, das die Ressourcen enthält, oder behalten Sie das GDC-Projekt bei und löschen Sie die einzelnen Ressourcen.
So löschen Sie die einzelnen Ressourcen:
Löschen Sie das
Service-Objekt für Ihre Container-Anwendung:kubectl delete service nginx-service -n ${NAMESPACE}Löschen Sie das
Deployment-Objekt für Ihre Container-Anwendung:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Wenn Sie einen Kubernetes-Testcluster nur für diese Anleitung erstellt haben, löschen Sie ihn:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}Dadurch werden die Ressourcen des Kubernetes-Clusters gelöscht, z. B. die Compute-Instanzen, Laufwerke und Netzwerkressourcen:
Nächste Schritte
Ressourcenhierarchie und Details zur Ressourcenisolation
Informationen zum Verwalten von Containern, die in Ihren Kubernetes-Clustern bereitgestellt werden, finden Sie in der Dokumentation zu Kubernetes-Containern für GDC.
Kubernetes-Cluster verwalten, nachdem Ihre Containerarbeitslasten bereitgestellt wurden
Best Practices für die Einrichtung von Containerarbeitslasten und anderen Dienstressourcen