milvus-logo
LFAI
Casa
  • Guida all'amministrazione

Configurare un bilanciatore di carico Layer-7 per Milvus su GCP

Rispetto a un bilanciatore di carico Layer-4, un bilanciatore di carico Layer-7 offre funzionalità intelligenti di bilanciamento del carico e di caching ed è un'ottima scelta per i servizi cloud-nativi.

Questa guida spiega come configurare un bilanciatore di carico Layer-7 per un cluster Milvus già in esecuzione dietro a un bilanciatore di carico Layer-4.

Prima di iniziare

Modificare le configurazioni di Milvus

Questa guida presuppone che abbiate già implementato un cluster Milvus dietro un bilanciatore di carico Layer-4 su GCP.

Prima di impostare un bilanciatore di carico Layer-7 per questo cluster Milvus, eseguire il seguente comando per rimuovere il bilanciatore di carico Layer-4.

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

Come servizio backend del bilanciatore di carico Layer-7, Milvus deve soddisfare alcuni requisiti di crittografia per poter comprendere le richieste HTTP/2 del bilanciatore di carico. Pertanto, è necessario abilitare TLS sul cluster Milvus come segue.

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

il contenuto di tls.yaml:

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

Impostare un endpoint di controllo dello stato di salute

Per garantire la disponibilità del servizio, il bilanciamento del carico Layer-7 su GCP richiede di sondare le condizioni di salute del servizio backend. Pertanto, è necessario impostare un BackendConfig per avvolgere l'endpoint di controllo dello stato di salute e associare il BackendConfig al servizio Milvus tramite annotazioni.

Il seguente frammento è l'impostazione di BackendConfig. Salvarlo come backendconfig.yaml per utilizzarlo in seguito.

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

Eseguire quindi il comando seguente per creare l'endpoint di controllo dello stato di salute.

kubectl apply -f backendconfig.yaml

Infine, aggiornare le annotazioni del servizio Milvus per chiedere al bilanciatore di carico Layer-7 che creeremo in seguito di eseguire i controlli sullo stato di salute usando l'endpoint appena creato.

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
  • Per quanto riguarda la prima annotazione,

    Milvus è nativo di gRPC, che si basa su HTTP/2. Pertanto, possiamo usare HTTP/2. Pertanto, possiamo usare HTTP/2 come protocollo di comunicazione tra il bilanciatore di carico Layer-7 e Milvus.

  • Per quanto riguarda la seconda annotazione,

    Milvus offre solo l'endpoint di controllo dello stato di salute tramite gRPC e HTTP/1. Dobbiamo impostare un BackendConfig per avvolgere l'endpoint di controllo dello stato di salute e associarlo al servizio Milvus, in modo che il bilanciatore di carico Layer-7 sondi questo endpoint per le condizioni di salute di Milvus.

  • Per quanto riguarda la terza annotazione,

    Chiede la creazione di un gruppo di endpoint di rete (NEG) dopo la creazione di un Ingress. Quando si utilizzano i NEG con GKE Ingress, il controller Ingress facilita la creazione di tutti gli aspetti del bilanciatore di carico. Ciò include la creazione dell'indirizzo IP virtuale, delle regole di inoltro, dei controlli di salute, delle regole del firewall e altro ancora. Per i dettagli, consultare i documenti di Google Cloud.

Preparare i certificati TLS

TLS richiede certificati per funzionare. Esistono due modi per creare i certificati: quelli autogestiti e quelli gestiti da Google.

Questa guida utilizza my-release.milvus.io come nome di dominio per accedere al servizio Milvus.

Creare certificati autogestiti

Eseguire i seguenti comandi per creare un certificato.

# 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

Quindi create un segreto nel vostro cluster GKE con questi file per un uso successivo.

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

Creare certificati gestiti da Google

Il seguente snippet è un'impostazione di ManagedCertificate. Salvarlo come managed-crt.yaml per un uso successivo.

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

Creare un certificato gestito applicando l'impostazione al cluster GKE come segue:

kubectl apply -f ./managed-crt.yaml

L'operazione potrebbe durare un po'. È possibile verificare i progressi eseguendo

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

L'output dovrebbe essere simile al seguente:

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

Quando certificateStatus diventa Active, si è pronti a configurare il bilanciatore di carico.

Creare un ingress per generare un bilanciatore di carico Layer-7

Creare un file YAML con uno dei seguenti snippet.

  • Utilizzo di certificati autogestiti

    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
    
  • Utilizzo di certificati gestiti da 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
    

Quindi è possibile creare l'Ingress applicando il file al cluster GKE.

kubectl apply -f ingress.yaml

A questo punto, attendere che Google configuri il bilanciatore di carico Layer-7. È possibile verificare i progressi eseguendo

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

L'output dovrebbe essere simile al seguente:

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

Una volta visualizzato un indirizzo IP nel campo ADDRESS, il bilanciatore di carico Layer-7 è pronto all'uso. Nell'output di cui sopra sono visualizzate sia la porta 80 che la porta 443. Ricordare che si dovrebbe sempre usare la porta 443 per il proprio bene.

Verifica della connessione attraverso il bilanciatore di carico Layer-7

Questa guida utilizza PyMilvus per verificare la connessione al servizio Milvus dietro il bilanciatore di carico Layer-7 appena creato. Per i passi dettagliati, leggete qui.

Si noti che i parametri di connessione variano a seconda del modo in cui si sceglie di gestire i certificati in 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")
  • L'indirizzo IP e il numero di porta in Host e Porta devono corrispondere a quelli elencati alla fine di Creare un ingresso per generare un bilanciatore di carico Layer-7.
  • Se si è impostato un record DNS per mappare il nome di dominio all'indirizzo IP dell'host, sostituire l'indirizzo IP in host con il nome di dominio e omettere nome_server.

Tradotto daDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?