milvus-logo
LFAI
Home
  • Leitfaden für die Verwaltung

Einrichten eines Layer-7-Load-Balancers für Milvus auf GCP

Im Vergleich zu einem Layer-4-Load Balancer bietet ein Layer-7-Load Balancer intelligente Load Balancing- und Caching-Funktionen und ist eine gute Wahl für Cloud-native Dienste.

Diese Anleitung führt Sie durch die Einrichtung eines Layer-7 Load Balancers für einen Milvus-Cluster, der bereits hinter einem Layer-4 Load Balancer läuft.

Bevor Sie beginnen

Anpassen der Milvus-Konfigurationen

In dieser Anleitung wird davon ausgegangen, dass Sie bereits einen Milvus-Cluster hinter einem Layer-4-Loadbalancer auf GCP bereitgestellt haben.

Bevor Sie einen Layer-7-Loadbalancer für diesen Milvus-Cluster einrichten, führen Sie den folgenden Befehl aus, um den Layer-4-Loadbalancer zu entfernen.

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

Als Backend-Dienst des Layer-7-Loadbalancers muss Milvus bestimmte Verschlüsselungsanforderungen erfüllen, damit es die HTTP/2-Anfragen vom Loadbalancer verstehen kann. Daher müssen Sie TLS auf Ihrem Milvus-Cluster wie folgt aktivieren.

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

den tls.yaml-Inhalt:

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

Einrichten eines Gesundheitsprüfungs-Endpunkts

Um die Verfügbarkeit des Dienstes zu gewährleisten, erfordert der Layer-7-Lastenausgleich auf GCP die Überprüfung des Zustands des Backend-Dienstes. Daher müssen wir eine BackendConfig einrichten, um den Gesundheitsprüfungs-Endpunkt zu verpacken und die BackendConfig mit dem Milvus-Dienst durch Anmerkungen zu verknüpfen.

Das folgende Snippet zeigt die BackendConfig-Einstellungen. Speichern Sie ihn als backendconfig.yaml zur späteren Verwendung.

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

Führen Sie dann den folgenden Befehl aus, um den Gesundheitsprüfungsendpunkt zu erstellen.

kubectl apply -f backendconfig.yaml

Aktualisieren Sie schließlich die Anmerkungen des Milvus-Dienstes, um den Layer-7-Loadbalancer, den wir später erstellen werden, aufzufordern, Gesundheitsprüfungen über den soeben erstellten Endpunkt durchzuführen.

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
  • Was die erste Anmerkung betrifft,

    Milvus ist nativ für gRPC, das auf HTTP/2 aufgebaut ist. Daher können wir HTTP/2 als Kommunikationsprotokoll zwischen dem Layer-7 Load Balancer und Milvus verwenden.

  • Was die zweite Anmerkung betrifft,

    Milvus bietet nur den Endpunkt für die Gesundheitsprüfung über gRPC und HTTP/1 an. Wir müssen eine BackendConfig einrichten, um den Endpunkt für die Gesundheitsprüfung zu verpacken und ihn mit dem Milvus-Dienst zu verknüpfen, damit der Layer-7-Load-Balancer diesen Endpunkt auf den Gesundheitszustand von Milvus prüft.

  • Was die dritte Anmerkung betrifft,

    Sie fordert die Erstellung einer Netzwerkendpunktgruppe (NEG), nachdem ein Ingress erstellt wurde. Wenn NEGs mit GKE-Ingress verwendet werden, erleichtert der Ingress-Controller die Erstellung aller Aspekte des Load Balancer. Dazu gehören die Erstellung der virtuellen IP-Adresse, Weiterleitungsregeln, Zustandsprüfungen, Firewall-Regeln und vieles mehr. Einzelheiten finden Sie in den Google Cloud-Dokumenten.

Vorbereiten von TLS-Zertifikaten

TLS erfordert Zertifikate, um zu funktionieren. Es gibt zwei Möglichkeiten, Zertifikate zu erstellen, nämlich selbstverwaltete und von Google verwaltete.

In dieser Anleitung wird my-release.milvus.io als Domainname für den Zugriff auf unseren Milvus-Dienst verwendet.

Selbstverwaltete Zertifikate erstellen

Führen Sie die folgenden Befehle aus, um ein Zertifikat zu erstellen.

# 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

Erstellen Sie dann ein Geheimnis in Ihrem GKE-Cluster mit diesen Dateien zur späteren Verwendung.

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

Google-verwaltete Zertifikate erstellen

Das folgende Snippet ist eine ManagedCertificate-Einstellung. Speichern Sie sie als managed-crt.yaml für die spätere Verwendung.

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

Erstellen Sie ein verwaltetes Zertifikat, indem Sie die Einstellung wie folgt auf Ihren GKE-Cluster anwenden:

kubectl apply -f ./managed-crt.yaml

Dies kann eine Weile dauern. Sie können den Fortschritt überprüfen, indem Sie

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

Die Ausgabe sollte in etwa so aussehen wie die folgende:

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

Sobald certificateStatus auf Active wechselt, können Sie den Load Balancer einrichten.

Erstellen Sie einen Ingress, um einen Layer-7 Load Balancer zu generieren

Erstellen Sie eine YAML-Datei mit einem der folgenden Snippets.

  • Selbst verwaltete Zertifikate verwenden

    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
    
  • Verwendung von Google-verwalteten Zertifikaten

    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
    

Anschließend können Sie den Ingress erstellen, indem Sie die Datei auf Ihren GKE-Cluster anwenden.

kubectl apply -f ingress.yaml

Warten Sie nun darauf, dass Google den Layer-7-Loadbalancer einrichtet. Sie können den Fortschritt überprüfen, indem Sie

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

Die Ausgabe sollte in etwa so aussehen wie die folgende:

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

Sobald eine IP-Adresse im Feld ADDRESS angezeigt wird, ist der Layer-7-Load-Balancer einsatzbereit. In der obigen Ausgabe werden sowohl Port 80 als auch Port 443 angezeigt. Denken Sie daran, dass Sie zu Ihrem eigenen Wohl immer Port 443 verwenden sollten.

Überprüfen Sie die Verbindung durch den Layer-7-Load-Balancer

In dieser Anleitung wird PyMilvus verwendet, um die Verbindung zum Milvus-Dienst hinter dem soeben erstellten Layer-7-Load-Balancer zu überprüfen. Für detaillierte Schritte, lesen Sie dies.

Beachten Sie, dass die Verbindungsparameter von der Art und Weise abhängen, wie Sie die Zertifikate in Prepare TLS certificates verwalten.

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")
  • Die IP-Adresse und die Portnummer in host und port sollten mit denen übereinstimmen, die am Ende von Create an Ingress to generate a Layer-7 Load Balancer aufgeführt sind.
  • Wenn Sie einen DNS-Eintrag eingerichtet haben, um den Domänennamen der Host-IP-Adresse zuzuordnen, ersetzen Sie die IP-Adresse in host durch den Domänennamen und lassen Sie server_name weg.

Übersetzt vonDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?