Skip to main content

Nutzen von Google Kubernetes Engine Ingress für Application Load Balancer

Mit einem Ingress-Controller auf Clusterebene lässt sich Datenverkehr zu einer ArcGIS Enterprise-Bereitstellung auf Google Kubernetes Engine (GKE) weiterleiten. Weitere Informationen finden Sie unter Ingress-Controller auf Clusterebene.

Der durch diesen Workflow erstellte Classic Application Load Balancer beendet sowohl aktive als auch inaktive WebSocket-Verbindungen nach Ablauf des Timeouts für den Backend-Service. Dies kann zu einer Unterbrechung von Verbindungen über Clients führen, die Funktionen verwenden, für die WebSocket-Verbindungen erforderlich sind, wie z. B. Workflow-Management-Services oder Notebook-Services. Beendete WebSocket-Verbindungen können zwar wiederhergestellt werden, allerdings können durch die von Client-Anwendungen zurückgegebenen Timeout-Fehler Benutzer-Workflows unterbrochen werden. Weitere Informationen finden Sie in der Dokumentation zu Google Cloud Platform.

Bevor Sie einen Ingress-Controller auf Clusterebene einrichten, sollten Sie prüfen, ob die Vorteile dieser Option die möglichen Beeinträchtigungen der WebSocket-Verbindungen für Ihre Organisation überwiegen. Falls es wichtig ist, offene WebSocket-Verbindungen beizubehalten, erstellen Sie beim Ausführen des Bereitstellungsskripts für ArcGIS Enterprise on Kubernetes einen LoadBalancer-Service, anstatt einen Ingress-Controller auf Clusterebene zu verwenden.

Hinweis:

Schließen Sie diesen Workflow ab, bevor Sie eine ArcGIS Enterprise-Organisation erstellen. Sie können ArcGIS Enterprise Manager in einem Browser aufrufen, nachdem Sie einen Load Balancer bereitgestellt und konfiguriert haben.

Voraussetzungen

Beachten Sie die allgemeinen Voraussetzungen und stellen Sie sicher, dass die folgenden GKE-spezifischen Voraussetzungen erfüllt werden:

  • Sie müssen einen Cluster in GKE erstellt haben.

  • Das HTTP-Load-Balancing-Add-on muss im Cluster aktiviert worden sein.

  • Kubectl muss auf dem Client-Computer installiert sein. Stellen Sie sicher, dass Sie eine Verbindung mit dem Kubernetes-API-Server, der mit dem erstellten Cluster verknüpft ist, herstellen und Befehle an diesen ausgeben können.

  • Die Google Cloud Platform CLI muss auf dem Client-Computer installiert sein. Stellen Sie sicher, dass Sie sich bei dem Projekt authentifizieren können, in dem sich der GKE-Cluster befindet.

  • Sie müssen ein selbstverwaltetes Zertifikat im Google Cloud-Projekt erstellt haben. Notieren Sie sich den Namen des Zertifikats, nachdem es im Projekt erstellt wurde. Alternativ kann dieses Zertifikat für die spätere Verwendung in einem Kubernetes-Secret angegeben werden, das im Bereitstellungs-Namespace erstellt werden muss.

Hinzufügen von Annotationen zum Ingress-Controller-Service im Cluster

Fügen Sie dem Ingress-Controller-Service im Cluster nach der Erstbereitstellung von ArcGIS Enterprise auf Google Kubernetes Engine Annotationen hinzu.

  1. Führen Sie den folgenden Befehl aus, um dem bereitgestellten Service eine Annotation hinzuzufügen, die sicherstellt, dass TLS-Kommunikation verwendet wird:

    kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/app-protocols='{"https":"HTTPS"}'

  2. Fügen Sie dem Controller-Service im Cluster eine weitere Annotation hinzu, um eine Integritätsprüfung für die Organisation zu konfigurieren.

