milvus-logo
LFAI
홈페이지
  • 관리 가이드
    • 배포

GCP에서 Milvus용 레이어 7 로드 밸런서 설정하기

레이어 4 로드 밸런서와 비교할 때, 레이어 7 로드 밸런서는 스마트 로드 밸런싱 및 캐싱 기능을 제공하며 클라우드 네이티브 서비스에 적합한 선택입니다.

이 가이드에서는 이미 레이어 4 로드 밸런서 뒤에서 실행 중인 Milvus 클러스터를 위한 레이어 7 로드 밸런서 설정 방법을 안내합니다.

시작하기 전에

Milvus 구성 조정

이 가이드에서는 GCP의 레이어 4 로드 밸런서 뒤에 Milvus 클러스터를 이미 배포했다고 가정합니다.

이 Milvus 클러스터에 대해 Layer-7 로드 밸런서를 설정하기 전에 다음 명령을 실행하여 Layer-4 로드 밸런서를 제거하세요.

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

Layer-7 로드 밸런서의 백엔드 서비스인 Milvus는 로드 밸런서의 HTTP/2 요청을 이해할 수 있도록 특정 암호화 요구 사항을 충족해야 합니다. 따라서 다음과 같이 Milvus 클러스터에서 TLS를 활성화해야 합니다.

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

tls.yaml 콘텐츠:

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

상태 확인 엔드포인트 설정

서비스 가용성을 보장하기 위해 GCP에서 레이어 7 부하 분산은 백엔드 서비스의 상태를 검사해야 합니다. 따라서 상태 확인 엔드포인트를 마무리하기 위해 백엔드 컨피그를 설정하고 어노테이션을 통해 백엔드 컨피그를 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는 HTTP/2를 기반으로 하는 gRPC를 기본으로 합니다. 따라서 HTTP/2를 Layer-7 로드밸런서와 Milvus 간의 통신 프로토콜로 사용할 수 있습니다.

  • 두 번째 주석에 관해서는,

    Milvus는 gRPC와 HTTP/1을 통한 상태 확인 엔드포인트만 제공합니다. 상태 확인 엔드포인트를 래핑하고 이를 Milvus 서비스와 연결하여 Layer-7 로드밸런서가 이 엔드포인트에서 Milvus의 상태 상태를 조사하도록 백엔드 컨피그(BackendConfig)를 설정해야 합니다.

  • 세 번째 어노테이션에 대해 설명합니다,

    인그레스가 생성된 후 네트워크 엔드포인트 그룹(NEG)을 생성하도록 요청합니다. NEG를 GKE 인그레스와 함께 사용하면 인그레스 컨트롤러가 로드 밸런서의 모든 측면을 쉽게 생성할 수 있습니다. 여기에는 가상 IP 주소, 포워딩 규칙, 상태 확인, 방화벽 규칙 등의 생성이 포함됩니다. 자세한 내용은 Google Cloud 문서를 참조하세요.

TLS 인증서 준비

TLS를 사용하려면 인증서가 필요합니다. 인증서를 만드는 방법에는 자체 관리형과 Google 관리형 두 가지가 있습니다.

이 가이드에서는 Milvus 서비스에 액세스하기 위한 도메인 이름으로 my-release.milvus.io를 사용합니다.

자체 관리 인증서 만들기

다음 명령을 실행하여 인증서를 만듭니다.

# 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

인증서 상태가 활성으로 바뀌면 로드 밸런서를 설정할 준비가 된 것입니다.

인그레스를 만들어 레이어 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
    

그런 다음 파일을 GKE 클러스터에 적용하여 인그레스를 생성할 수 있습니다.

kubectl apply -f ingress.yaml

이제 Google이 레이어 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

주소 필드에 IP 주소가 표시되면 레이어 7 로드 밸런서를 사용할 준비가 된 것입니다. 위의 출력에는 포트 80과 포트 443이 모두 표시됩니다. 항상 포트 443을 사용해야 한다는 점을 기억하세요.

Layer-7 로드 밸런서를 통한 연결 확인

이 가이드에서는 PyMilvus를 사용하여 방금 만든 Layer-7 로드 밸런서 뒤에 있는 Milvus 서비스에 대한 연결을 확인합니다. 자세한 단계는 여기를 참조하세요.

연결 매개변수는 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")
  • 호스트포트의 IP 주소와 포트 번호는 계층 7 로드 밸런서를 생성하려면 인그레스 만들기 끝에 나열된 것과 일치해야 합니다.
  • 도메인 이름을 호스트 IP 주소에 매핑하도록 DNS 레코드를 설정한 경우 호스트의 IP 주소를 도메인 이름으로 바꾸고 server_name을 생략합니다.

번역DeepL

Try Managed Milvus for Free

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

Get Started
피드백

이 페이지가 도움이 되었나요?