Menyiapkan Penyeimbang Beban Layer-7 untuk Milvus di GCP
Jika dibandingkan dengan penyeimbang beban Layer-4, penyeimbang beban Layer-7 menawarkan kemampuan penyeimbangan beban dan caching yang cerdas dan merupakan pilihan yang tepat untuk layanan cloud-native.
Panduan ini memandu Anda dalam menyiapkan penyeimbang beban Layer-7 untuk cluster Milvus yang sudah berjalan di belakang penyeimbang beban Layer-4.
Sebelum memulai
Sebuah proyek sudah ada di akun GCP Anda.
Untuk membuat proyek, lihat Membuat dan mengelola proyek. Nama proyek yang digunakan dalam panduan ini adalah milvus-testing-nonprod.
Anda telah menginstal gcloud CLI, kubectl, dan Helm secara lokal, atau memutuskan untuk menggunakan Cloud Shell berbasis peramban.
Anda telah menginisialisasi gcloud CLI dengan kredensial akun GCP Anda.
Anda telah menerapkan cluster Milvus di belakang penyeimbang beban Layer-4 pada GCP.
Mengubah konfigurasi Milvus
Panduan ini mengasumsikan bahwa Anda telah menggunakan cluster Milvus di belakang penyeimbang beban Layer-4 pada GCP.
Sebelum menyiapkan penyeimbang beban Layer-7 untuk klaster Milvus ini, jalankan perintah berikut untuk menghapus penyeimbang beban Layer-4.
helm upgrade my-release milvus/milvus --set service.type=ClusterIP
Sebagai layanan backend dari penyeimbang beban Layer-7, Milvus harus memenuhi persyaratan enkripsi tertentu agar dapat memahami permintaan HTTP/2 dari penyeimbang beban. Oleh karena itu, Anda perlu mengaktifkan TLS pada cluster Milvus Anda sebagai berikut.
helm upgrade my-release milvus/milvus -f tls.yaml
konten tls.yaml:
extraConfigFiles:
user.yaml: |+
common:
security:
tlsMode: 1
Menyiapkan titik akhir pemeriksaan kesehatan
Untuk memastikan ketersediaan layanan, penyeimbangan beban Layer-7 pada GCP memerlukan pemeriksaan kondisi kesehatan layanan backend. Oleh karena itu, kita perlu menyiapkan BackendConfig untuk membungkus titik akhir pemeriksaan kesehatan dan mengaitkan BackendConfig dengan layanan Milvus melalui anotasi.
Cuplikan berikut ini adalah pengaturan BackendConfig. Simpan sebagai backendconfig.yaml
untuk digunakan nanti.
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: my-release-backendconfig
namespace: default
spec:
healthCheck:
port: 9091
requestPath: /healthz
type: HTTP
Kemudian jalankan perintah berikut untuk membuat titik akhir pemeriksaan kesehatan.
kubectl apply -f backendconfig.yaml
Terakhir, perbarui anotasi pada layanan Milvus untuk meminta penyeimbang beban Layer-7 yang akan kita buat nanti untuk melakukan pemeriksaan kesehatan menggunakan endpoint yang baru saja dibuat.
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
Mengenai penjelasan pertama,
Milvus adalah asli dari gRPC, yang dibangun di atas HTTP/2. Oleh karena itu, kita dapat menggunakan HTTP/2 sebagai protokol komunikasi antara penyeimbang beban Layer-7 dan Milvus.
Mengenai penjelasan kedua,
Milvus hanya menawarkan endpoint pemeriksaan kesehatan melalui gRPC dan HTTP/1. Kita perlu menyiapkan BackendConfig untuk membungkus endpoint pemeriksaan kesehatan dan mengasosiasikannya dengan layanan Milvus sehingga penyeimbang beban Layer-7 menyelidiki endpoint ini untuk mengetahui kondisi kesehatan Milvus.
Mengenai anotasi ketiga,
Ini meminta pembuatan grup titik akhir jaringan (NEG) setelah Ingress dibuat. Ketika NEG digunakan dengan GKE Ingress, pengontrol Ingress memfasilitasi pembuatan semua aspek penyeimbang beban. Ini termasuk membuat alamat IP virtual, aturan penerusan, pemeriksaan kesehatan, aturan firewall, dan banyak lagi. Untuk detailnya, lihat dokumen Google Cloud.
Menyiapkan sertifikat TLS
TLS memerlukan sertifikat agar dapat berfungsi. Ada dua cara untuk membuat sertifikat, yaitu dikelola sendiri dan dikelola Google.
Panduan ini menggunakan my-release.milvus.io sebagai nama domain untuk mengakses layanan Milvus.
Membuat sertifikat yang dikelola sendiri
Jalankan perintah berikut ini untuk membuat sertifikat.
# 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
Kemudian, buatlah rahasia di dalam cluster GKE Anda dengan berkas-berkas ini untuk digunakan nanti.
kubectl create secret tls my-release-milvus-tls --cert=./tls.crt --key=./tls.key
Membuat sertifikat yang dikelola Google
Cuplikan berikut ini adalah pengaturan ManagedCertificate. Simpan sebagai managed-crt.yaml
untuk digunakan nanti.
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: my-release-milvus-tls
spec:
domains:
- my-release.milvus.io
Buat sertifikat terkelola dengan menerapkan pengaturan ke cluster GKE Anda sebagai berikut:
kubectl apply -f ./managed-crt.yaml
Hal ini dapat berlangsung selama beberapa saat. Anda dapat memeriksa kemajuannya dengan menjalankan
kubectl get -f ./managed-crt.yaml -o yaml -w
Keluarannya akan serupa dengan yang berikut ini:
status:
certificateName: mcrt-34446a53-d639-4764-8438-346d7871a76e
certificateStatus: Provisioning
domainStatus:
- domain: my-release.milvus.io
status: Provisioning
Setelah certificateStatus berubah menjadi Active, Anda siap untuk menyiapkan penyeimbang beban.
Membuat Ingress untuk menghasilkan Load Balancer Layer-7
Buat berkas YAML dengan salah satu cuplikan berikut ini.
Menggunakan sertifikat yang dikelola sendiri
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
Menggunakan sertifikat yang dikelola 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
Kemudian, Anda dapat membuat Ingress dengan menerapkan berkas tersebut ke cluster GKE Anda.
kubectl apply -f ingress.yaml
Sekarang, tunggu Google menyiapkan penyeimbang beban Layer-7. Anda dapat memeriksa kemajuannya dengan menjalankan
kubectl -f ./config/samples/ingress.yaml get -w
Keluarannya akan serupa dengan yang berikut ini:
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
Setelah alamat IP ditampilkan di bidang ADDRESS, penyeimbang beban Layer-7 siap digunakan. Baik port 80 dan port 443 ditampilkan pada output di atas. Ingat, Anda harus selalu menggunakan port 443 untuk kepentingan Anda.
Verifikasi koneksi melalui penyeimbang beban Layer-7
Panduan ini menggunakan PyMilvus untuk memverifikasi koneksi ke layanan Milvus di belakang penyeimbang beban Layer-7 yang baru saja kita buat. Untuk langkah-langkah terperinci, baca ini.
Perhatikan bahwa parameter koneksi bervariasi sesuai dengan cara yang Anda pilih untuk mengelola sertifikat di Siapkan sertifikat 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")
- Alamat IP dan nomor port pada host dan port harus sama dengan yang tercantum di akhir Membuat Ingress untuk menghasilkan Load Balancer Layer-7.
- Jika Anda telah menyiapkan catatan DNS untuk memetakan nama domain ke alamat IP host, ganti alamat IP pada host dengan nama domain dan hilangkan nama_server.