milvus-logo
LFAI
Home
  • Guia de Administração

Configurar um balanceador de carga de camada 7 para Milvus no GCP

Quando comparado a um balanceador de carga de camada 4, um balanceador de carga de camada 7 oferece recursos inteligentes de balanceamento de carga e armazenamento em cache e é uma ótima opção para serviços nativos da nuvem.

Este guia orienta-o na configuração de um balanceador de carga de camada 7 para um cluster Milvus já em execução atrás de um balanceador de carga de camada 4.

Antes de começar

Ajustar as configurações do Milvus

Este guia pressupõe que você já implantou um cluster do Milvus por trás de um balanceador de carga de Camada 4 no GCP.

Antes de configurar um balanceador de carga da Camada 7 para esse cluster do Milvus, execute o seguinte comando para remover o balanceador de carga da Camada 4.

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

Como serviço de back-end do balanceador de carga de camada 7, o Milvus tem de cumprir determinados requisitos de encriptação para que possa compreender os pedidos HTTP/2 do balanceador de carga. Portanto, é necessário habilitar o TLS no cluster do Milvus da seguinte forma.

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

o conteúdo de tls.yaml:

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

Configurar um ponto de extremidade de verificação de integridade

Para garantir a disponibilidade do serviço, o balanceamento de carga da camada 7 no GCP requer a sondagem das condições de saúde do serviço de back-end. Portanto, precisamos configurar um BackendConfig para envolver o ponto de extremidade de verificação de integridade e associar o BackendConfig ao serviço Milvus por meio de anotações.

O snippet a seguir é a configuração do BackendConfig. Guarde-o como backendconfig.yaml para utilização posterior.

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

Em seguida, execute o seguinte comando para criar o ponto de extremidade de verificação de integridade.

kubectl apply -f backendconfig.yaml

Por fim, atualize as anotações do serviço Milvus para solicitar ao balanceador de carga Layer-7 que criaremos mais tarde que realize verificações de integridade usando o endpoint que acabamos de criar.

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
  • Quanto à primeira anotação,

    O Milvus é nativo do gRPC, que é construído com base no HTTP/2. Portanto, podemos usar o HTTP/2 como protocolo de comunicação entre o balanceador de carga Layer-7 e o Milvus.

  • Quanto à segunda anotação,

    O Milvus só oferece o ponto de extremidade de verificação da saúde através de gRPC e HTTP/1. Precisamos de configurar um BackendConfig para envolver o ponto de extremidade de verificação da saúde e associá-lo ao serviço Milvus, de modo a que o equilibrador de carga da camada 7 sondasse este ponto de extremidade para saber o estado de saúde do Milvus.

  • Quanto à terceira anotação,

    Solicita a criação de um grupo de pontos finais de rede (NEG) após a criação de um Ingress. Quando os NEGs são utilizados com o GKE Ingress, o controlador Ingress facilita a criação de todos os aspectos do equilibrador de carga. Isso inclui a criação do endereço IP virtual, regras de encaminhamento, verificações de integridade, regras de firewall e muito mais. Para obter detalhes, consulte os documentos do Google Cloud.

Preparar certificados TLS

O TLS requer certificados para funcionar. Há duas maneiras de criar certificados: autogerenciados e gerenciados pelo Google.

Este guia utiliza my-release.milvus.io como nome de domínio para aceder ao nosso serviço Milvus.

Criar certificados autogeridos

Execute os seguintes comandos para criar um certificado.

# 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

Em seguida, crie um segredo no seu cluster GKE com estes ficheiros para utilização posterior.

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

Criar certificados geridos pelo Google

O seguinte snippet é uma configuração ManagedCertificate. Guarde-o como managed-crt.yaml para utilização posterior.

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

Crie um certificado gerido aplicando a definição ao seu cluster GKE da seguinte forma:

kubectl apply -f ./managed-crt.yaml

Isto pode demorar algum tempo. Pode verificar o progresso executando

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

O resultado deve ser semelhante ao seguinte:

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

Quando certificateStatus mudar para Active, estará pronto para configurar o balanceador de carga.

Criar um Ingress para gerar um balanceador de carga da camada 7

Crie um arquivo YAML com um dos seguintes snippets.

  • Usando certificados autogerenciados

    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
    
  • Usando certificados gerenciados pelo 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
    

Em seguida, pode criar o Ingress aplicando o ficheiro ao seu cluster GKE.

kubectl apply -f ingress.yaml

Agora, aguarde que o Google configure o balanceador de carga da camada 7. Pode verificar o progresso executando

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

A saída deve ser semelhante à seguinte:

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

Assim que for apresentado um endereço IP no campo ENDEREÇO, o balanceador de carga da camada 7 está pronto a ser utilizado. Tanto a porta 80 quanto a porta 443 são exibidas na saída acima. Lembre-se de que você deve sempre usar a porta 443 para seu próprio bem.

Verificar a conexão através do balanceador de carga Layer-7

Este guia usa o PyMilvus para verificar a conexão com o serviço Milvus por trás do balanceador de carga Layer-7 que acabamos de criar. Para obter etapas detalhadas, leia isto.

Observe que os parâmetros de conexão variam de acordo com a maneira escolhida para gerenciar os certificados em Preparar certificados TLS.

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")
  • O endereço IP e o número da porta em host e porta devem corresponder aos listados no final de Criar um Ingress para gerar um balanceador de carga de camada 7.
  • Se tiver configurado um registo DNS para mapear o nome de domínio para o endereço IP do anfitrião, substitua o endereço IP em anfitrião pelo nome de domínio e omita nome_do_servidor.

Traduzido porDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?