
Istio هو أداة ملائمة لتوصيل وحماية ومراقبة التطبيقات الموزعة. يستخدم Istio مجموعة متنوعة من التقنيات لبدء تشغيل البرامج وإدارتها على نطاق واسع ، بما في ذلك حاويات لرمز تطبيق التعبئة والتغليف والتبعيات للنشر ، و Kubernetes لإدارة هذه الحاويات. لذلك ، للعمل مع Istio ، يجب أن تعرف كيف يعمل تطبيق مع العديد من الخدمات على أساس هذه التقنيات دون Istio. إذا كنت تعرف هذه الأدوات والمفاهيم بالفعل ، فلا تتردد في تخطي هذا الدليل والانتقال مباشرةً إلى تثبيت Istio على Google Kubernetes Engine (GKE) أو تثبيت Istio على GKE extension.
هذا دليل خطوة بخطوة حيث سنلقي نظرة على العملية برمتها من شفرة المصدر إلى حاوية على GKE ، حتى تحصل على فكرة أساسية عن هذه التقنيات باستخدام مثال. سترى أيضًا كيف يستفيد Istio من هذه التقنيات. من المفترض أنك لا تعرف أي شيء عن الحاويات أو Kubernetes أو شبكة الخدمة أو Istio.
المهام
في هذا الدليل ، سوف تكمل المهام التالية:
- استكشاف تطبيق hello world البسيط مع العديد من الخدمات.
- تشغيل التطبيق من شفرة المصدر.
- تعبئة التطبيق في حاويات.
- إنشاء كتلة Kubernetes
- نشر الحاويات إلى كتلة.
قبل أن تبدأ
اتبع التعليمات لتمكين واجهة برمجة تطبيقات Kubernetes Engine:
- انتقل إلى صفحة Kubernetes Engine في وحدة التحكم في Google Cloud Platform.
- إنشاء أو تحديد مشروع.
- انتظر API والخدمات ذات الصلة لتشغيل. قد يستغرق هذا عدة دقائق.
- تأكد من تكوين الفواتير لمشروع Google Cloud Platform. تعرف على كيفية تمكين الفوترة .
في هذا الدليل ، يمكنك استخدام Cloud Shell ، الذي يعد الجهاز الظاهري g1 الصغير في Google Compute Engine مع Linux المستندة إلى دبيان أو كمبيوتر Linux أو macOS.
الخيار أ: استخدام Cloud Cloud
فوائد استخدام Cloud Shell:
- بيئات التطوير Python 2 و Python 3 (بما في ذلك virtualenv ) مخصصة بالكامل.
- أدوات سطر الأوامر gcloud و docker و git و kubectl التي سنستخدمها مثبتة بالفعل.
- لديك العديد من برامج تحرير النصوص للاختيار من بينها:
- محرر الكود الذي يفتح مع أيقونة التحرير في الجزء العلوي من نافذة Cloud Shell.
- Emacs أو Vim أو Nano التي تفتح من سطر الأوامر في Cloud Shell.
لاستخدام Cloud Shell :
- انتقل إلى وحدة تحكم GCP.
- انقر فوق الزر Activate Cloud Shell في الجزء العلوي من نافذة وحدة تحكم GCP.

في الجزء السفلي من وحدة التحكم GCP ، في نافذة جديدة ، يتم فتح جلسة Cloud Shell بسطر الأوامر.

