🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Руководство по администрированию
  • Home
  • Docs
  • Руководство по администрированию

  • Развертывание

  • На облаках

  • Балансировка нагрузки на уровне 7

  • GCP

Настройка балансировщика нагрузки Layer-7 для Milvus на GCP

По сравнению с балансировщиком нагрузки уровня 4, балансировщик нагрузки уровня 7 предлагает интеллектуальную балансировку нагрузки и возможности кэширования и является отличным выбором для облачных нативных сервисов.

В этом руководстве вы узнаете, как настроить балансировщик нагрузки уровня 7 для кластера Milvus, уже работающего за балансировщиком нагрузки уровня 4.

Перед началом работы

Настройка конфигураций Milvus

Это руководство предполагает, что вы уже развернули кластер Milvus за балансировщиком нагрузки Layer-4 на GCP.

Перед настройкой балансировщика нагрузки Layer-7 для этого кластера Milvus выполните следующую команду, чтобы удалить балансировщик нагрузки Layer-4.

helm upgrade my-release milvus/milvus --set service.type=ClusterIP

Как внутренняя служба балансировщика нагрузки Layer-7, Milvus должен отвечать определенным требованиям к шифрованию, чтобы он мог понимать HTTP/2-запросы от балансировщика нагрузки. Поэтому вам необходимо включить TLS на кластере Milvus следующим образом.

helm upgrade my-release milvus/milvus -f tls.yaml

содержимое tls.yaml:

extraConfigFiles:
  user.yaml: |+
    common:
      security:
        tlsMode: 1

Настройка конечной точки проверки работоспособности

Чтобы обеспечить доступность сервиса, балансировка нагрузки Layer-7 на GCP требует проверки состояния здоровья внутреннего сервиса. Поэтому нам нужно создать BackendConfig, чтобы обернуть конечную точку проверки состояния здоровья, и связать BackendConfig с сервисом Milvus с помощью аннотаций.

Следующий фрагмент представляет собой настройки BackendConfig. Сохраните его как backendconfig.yaml для последующего использования.

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: my-release-backendconfig
  namespace: default
spec:
  healthCheck:
    port: 9091
    requestPath: /healthz
    type: HTTP

Затем выполните следующую команду для создания конечной точки проверки здоровья.

kubectl apply -f backendconfig.yaml

Наконец, обновите аннотации службы Milvus, чтобы попросить балансировщик нагрузки Layer-7, который мы создадим позже, выполнять проверку здоровья с помощью только что созданной конечной точки.

kubectl annotate service my-release-milvus \
    cloud.google.com/app-protocols='{"milvus":"HTTP2"}' \
    cloud.google.com/backend-config='{"default": "my-release-backendconfig"}' \
    cloud.google.com/neg='{"ingress": true}' --overwrite
  • Что касается первой аннотации,

    Milvus является родным для gRPC, который построен на HTTP/2. Поэтому мы можем использовать HTTP/2 в качестве протокола связи между балансировщиком нагрузки Layer-7 и Milvus.

  • Что касается второй аннотации,

    Milvus предлагает только конечную точку проверки здоровья через gRPC и HTTP/1. Нам нужно настроить BackendConfig для обертывания конечной точки проверки здоровья и связать ее с сервисом Milvus, чтобы балансировщик нагрузки Layer-7 запрашивал эту конечную точку о состоянии здоровья Milvus.

  • Что касается третьей аннотации,

    В ней предлагается создать группу конечных точек сети (NEG) после создания ингресса. Когда NEG используются с GKE Ingress, контроллер Ingress облегчает создание всех аспектов балансировщика нагрузки. Сюда входит создание виртуального IP-адреса, правил переадресации, проверок работоспособности, правил брандмауэра и т. д. Подробности см. в документах Google Cloud.

Подготовьте сертификаты TLS

Для работы TLS требуются сертификаты. Существует два способа создания сертификатов: самоуправляемый и управляемый Google.

В этом руководстве используется my-release.milvus.io в качестве доменного имени для доступа к нашему сервису Milvus.

