Использование Google Kubernetes Engine Ingress для балансировки нагрузки приложений

Входящий контроллер на уровне кластера может использоваться для маршрутизации трафика к развертыванию ArcGIS Enterprise на Google Kubernetes Engine (GKE). Дополнительные сведения см. в разделе Входящие контроллеры на уровне кластера.

Примечание:

Этот рабочий процесс должен быть выполнен до настройки организации ArcGIS Enterprise. К ArcGIS Enterprise Manager можно получить доступ из браузера после развертывания и настройки средства балансировки нагрузки.

Предварительные условия

Ознакомьтесь с предварительными условиями и убедитесь, что выполнены следующие требования, специфичные для GKE:

  • Нужно создать кластер в GKE.
  • В вашем кластере должно быть включено дополнение для балансировки нагрузки HTTP.
  • На клиентском компьютере. должен быть установлен Kubectl. Убедитесь, что вы можете подключаться и выдавать команды к серверу API Kubernetes, который связан с созданным вами кластером.
  • На клиентском компьютере должен быть установлен Google Cloud Platform CLI. Убедитесь, что вы можете пройти аутентификацию в проекте, в котором существует кластер GKE.
  • Вы должны создать самоуправляемый сертификат в рамках своего проекта Google Cloud. Как только сертификат появится в вашем проекте, обратите внимание на его имя. Либо этот сертификат может быть указан в секрете Kubernetes для последующего использования, который необходимо будет создать в пространстве имен развертывания.

Добавьте аннотации к сервису входящего контроллера уровня кластера

Добавьте аннотации к сервису входящего контроллера в кластер после первоначального развертывания ArcGIS Enterprise на движке Google Kubernetes Engine.

  1. Запустите следующую команду, чтобы добавить аннотацию к развернутому сервису, которая обеспечит использование TLS-связи:
    kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/app-protocols='{"https":"HTTPS"}'
    
  2. Добавьте дополнительную аннотацию к контроллеру сервиса кластера, чтобы настроить проверку работоспособности для вашей организации.

    Это можно сделать с помощью BackendConfig CRD.

    1. Скопируйте и сохраните следующие данные YAML в текстовом редакторе на вашей клиентской рабочей станции.

      В этом примере файл сохраняется как backendconfig.yaml.

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

      Примечание:

      Дополнительные параметры проверки работоспособности могут быть добавлены в объект YAML BackendConfig в соответствии с потребностями организации. Для ознакомления с дополнительными параметрами проверки работоспособности, которые можно добавить в спецификацию BackendConfig, см. документацию Google Cloud. Вам потребуется обновить значение для context в поле requestPath, чтобы оно соответствовало контекстному пути, который был указан в процессе развертывания.

    2. Создайте объект BackendConfig, используя следующую команду:
      kubectl apply -f backendconfig.yaml
      
    3. Сопроводите сервис входящего контроллера уровня кластера следующей аннотацией:
      kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/backend-config='{"default": "my-backendconfig"}'
      
      Это гарантирует, что ранее созданная проверка работоспособности будет использоваться балансировщиком нагрузки, который будет развернут входящим контроллером GKE.

Создайте входной объект Ingress

Теперь, когда аннотации добавлены к сервису входящего контроллера уровня кластера, создайте объект входа Ingress, выполнив следующие шаги:

  1. Скопируйте следующие данные YAML в файл на клиентском компьютере:
    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. Замените следующие значения:
    • certificateName — укажите имя вновь загруженного сертификата.
    • deploymentFQDN — укажите полное доменное имя, которое было задано при развертывании.
    • namespace — укажите пространство имен, в котором вы развернули ArcGIS Enterprise on Kubernetes.
    • context — укажите контекст, который был указан в процессе развертывания.
  3. Сохраните эти данные YAML в файл на вашем клиентском компьютере (например, в виде файла с именем ingress.yaml) и примените их к вашему кластеру, используя следующую команду:
    kubectl apply -f ingress.yaml
    

После завершения этого рабочего процесса будет создан входной объект с именем arcgis-enterprise-ingress. После создания этого входного объекта входящий контроллер GKE предоставит балансировщик нагрузки приложения в проекте Google Cloud. Будет создана связанная сетевая группа конечных точек, содержащая IP-адрес модуля внутреннего входящего контроллера NGINX на уровне кластера. После создания балансировщика нагрузки ваше развертывание ArcGIS Enterprise должно стать доступным и может быть создана запись A, которая перенаправляет клиентов с полного доменного имени, указанного при первоначальном развертывании, на подготовленный балансировщик нагрузки.

Примечание:

Возможно, потребуется обновить развертывание arcgis-ingress-controller, чтобы установить правильное подключение через вновь созданный Ingress. В случае получения сообщения об ошибке при доступе к ArcGIS Enterprise Manager после создания точки входа ingress, попробуйте выполнить следующее:

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