milvus-logo
LFAI
フロントページへ
  • 管理ガイド

GCP上のMilvusにレイヤー7ロードバランサーをセットアップする

Layer-4ロードバランサと比較すると、Layer-7ロードバランサはスマートなロードバランシングとキャッシュ機能を提供し、クラウドネイティブなサービスに最適です。

このガイドでは、Layer-4ロードバランサーの背後ですでに稼働しているMilvusクラスタにLayer-7ロードバランサーをセットアップする手順を説明します。

始める前に

Milvus設定の微調整

このガイドでは、GCP上のLayer-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ロードバランシングではバックエンドサービスのヘルスコンディションをプローブする必要がある。そのため、ヘルスチェックエンドポイントをラップする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はHTTP/2をベースに構築されたgRPCをネイティブとしている。そのため、Layer-7ロードバランサーとMilvus間の通信プロトコルとしてHTTP/2を使うことができる。

  • 2つ目の注釈について、

    MilvusはgRPCとHTTP/1上でヘルスチェックエンドポイントを提供するだけです。ヘルスチェックエンドポイントをラップするBackendConfigを設定し、Milvusサービスと関連付け、Layer-7ロードバランサーがこのエンドポイントにMilvusの健康状態をプローブする必要があります。

  • 3番目の注釈について、

    Ingressの作成後にネットワークエンドポイントグループ(NEG)を作成するよう求めている。NEG が GKE Ingress とともに使用される場合、Ingress コントローラーはロードバランサーのすべての側面の作成を容易にする。これには仮想IPアドレスの作成、転送ルール、ヘルスチェック、ファイアウォールルールなどが含まれる。詳しくはGoogle Cloudのドキュメントを参照してください。

TLS証明書の準備

TLSを動作させるには証明書が必要です。証明書を作成するには、自己管理型とGoogle管理型の2つの方法があります。

このガイドでは、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

certificateStatusが Activeに変わったら、ロードバランサーのセットアップは完了です。

レイヤ7ロードバランサを生成するためにIngressを作成する

以下のいずれかのスニペットで 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 クラスタに適用して Ingress を作成します。

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 を使って、先ほど作成した Layer-7 ロードバランサーの背後にある Milvus サービスへの接続を検証します。詳しい手順はこちらを読んでください。

接続パラメータは、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")
  • hostportの IP アドレスとポート番号は、Create an Ingress to generate a Layer-7 Load Balancer の最後に挙げたものと一致させる。
  • ドメイン名をホストIPアドレスにマッピングするDNSレコードを設定している場合は、hostのIPアドレスをドメイン名に置き換え、server_nameを省略します。

翻訳DeepL

Try Managed Milvus for Free

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

Get Started
フィードバック

このページは役に立ちましたか ?