إعداد موازن تحميل من الطبقة 7 لميلفوس على GCP
عند مقارنته بموازن التحميل من الطبقة 4، فإن موازن التحميل من الطبقة 7 يوفر موازنة تحميل ذكية وإمكانيات تخزين مؤقت، وهو خيار رائع للخدمات السحابية الأصلية.
يرشدك هذا الدليل إلى كيفية إعداد موازن تحميل من الطبقة 7 لمجموعة Milvus التي تعمل بالفعل خلف موازن تحميل من الطبقة 4.
قبل البدء
مشروع موجود بالفعل في حساب GCP الخاص بك.
لإنشاء مشروع، راجع إنشاء المشاريع وإدارتها. اسم المشروع المستخدم في هذا الدليل هو milvus-testing-nonprod.
لقد قمتَ بتثبيت gcloud CLI و kubectl و Helm محليًا أو قررت استخدام Cloud Shell المستند إلى المتصفح بدلاً من ذلك.
قمت بتهيئة gcloud CLI باستخدام بيانات اعتماد حساب GCP الخاص بك.
قمت بنشر مجموعة Milvus خلف موازن تحميل من الطبقة الرابعة على GCP.
تعديل تكوينات Milvus
يفترض هذا الدليل أنك قمت بالفعل بنشر مجموعة Milvus خلف موازن تحميل من الطبقة 4 على GCP.
قبل إعداد موازن تحميل من الطبقة السابعة لمجموعة Milvus العنقودية هذه، قم بتشغيل الأمر التالي لإزالة موازن تحميل الطبقة الرابعة.
helm upgrade my-release milvus/milvus --set service.type=ClusterIP
كخدمة خلفية لموازن تحميل الطبقة 7، يجب على Milvus تلبية متطلبات تشفير معينة حتى يتمكن من فهم طلبات HTTP/2 من موازن التحميل. لذلك، تحتاج إلى تمكين TLS على مجموعة Milvus الخاصة بك على النحو التالي.
helm upgrade my-release milvus/milvus -f tls.yaml
محتوى tls.yaml
extraConfigFiles:
user.yaml: |+
common:
security:
tlsMode: 1
إعداد نقطة نهاية التحقق من الصحة
لضمان توافر الخدمة، تتطلب موازنة التحميل من الطبقة السابعة على GCP فحص الظروف الصحية للخدمة الخلفية. لذلك، نحن بحاجة إلى إعداد 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 لتطلب من موازن تحميل الطبقة السابعة الذي سننشئه لاحقًا إجراء فحوصات الصحة باستخدام نقطة النهاية التي تم إنشاؤها للتو.
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، وهو مبني على HTTP/2. لذلك، يمكننا استخدام HTTP/2 كبروتوكول اتصال بين موازن تحميل الطبقة السابعة وميلفوس.
أما بالنسبة للتعليق التوضيحي الثاني,
يقدم Milvus نقطة نهاية التحقق من الصحة فقط عبر gRPC و HTTP/1. نحتاج إلى إعداد BackendConfig لتغليف نقطة نهاية التحقق من الصحة وربطها بخدمة Milvus بحيث يقوم موازن تحميل الطبقة السابعة باستكشاف نقطة النهاية هذه لمعرفة الحالة الصحية ل Milvus.
أما بالنسبة للتعليق التوضيحي الثالث,
فهو يطلب إنشاء مجموعة نقطة نهاية الشبكة (NEG) بعد إنشاء نقطة نهاية الشبكة (Ingress). عند استخدام NEGs مع GKE 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
المقتطف التالي هو إعداد شهادة مُدارة. احفظه بصيغة 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 إلى نشط، تكون جاهزًا لإعداد موازن التحميل.
قم بإنشاء مدخل لإنشاء موازن تحميل من الطبقة السابعة
قم بإنشاء ملف 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
باستخدام الشهادات المُدارة ذاتيًا
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
ثم يمكنك إنشاء Ingress من خلال تطبيق الملف على مجموعة GKE الخاصة بك.
kubectl apply -f ingress.yaml
الآن، انتظر حتى تقوم جوجل بإعداد موازن تحميل الطبقة السابعة. يمكنك التحقق من التقدم عن طريق تشغيل
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 في حقل ADDRESS، يكون موازن تحميل Layer-7 جاهزًا للاستخدام. يتم عرض كل من المنفذ 80 والمنفذ 443 في الإخراج أعلاه. تذكر أنه يجب عليك دائمًا استخدام المنفذ 443 لمصلحتك.
تحقق من الاتصال من خلال موازن التحميل Layer-7
يستخدم هذا الدليل PyMilvus للتحقق من الاتصال بخدمة Milvus خلف موازن تحميل Layer-7 الذي أنشأناه للتو. للاطلاع على الخطوات التفصيلية، اقرأ هذا.
لاحظ أن معلمات الاتصال تختلف بالطريقة التي تختارها لإدارة الشهادات في إعداد شهادات 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 ورقم المنفذ في المضيف والمنفذ مع تلك المدرجة في نهاية إنشاء مدخل لإنشاء موازن تحميل من الطبقة السابعة.
- إذا كنت قد قمت بإعداد سجل DNS لتعيين اسم المجال إلى عنوان IP المضيف، استبدل عنوان IP في المضيف باسم المجال واحذف اسم_المخدم.