Создание самоуправляемых сертификатов

Выполните следующие команды для создания сертификата.

# Generates a tls.key.
openssl genrsa -out tls.key 2048

# Creates a certificate and signs it with the preceding key.
openssl req -new -key tls.key -out tls.csr \
    -subj "/CN=my-release.milvus.io"

openssl x509 -req -days 99999 -in tls.csr -signkey tls.key \
    -out tls.crt

Затем создайте секрет в кластере GKE с этими файлами для последующего использования.

kubectl create secret tls my-release-milvus-tls --cert=./tls.crt --key=./tls.key

Создание управляемых сертификатов Google

Следующий фрагмент представляет собой настройку ManagedCertificate. Сохраните его как managed-crt.yaml для последующего использования.

apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
  name: my-release-milvus-tls
spec:
  domains:
    - my-release.milvus.io

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

kubectl apply -f ./managed-crt.yaml

Это может занять некоторое время. Вы можете проверить прогресс, выполнив команду

kubectl get -f ./managed-crt.yaml -o yaml -w

Результат должен быть похож на следующий:

status:
  certificateName: mcrt-34446a53-d639-4764-8438-346d7871a76e
  certificateStatus: Provisioning
  domainStatus:
  - domain: my-release.milvus.io
    status: Provisioning

Как только certificateStatus станет активным, вы будете готовы к настройке балансировщика нагрузки.

Создание ингресса для генерации балансировщика нагрузки уровня 7

Создайте YAML-файл с одним из следующих фрагментов.

  • Использование самоуправляемых сертификатов

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-release-milvus
      namespace: default
    spec:
      tls:
      - hosts:
        - my-release.milvus.io
        secretName: my-release-milvus-tls
      rules:
      - host: my-release.milvus.io
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-release-milvus
                port:
                  number: 19530
    
  • Использование управляемых Google сертификатов

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-release-milvus
      namespace: default
      annotations:
        networking.gke.io/managed-certificates: "my-release-milvus-tls"
    spec:
      rules:
      - host: my-release.milvus.io
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-release-milvus
                port:
                  number: 19530
    

Затем вы можете создать Ingress, применив этот файл к кластеру GKE.

kubectl apply -f ingress.yaml

Теперь подождите, пока Google настроит балансировщик нагрузки Layer-7. Вы можете проверить прогресс, выполнив команду

kubectl  -f ./config/samples/ingress.yaml get -w

Результат должен быть похож на следующий:

NAME                CLASS    HOSTS                  ADDRESS   PORTS   AGE
my-release-milvus   <none>   my-release.milvus.io             80      4s
my-release-milvus   <none>   my-release.milvus.io   34.111.144.65   80, 443   41m

Как только в поле ADDRESS появится IP-адрес, балансировщик нагрузки Layer-7 будет готов к работе. В приведенном выше выводе отображаются оба порта - 80 и 443. Помните, что для вашего же блага всегда следует использовать порт 443.

Проверка соединения через балансировщик нагрузки Layer-7

В этом руководстве используется PyMilvus для проверки соединения с сервисом Milvus за балансировщиком нагрузки Layer-7, который мы только что создали. Подробные шаги описаны здесь.

Обратите внимание, что параметры соединения зависят от выбранного вами способа управления сертификатами в Prepare TLS certificates.

from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)

# For self-managed certificates, you need to include the certificate in the parameters used to set up the connection.
connections.connect("default", host="34.111.144.65", port="443", server_pem_path="tls.crt", secure=True, server_name="my-release.milvus.io")

# For Google-managed certificates, there is not need to do so.
connections.connect("default", host="34.111.144.65", port="443", secure=True, server_name="my-release.milvus.io")
  • IP-адрес и номер порта в параметрах host и port должны совпадать с теми, что указаны в конце раздела Create an Ingress to generate a Layer-7 Load Balancer.
  • Если вы настроили DNS-запись для сопоставления доменного имени с IP-адресом хоста, замените IP-адрес в host на доменное имя и опустите server_name.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?