🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 管理指南
  • Home
  • Docs
  • 管理指南

  • 部署

  • 第 7 層負載平衡

  • GCP

為 GCP 上的 Milvus 設定第 7 層負載平衡器

與 Layer-4 負載平衡器相比,Layer-7 負載平衡器提供智慧型負載平衡和快取功能,是雲原生服務的最佳選擇。

本指南將教您如何為已在第 4 層負載平衡器後執行的 Milvus 集群設定第 7 層負載平衡器。

開始之前

調整 Milvus 配置

本指南假設您已在 GCP 的第 4 層負載平衡器後部署 Milvus 叢集

在為此 Milvus 叢集設定 Layer-7 負載平衡器之前,請執行下列指令移除 Layer-4 負載平衡器。

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

作為第 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 上的 Layer-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 原生於 gRPC,而 gRPC 是建基於 HTTP/2 的。因此,我們可以使用 HTTP/2 作為 Layer-7 負載平衡器與 Milvus 之間的通訊協定。

  • 至於第二個註解、

    Milvus 只透過 gRPC 和 HTTP/1 提供健康檢查端點。我們需要設定一個 BackendConfig 來包裝健康檢查端點,並將其與 Milvus 服務關聯,以便 Layer-7 負載平衡器探測此端點以瞭解 Milvus 的健康狀況。

  • 至於第三個註解、

    它要求在建立入口後建立網路端點群組 (NEG)。當 NEG 與 GKE Ingress 一起使用時,Ingress 控制器會促進負載平衡器各方面的建立。這包括建立虛擬 IP 位址、轉寄規則、健康檢查、防火牆規則等。如需詳細資訊,請參閱Google Cloud 文件

準備 TLS 憑證

TLS 需要憑證才能運作。有兩種建立憑證的方法,即自我管理和 Google 管理。

本指南使用my-release.milvus.io作為存取我們 Milvus 服務的網域名稱。

建立自我管理的憑證

執行下列指令來建立證書。

# 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,您就可以設定負載平衡器了。

建立一個 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 設定第七層負載平衡器。您可以執行

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 記錄將網域名稱對應到主機 IP 位址,請以網域名稱取代host中的 IP 位址,並省略server_name

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?