الخيار ب: استخدام أدوات سطر الأوامر محليا
إذا كنت ستعمل على جهاز كمبيوتر يعمل بنظام Linux أو macOS ، فأنت بحاجة إلى تكوين المكونات التالية وتثبيتها:
قم بإعداد بيئة تطوير Python 3 و Python 2 الخاصة بك .
قم بتثبيت Cloud SDK باستخدام أداة سطر الأوامر gcloud .
قم بتثبيت kubectl ، أداة سطر أوامر للعمل مع Kubernetes .
gcloud components install kubectl
تثبيت Docker Community Edition (CE) . ستستخدم أداة سطر الأوامر docker لإنشاء صور حاوية لتطبيق نموذج.
قم بتثبيت أداة التحكم في إصدار Git للحصول على تطبيق نموذج باستخدام GitHub.
تحميل رمز عينة
قم بتنزيل كود مصدر helloserver :
git clone https://github.com/GoogleCloudPlatform/istio-samples
انتقل إلى دليل رمز عينة:
cd istio-samples/sample-apps/helloserver
استكشاف تطبيق متعدد الخدمات
تطبيق العينة مكتوب في Python ويتكون من عنصرين يتفاعلان مع REST :
- الخادم : خادم بسيط مع نقطة نهاية GET واحدة ، / ، والتي تعرض "عالم الترحيب" على وحدة التحكم.
- loadgen : برنامج نصي يرسل حركة المرور إلى الخادم ، مع عدد قابل للتكوين من الطلبات في الثانية الواحدة.

