Использование 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. Как только сертификат появится в вашем проекте, обратите внимание на его имя. Либо этот сертификат может быть указан в секрете 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 Platform. Будет создана связанная сетевая группа конечных точек, содержащая IP-адрес модуля внутреннего входящего контроллера NGINX на уровне кластера. После создания балансировщика нагрузки ваше развертывание ArcGIS Enterprise должно стать доступным и может быть создана запись A, которая перенаправляет клиентов с полного доменного имени, указанного при первоначальном развертывании, на подготовленный балансировщик нагрузки.

Примечание:

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

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