Für diesen Schritt können Sie BackendConfig CRD verwenden.

  1. Kopieren und speichern Sie die folgenden YAML-Daten in einen Texteditor auf der Client-Workstation.

    In diesem Beispiel wird die Datei unter dem Namen backendconfig.yaml gespeichert.

    apiVersion: cloud.google.com/v1
    kind: BackendConfig
    metadata:
      name: my-backendconfig
      namespace: <deploymentNamespace>
    spec:
      timeoutSec: 600
      healthCheck:
        type: HTTPS
        requestPath: /<context>/admin
        port: 443
    
    Hinweis:

    Der YAML des BackendConfig-Objekts können weitere Parameter für Integritätsprüfungen hinzugefügt werden, um die Organisationsanforderungen zu erfüllen. Ausführliche Informationen zu weiteren Parametern für Integritätsprüfungen, die der BackendConfig-Spezifikation hinzugefügt werden können, finden Sie in der Google Cloud-Dokumentation. Sie müssen den Wert für context im Feld requestPath ändern, damit er mit dem Kontextpfad übereinstimmt, der bei der Bereitstellung angegeben wurde.

  2. Erstellen Sie das BackendConfig-Objekt mit dem folgenden Befehl:

    kubectl apply -f backendconfig.yaml

  3. Fügen Sie dem Ingress-Controller-Service im Cluster die folgende Annotation hinzu:

    kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/backend-config='{"default": "my-backendconfig"}'

    Auf diese Weise wird sichergestellt, dass die zuvor erstellte Integritätsprüfung von dem Load Balancer verwendet wird, der durch den GKE-Ingress-Controller bereitgestellt wird.

Erstellen des Ingress-Objekts

Nachdem nun alle Annotationen dem Ingress-Controller-Service im Cluster hinzugefügt wurden, erstellen Sie das Ingress-Objekt mit den folgenden Schritten:

  1. Öffnen Sie die im Ordner layer-7-templates enthaltene Vorlage, oder kopieren Sie das folgende Beispiel in eine Datei auf Ihrem Client-Computer:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: arcgis-enterprise-ingress
      namespace: <deploymentNamespace>
      annotations:
        kubernetes.io/ingress.class: "gce"
        kubernetes.io/ingress.allow-http: "false"
        ingress.gcp.kubernetes.io/pre-shared-cert: "<certificateName>"
      labels:
        id: custom-ingress-resource
    spec:
      defaultBackend:
        service:
          name: arcgis-ingress-nginx
          port:
            number: 443
      rules:
      - host: <deploymentFQDN>
        http:
          paths:
          - path: /<context>
            pathType: Prefix
            backend:
              service:
                name: arcgis-ingress-nginx
                port:
                  number: 443
    
  2. Ersetzen Sie die folgenden Werte:

    • certificateName: Geben Sie den Namen des neu hochgeladenen Zertifikats an.

    • deploymentFQDN: Geben Sie den vollständig qualifizierten Domänennamen an, der bei der Bereitstellung festgelegt wurde.

    • namespace: Geben Sie den Namespace an, in dem Sie ArcGIS Enterprise on Kubernetes bereitgestellt haben.

    • context: Geben Sie den Kontext an, der bei der Bereitstellung festgelegt wurde.

  3. Speichern Sie die Datei auf der Client-Workstation.

    Beispiel: ingress.yaml.

  4. Führen Sie einen der folgenden Schritte aus, um das Ingress-Objekt zu erstellen:

    • Wenden Sie die Ingress-YAML-Daten mit dem folgenden Befehl auf den Cluster an:

      kubectl apply -f ingress.yaml

    • Wenn Sie das Bereitstellungsskript automatisch ausführen, legen Sie CLUSTER_INGRESS_CONTROLLER_YAML_FILENAME auf den Speicherort der Ingress-YAML-Datei fest.

Nach Abschluss dieses Workflows wird ein Ingress-Objekt mit dem Namen "arcgis-enterprise-ingress" erstellt. Nach der Erstellung dieses Ingress-Objekts stellt der GKE-Ingress-Controller einen Application Load Balancer im Google Cloud-Projekt bereit. Außerdem wird eine verknüpfte Netzwerk-Endpunktgruppe erstellt, die die Pod-IP-Adresse des Backend-NGINX-Ingress-Controllers im Cluster enthält. Nachdem der Load Balancer erstellt wurde, kann auf Ihre ArcGIS Enterprise-Bereitstellung zugegriffen werden. Daraufhin können Sie ein A-Record erstellen, mit dem Clients vom vollständig qualifizierten Domänennamen, der bei der ursprünglichen Bereitstellung angegeben wurde, zum bereitgestellten Load Balancer weitergeleitet werden.

Hinweis:

Die Bereitstellung von "arcgis-ingress-controller" muss möglicherweise aktualisiert werden, damit die Verbindung über den neu erstellten Ingress ordnungsgemäß hergestellt wird. Wenn Sie nach der Erstellung des Ingress eine Fehlermeldung beim Zugriff auf ArcGIS Enterprise Manager erhalten, versuchen Sie Folgendes:

kubectl rollout restart deployment/arcgis-ingress-controller -n <deploymentNamespace>