تشغيل تطبيق من المصدر
لمعرفة تطبيق نموذج ، قم بتشغيله في Cloud Shell أو على جهاز كمبيوتر.
1) في دليل istio-samples / sample-apps / helloserver ، قم بتشغيل الخادم :
python3 server/server.py
عند بدء تشغيل الخادم ، يتم عرض ما يلي:
INFO:root:Starting server...
2) افتح نافذة طرفية أخرى لإرسال الطلبات إلى الخادم . إذا كنت تستخدم Cloud Shell ، فانقر فوق رمز الإضافة لفتح جلسة أخرى.
3) إرسال طلب إلى الخادم :
curl http://localhost:8080
إجابات الخادم:
Hello World!
4) من الدليل الذي قمت بتنزيل نموذج التعليمة البرمجية ، انتقل إلى الدليل الذي يحتوي على loadgen :
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
5) قم بإنشاء متغيرات البيئة التالية:
export SERVER_ADDR=http://localhost:8080 export REQUESTS_PER_SECOND=5
6) تشغيل virtualenv :
virtualenv --python python3 env
7) تفعيل البيئة الافتراضية:
source env/bin/activate
8) تعيين متطلبات ل loadgen :
pip3 install -r requirements.txt
9) تشغيل loadgen :
python3 loadgen.py
عند البدء ، يعرض loadgen الرسالة التالية:
Starting loadgen: 2019-05-20 10:44:12.448415 5 request(s) complete to http://localhost:8080
في نافذة طرفية أخرى ، يعرض الخادم الرسائل التالية على وحدة التحكم:
127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 - INFO:root:GET request, Path: / Headers: Host: localhost:8080 User-Agent: python-requests/2.22.0 Accept-Encoding: gzip, deflate Accept: */*
من منظور الشبكة ، يعمل التطبيق بالكامل على نفس المضيف (جهاز كمبيوتر محلي أو جهاز ظاهري Cloud Cloud). لذلك ، يمكنك استخدام المضيف المحلي لإرسال الطلبات إلى الخادم .
10) لإيقاف loadgen والخادم ، أدخل Ctrl-c في كل نافذة طرفية.
11) في إطار محطة loadgen ، قم بإلغاء تنشيط البيئة الافتراضية:
deactivate
تعبئة التطبيق في حاويات
لتشغيل التطبيق على GKE ، تحتاج إلى حزم نموذج التطبيق - server و loadgen - في حاويات . الحاوية هي وسيلة لحزم تطبيق لعزله عن البيئة.
لحزم التطبيق في حاوية ، تحتاج إلى Dockerfile . ملف Dockerfile هو ملف نصي يحدد أوامر إنشاء التعليمات البرمجية المصدر للتطبيق والتبعيات الخاصة به في صورة Docker. بعد الإنشاء ، يمكنك تحميل الصورة إلى سجل الحاوية ، على سبيل المثال ، Docker Hub أو Container Registry .
المثال يحتوي بالفعل على Dockerfile للخادم و loadgen مع جميع الأوامر اللازمة لتجميع الصور. أدناه هو Dockerfile للخادم :
FROM python:3-slim as base FROM base as builder RUN apt-get -qq update \ && apt-get install -y --no-install-recommends \ g++ \ && rm -rf /var/lib/apt/lists/* # Enable unbuffered logging FROM base as final ENV PYTHONUNBUFFERED=1 RUN apt-get -qq update \ && apt-get install -y --no-install-recommends \ wget WORKDIR /helloserver # Grab packages from builder COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/ # Add the application COPY . . EXPOSE 8080 ENTRYPOINT [ "python", "server.py" ]
- يخبر الأمر FROM python: 3-slim as command أن يقوم Docker باستخدام أحدث صورة Python 3 كقاعدة.
- فريق النسخ. . نسخ الملفات المصدر إلى دليل العمل الحالي (في حالتنا فقط server.py ) في نظام الملفات الحاوية.
- يحدد ENTRYPOINT الأمر الذي يتم استخدامه لبدء الحاوية. في حالتنا ، يكون هذا الأمر هو نفسه تقريبا الأمر الذي استخدمته لتشغيل server.py من الكود المصدري.
- يشير أمر EXPOSE إلى أن الخادم يستمع إلى المنفذ 8080 . هذا الأمر لا يوفر المنافذ . هذا نوع من الوثائق اللازمة لفتح المنفذ 8080 عند بدء تشغيل الحاوية.
التحضير لحاويات التطبيق
1) اضبط متغيرات البيئة التالية. استبدل PROJECT_ID بمعرف مشروع GCP الخاص بك.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
باستخدام قيم PROJECT_ID و GCR_REPO ، يمكنك تمييز صورة Docker عند جمعها وإرسالها إلى "حاوية التسجيل" الخاصة.
2) قم بتعيين مشروع GCP الافتراضي لأداة سطر الأوامر gcloud .
gcloud config set project $PROJECT_ID
3) قم بتعيين المنطقة الافتراضية لأداة سطر الأوامر gcloud .
gcloud config set compute/zone us-central1-b
4) تأكد من أن خدمة حاوية السجل مضمنة في مشروع GCP.
gcloud services enable containerregistry.googleapis.com
خادم حاويات
التغيير إلى الدليل حيث يوجد مثال الخادم :
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/
قم ببناء الصورة باستخدام متغيرات Dockerfile والبيئة التي حددتها سابقًا:
docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .
يمثل الخيار -t علامة Docker. هذا هو اسم الصورة التي تستخدمها عند نشر الحاوية.
- إرسال الصورة إلى حاوية التسجيل:
docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1
تحميل الحاويات
1) انتقل إلى الدليل حيث يوجد مثال loadgen :
cd ../loadgen
2) تجميع الصورة:
docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .
3) أرسل الصورة إلى حاوية التسجيل:
docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1
عرض قائمة الصور
استعرض قائمة الصور في المستودع وتأكد من إرسال الصور:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
يعرض الأمر أسماء الصور المرسلة للتو:
NAME gcr.io/PROJECT_ID/preparing-istio/helloserver gcr.io/PROJECT_ID/preparing-istio/loadgen
إنشاء مجموعة GKE
يمكن تشغيل هذه الحاويات على الجهاز الظاهري لـ Cloud Shell أو على الكمبيوتر باستخدام أمر تشغيل الجهاز المحمول. ولكن في بيئة الإنتاج ، فأنت بحاجة إلى طريقة لتنظيم الحاويات مركزيًا. على سبيل المثال ، نحتاج إلى نظام يضمن عمل الحاويات دائمًا ، ونحتاج إلى طريقة لتكبير وإطلاق مثيلات إضافية من الحاويات في حالة زيادة حركة المرور.
يمكنك استخدام GKE لتشغيل تطبيقات الحاوية. GKE عبارة عن نظام أساسي لتنسيق الحاوية يقوم بتجميع الأجهزة الافتراضية. يسمى كل جهاز الظاهري المضيف. تعتمد مجموعات GKE على نظام إدارة نظام المجموعة المفتوح Kubernetes. يوفر Kubernetes آليات للتفاعل مع الكتلة.
إنشاء مجموعة GKE:
1) إنشاء كتلة:
gcloud container clusters create istioready \ --cluster-version latest \ --machine-type=n1-standard-2 \ --num-nodes 4
ينشئ الأمر gcloud كتلة istioready في مشروع GCP والمنطقة الافتراضية التي حددتها. لبدء تشغيل Istio ، نوصيك بوجود 4 عقد على الأقل وجهاز ظاهري n1-standard-2 .
يقوم الفريق بإنشاء مجموعة لعدة دقائق. عندما تكون الكتلة جاهزة ، يصدر الأمر رسالة مماثلة.
2) حدد بيانات الاعتماد في أداة سطر الأوامر kubectl لاستخدامها لإدارة الكتلة:
gcloud container clusters get-credentials istioready
3) الآن يمكنك التواصل مع Kubernetes من خلال kubectl . على سبيل المثال ، باستخدام الأمر التالي ، يمكنك معرفة حالة العقد:
kubectl get nodes
يعرض الأمر قائمة العقد:
NAME STATUS ROLES AGE VERSION gke-istoready-default-pool-dbeb23dc-1vg0 Ready <none> 99s v1.13.6-gke.13 gke-istoready-default-pool-dbeb23dc-36z5 Ready <none> 100s v1.13.6-gke.13 gke-istoready-default-pool-dbeb23dc-fj7s Ready <none> 99s v1.13.6-gke.13 gke-istoready-default-pool-dbeb23dc-wbjw Ready <none> 99s v1.13.6-gke.13
مفاهيم Kubernetes الرئيسية
يعرض الرسم التخطيطي التطبيق على GKE:

قبل نشر الحاويات في GKE ، انظر إلى المفاهيم الأساسية لـ Kubernetes. هناك روابط في النهاية إذا كنت تريد معرفة المزيد.
- العقد والمجموعات . في GKE ، العقدة هي آلة افتراضية. على منصات Kubernetes الأخرى ، يمكن أن يكون المضيف جهاز كمبيوتر أو جهاز افتراضي. الكتلة هي مجموعة من العقد التي يمكن التفكير فيها ككل وحيث تقوم بنشر تطبيق في حاوية.
- السنفات . في Kubernetes ، تعمل الحاويات في القرون. جراب في Kubernetes هو وحدة غير قابلة للتجزئة. جراب يحمل حاوية واحدة أو أكثر. يمكنك نشر الخادم وحاويات تحميل في قرون منفصلة. عندما يكون هناك عدة حاويات في جراب (على سبيل المثال ، خادم تطبيق وخادم وكيل ) ، تتم إدارة الحاويات ككائن واحد ومشاركة موارد الجراب.
- النشر . في Kubernetes ، النشر هو عبارة عن مجموعة من القرون متطابقة. نشر يعمل عدة نسخ متماثلة من القرون موزعة عبر عقد الكتلة. يحل النشر تلقائيًا محل القرون التي تفشل أو لا تستجيب.
- خدمة Kubernetes . عند تشغيل رمز التطبيق في GKE ، يتغير الاتصال بين loadgen والخادم . عند بدء تشغيل الخدمات على الجهاز الظاهري لـ Cloud Shell أو على الكمبيوتر ، قمت بإرسال طلبات إلى الخادم في المضيف المحلي: 8080 . بعد النشر إلى GKE ، تعمل القرون على العقد المتاحة. بشكل افتراضي ، لا يمكنك التحكم في ما هو جراب المضيف الذي يعمل عليه ، لذلك لا تملك القرون عناوين IP دائمة.
للحصول على عنوان IP للخادم ، تحتاج إلى تحديد تجريد الشبكة على أعلى السنفات. هذه هي خدمة Kubernetes . توفر خدمة Kubernetes نقطة نهاية دائمة لمجموعة من القرون. هناك عدة أنواع من الخدمات . يستخدم الخادم LoadBalancer ، والذي يوفر عنوان IP خارجي للاتصال بالخادم من خارج الكتلة.
لدى Kubernetes أيضًا نظام DNS متكامل يقوم بتعيين أسماء DNS (على سبيل المثال ، helloserver.default.cluster.local ) للخدمات. بفضل هذا ، تتواصل القرون داخل المجموعة مع القرون الأخرى في المجموعة على عنوان ثابت. لا يمكن استخدام اسم DNS خارج الكتلة ، مثل على Cloud Shell أو على جهاز كمبيوتر.
Kubernetes الظواهر
عند بدء تشغيل التطبيق من التعليمات البرمجية المصدر ، استخدمت الأمر python3 الإلزامي
server.py
الحتمية تعني الفعل: "افعلها".
Kubernetes يستخدم نموذج التعريفي . هذا يعني أننا لا نقول لل Kubernetes بالضبط ما يجب القيام به ، ولكن وصف الحالة المطلوبة. على سبيل المثال ، تبدأ Kubernetes وتوقف القرون عند الضرورة ، بحيث تكون الحالة الفعلية للنظام كما هو مطلوب.
يمكنك تحديد الحالة المطلوبة في البيانات أو ملفات YAML . يحتوي ملف YAML على مواصفات لكوبن أو أكثر من كائنات Kubernetes.
المثال يحتوي على ملف YAML للخادم و loadgen . يشير كل ملف YAML إلى الحالة المطلوبة لكائن النشر وخدمة Kubernetes.
server.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: helloserver spec: selector: matchLabels: app: helloserver replicas: 1 template: metadata: labels: app: helloserver spec: terminationGracePeriodSeconds: 5 restartPolicy: Always containers: - name: main image: gcr.io/google-samples/istio/helloserver:v0.0.1 imagePullPolicy: Always
- يشير النوع إلى نوع الكائن.
- يشير metadata.name إلى اسم النشر.
- تحتوي المواصفات الحقل الأول على وصف للحالة المطلوبة.
- spec.replicas يشير إلى العدد المطلوب من القرون.
- يحدد القسم spec.template قالب pod . في مواصفات السنفات ، يوجد حقل صورة يشار فيه إلى اسم الصورة المراد استخراجها من حاوية التسجيل.
يتم تعريف الخدمة على النحو التالي:
apiVersion: v1 kind: Service metadata: name: hellosvc spec: type: LoadBalancer selector: app: helloserver ports: - name: http port: 80 targetPort: 8080
- LoadBalancer : يقوم العملاء بإرسال طلبات إلى عنوان IP الخاص بموازن التحميل ، والذي يحتوي على عنوان IP ثابت ويمكن الوصول إليه من خارج الكتلة.
- targetPort : كما تتذكر ، لم يوفر الأمر EXPOSE 8080 في Dockerfile منافذ. توفر المنفذ 8080 بحيث يمكنك الوصول إلى حاوية الخادم من خارج الكتلة. في حالتنا ، hellosvc.default.cluster.local: 80 (الاسم المختصر: hellosvc ) يتوافق مع المنفذ 8080 من عنوان IP الخاص بجهاز helloserver .
- المنفذ : هذا هو رقم المنفذ حيث سترسل الخدمات الأخرى في الكتلة طلبات.
loadgen.yaml
يشبه كائن النشر في loadgen.yaml server.yaml . الفرق هو أن كائن النشر يحتوي على قسم env . إنه يحدد متغيرات البيئة التي يحتاج إليها loadgen والتي تقوم بتعيينها عند بدء تشغيل التطبيق من التعليمات البرمجية المصدر.
apiVersion: apps/v1 kind: Deployment metadata: name: loadgenerator spec: selector: matchLabels: app: loadgenerator replicas: 1 template: metadata: labels: app: loadgenerator spec: terminationGracePeriodSeconds: 5 restartPolicy: Always containers: - name: main image: gcr.io/google-samples/istio/loadgen:v0.0.1 imagePullPolicy: Always env: - name: SERVER_ADDR value: "http://hellosvc:80/" - name: REQUESTS_PER_SECOND value: "10" resources: requests: cpu: 300m memory: 256Mi limits: cpu: 500m memory: 512Mi
نظرًا لأن loadgen لا يقبل الطلبات الواردة ، يتم تحديد ClusterIP لحقل الكتابة . يوفر هذا النوع عنوان IP ثابتًا يمكن أن تستخدمه الخدمات في الكتلة ، لكن عنوان IP هذا لا يتم توفيره للعملاء الخارجيين.
apiVersion: v1 kind: Service metadata: name: loadgensvc spec: type: ClusterIP selector: app: loadgenerator ports: - name: http port: 80 targetPort: 8080
نشر الحاويات في GKE
1) انتقل إلى الدليل حيث يوجد مثال الخادم :
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/
2) افتح server.yaml في محرر نصوص.
3) استبدل الاسم في حقل الصورة باسم صورة Docker الخاصة بك.
image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1
استبدل PROJECT_ID بمعرف مشروع GCP الخاص بك.
4) احفظ وأغلق server.yaml .
5) قم بتوسيع ملف YAML في Kubernetes:
kubectl apply -f server.yaml
بعد الانتهاء بنجاح ، يصدر الأمر الكود التالي:
deployment.apps/helloserver created service/hellosvc created
6) انتقل إلى الدليل حيث يقع loadgen :
cd ../loadgen
7) افتح loadgen.yaml في محرر نصوص.
8) استبدل الاسم في حقل الصورة باسم صورة Docker الخاصة بك.
image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1
استبدل PROJECT_ID بمعرف مشروع GCP الخاص بك.
9) احفظ وأغلق loadgen.yaml ، أغلق محرر النصوص.
10) قم بتوسيع ملف YAML في Kubernetes:
kubectl apply -f loadgen.yaml
بعد الانتهاء بنجاح ، يصدر الأمر الكود التالي:
deployment.apps/loadgenerator created service/loadgensvc created
11) تحقق من حالة الموقد:
kubectl get pods
يظهر الأمر الحالة:
NAME READY STATUS RESTARTS AGE helloserver-69b9576d96-mwtcj 1/1 Running 0 58s loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) استخراج سجلات التطبيق من جراب loadgen . استبدل POD_ID بالمعرف من الإجابة السابقة.
kubectl logs loadgenerator-POD_ID
13) الحصول على عناوين IP hellosvc الخارجية:
kubectl get service
استجابة الأوامر تبدو مثل هذا:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hellosvc LoadBalancer 10.81.15.158 192.0.2.1 80:31127/TCP 33m kubernetes ClusterIP 10.81.0.1 <none> 443/TCP 93m loadgensvc ClusterIP 10.81.15.155 <none> 80/TCP 4m52s
14) أرسل طلبًا إلى hellosvc : استبدل EXTERNAL_IP بعنوان IP الخارجي لـ hellosvc .
curl http://EXTERNAL_IP
معالجة Istio
لديك بالفعل تطبيق تم نشره على GKE. يمكن أن يستخدم loadgen Kubernetes DNS ( hellosvc: 80 ) لإرسال الطلبات إلى الخادم ، ويمكنك إرسال الطلبات إلى الخادم على عنوان IP خارجي. على الرغم من أن Kubernetes بها العديد من الميزات ، إلا أن بعض المعلومات حول الخدمات غير متوفرة:
- كيف تتفاعل الخدمات؟ ما هي العلاقة بين الخدمات؟ كيف يتم المرور بين الخدمات؟ أنت تدرك أن loadgen يرسل طلبات إلى الخادم ، ولكن تخيل أنك لا تعرف شيئًا عن التطبيق. للإجابة على هذه الأسئلة ، نلقي نظرة على قائمة تشغيل الموقد في GKE.
- المقاييس . كم من الوقت يستجيب الخادم لطلب وارد؟ كم عدد الطلبات في الثانية تذهب إلى الخادم؟ هل يعطي رسائل خطأ؟
- معلومات الأمن . هي حركة المرور بين loadgen والخادم ببساطة عن طريق HTTP أو mTLS ؟
يتم الرد على كل هذه الأسئلة من قبل Istio. للقيام بذلك ، يضع Istio بروكسي جانبي Envoy في كل جراب. وكيل مبعوث يعترض كل حركة المرور الواردة والصادرة إلى حاويات التطبيق. هذا يعني أن الخادم و loadgen يستقبلان الوكلاء الجانبيان لـ Envoy ، وكل حركة المرور من loadgen إلى الخادم تمر عبر وكلاء الوكلاء.
تشكل الاتصالات بين وكلاء Envoy شبكة خدمة. توفر بنية شبكة الخدمة طبقة من التحكم في Kubernetes.

بمجرد تنفيذ بروكسيات Envoy في حاوياتها ، يمكن تثبيت Istio أعلى مجموعة GKE ، دون تغيير رمز التطبيق تقريبًا. لكنك قمت ببعض الأعمال لإعداد التطبيق للإدارة باستخدام Istio:
- خدمات لجميع الحاويات. ترتبط عمليات نشر الخادم و loadgen بواسطة خدمة Kubernetes. حتى loadgen ، الذي لا يتلقى الطلبات الواردة ، لديه خدمة.
- يجب أن تحتوي المنافذ في الخدمات على أسماء. على الرغم من أنه يمكن ترك منافذ الخدمة بدون اسم في GKE ، إلا أن Istio يتطلب اسم منفذ وفقًا لبروتوكوله. في ملف YAML ، يُسمى منفذ الخادم http لأن الخادم يستخدم بروتوكول HTTP . إذا استخدمت الخدمة gRPC ، فسوف تقوم بتسمية grpc الخاص بالميناء.
- عمليات النشر ملحوظة. لذلك ، يمكنك استخدام ميزات إدارة حركة المرور في Istio ، على سبيل المثال ، مشاركة حركة المرور بين إصدارات الخدمة نفسها.
تثبيت Istio
هناك طريقتان لتثبيت Istio. يمكنك تمكين ملحق Istio على GKE أو تثبيت الإصدار المفتوح المصدر من Istio على نظام مجموعة. مع Istio on GKE ، يمكنك بسهولة إدارة تثبيت وترقية Istio كجزء من دورة حياة مجموعة GKE. إذا كنت بحاجة إلى أحدث إصدار من Istio أو مزيد من التحكم في تكوين لوحة التحكم Istio ، فقم بتثبيت الإصدار المفتوح المصدر بدلاً من Istio على امتداد GKE. لاتخاذ قرار بشأن النهج ، اقرأ المقال هل أحتاج إلى Istio على GKE؟ .
حدد أحد الخيارات ، ودرس الدليل المناسب واتبع الإرشادات لتثبيت Istio على الكتلة. إذا كنت ترغب في استخدام Istio مع تطبيقك المنشور حديثًا ، فقم بتمكين التضمين الجانبي لمساحة الاسم الافتراضية .
تنظيف
لتجنب شحن حساب Google Cloud Platform الخاص بك للموارد التي استخدمتها في هذا الدليل ، أزل كتلة الحاوية عند تثبيت Istio والتشغيل باستخدام نموذج التطبيق. سيؤدي هذا إلى حذف جميع موارد نظام المجموعة ، مثل حساب المثيلات والأقراص وموارد الشبكة.
ما التالي؟