Utilizar Google Kubernetes Engine Ingress para equilibradores de carga de aplicaciones

Puede utilizarse un controlador de entrada a nivel de clúster para enrutar el tráfico a una implementación de ArcGIS Enterprise en Google Kubernetes Engine (GKE). Para obtener más información, consulte Controladores de entrada a nivel de clúster.

Nota:

Este flujo de trabajo debe realizarse antes de configurar una organización de ArcGIS Enterprise. Se puede acceder a ArcGIS Enterprise Manager desde un navegador una vez que se ha implementado y configurado un equilibrador de carga.

Requisitos previos

Revise los requisitos previos generales y asegúrese de que se cumplen los siguientes requisitos previos específicos de GKE:

  • Debe haber creado un clúster en GKE.
  • El complemento HTTP Load Balancing debe estar activado en su clúster.
  • Kubectl debe estar instalado en su máquina cliente. Asegúrese de que puede conectarse y emitir comandos al servidor API de Kubernetes asociado al clúster creado.
  • El CLI de la Plataforma Google Cloud debe estar instalado en su máquina cliente. Asegúrese de que puede autenticarse en el proyecto en el que existe su clúster de GKE.
  • Debe haber creado un certificado autogestionado dentro de su proyecto de Google Cloud. Una vez que el certificado exista en su proyecto, tome nota de su nombre. Alternativamente, este certificado puede especificarse dentro de un Kubernetes Secret para su uso posterior, que deberá crearse dentro del espacio de nombres de implementación.

Agregar anotaciones al servicio de controlador de entrada en el clúster

Agregue anotaciones al servicio de controlador de entrada en el clúster tras la implementación inicial de ArcGIS Enterprise en Google Kubernetes Engine.

  1. Ejecute el siguiente comando para agregar una anotación al servicio implementado que garantizará el uso de la comunicación TLS:
    kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/app-protocols='{"https":"HTTPS"}'
    
  2. Agregue una anotación adicional al servicio de controlador en clúster para configurar una comprobación de estado para su organización.

    Esto puede hacerse mediante BackendConfig CRD.

    1. Copie y guarde los siguientes datos YAML en un editor de texto en su estación de trabajo cliente.

      En este ejemplo, el archivo se guarda como backendconfig.yaml.

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

      Nota:

      Se pueden agregar parámetros adicionales de comprobación de estado al objeto YAML BackendConfig para adaptarse a las necesidades de la organización. Para conocer los parámetros adicionales de comprobación de estado que pueden agregarse a la especificación BackendConfig, consulte la documentación de Google Cloud. Deberá actualizar el valor de context en el campo requestPath para que coincida con la ruta de contexto que se especificó durante la implementación.

    2. Cree el objeto BackendConfig mediante el siguiente comando:
      kubectl apply -f backendconfig.yaml
      
    3. Anote el servicio de controlador de entrada en el clúster con la siguiente anotación:
      kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/backend-config='{"default": "my-backendconfig"}'
      
      Esto garantizará que el equilibrador de carga que implementará el controlador de entrada de GKE utilice la comprobación de estado creada anteriormente.

Crear el objeto Ingress

Una vez agregadas las anotaciones al servicio del controlador de entrada en el clúster, cree el objeto Ingress mediante los siguientes pasos:

  1. Copie los siguientes datos YAML en un archivo de su máquina cliente:
    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>"
    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. Sustituya los siguientes valores:
    • certificateName: proporcione el nombre del nuevo certificado cargado.
    • deploymentFQDN: proporcione el nombre de dominio completo que se especificó durante la implementación.
    • namespace: proporcione el espacio de nombres en el que ha implementado ArcGIS Enterprise on Kubernetes.
    • context: proporcione el contexto que se especificó durante la implementación.
  3. Guarde estos datos YAML en un archivo en su máquina cliente (por ejemplo, como un archivo llamado ingress.yaml), y aplíquelo a su clúster mediante el siguiente comando:
    kubectl apply -f ingress.yaml
    

Una vez completado este flujo de trabajo, se crea un objeto Ingress llamado arcgis-enterprise-ingress. Al crear este objeto Ingress, el GKE Ingress Controller aprovisionará un equilibrador de carga de aplicaciones en su proyecto de Google Cloud. Se creará un grupo de extremos de red asociado, que contendrá la dirección IP del pod del controlador de entrada NGINX en el clúster. Una vez creado el equilibrador de carga, su implementación de ArcGIS Enterprise debería ser accesible y puede crearse un registro A que dirija a los clientes desde el nombre de dominio completamente cualificado, especificado durante la implementación inicial al equilibrador de carga aprovisionado.

Nota:

Puede que sea necesario actualizar la implementación de arcgis-ingress-controller para establecer una conexión adecuada a través del Ingress recién creado. Si recibe un error al acceder a ArcGIS Enterprise Manager después de crear el Ingress, intente ejecutar lo siguiente:

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