إعداد طلب لIstio

إعداد طلب لIstio

Istio هي أداة ملائمة للاتصال بالتطبيقات الموزعة وتأمينها ومراقبتها. تستخدم Istio مجموعة متنوعة من التقنيات لتشغيل البرامج وإدارتها على نطاق واسع، بما في ذلك الحاويات لحزم تعليمات التطبيق البرمجية والتبعيات للنشر، وKubernetes لإدارة تلك الحاويات. لذلك، للعمل مع Istio، يجب أن تعرف كيفية عمل تطبيق يحتوي على خدمات متعددة يعتمد على هذه التقنيات بدون إستيو. إذا كانت هذه الأدوات والمفاهيم مألوفة لك بالفعل، فلا تتردد في تخطي هذا البرنامج التعليمي والانتقال مباشرة إلى القسم تثبيت Istio على Google Kubernetes Engine (GKE) أو تثبيت ملحق إستيو على GKE.

هذا دليل خطوة بخطوة حيث سنتعرف على العملية بأكملها بدءًا من الكود المصدري وحتى حاوية GKE لنمنحك فهمًا أساسيًا لهذه التقنيات من خلال مثال. سترى أيضًا كيف يستفيد Istio من قوة هذه التقنيات. يفترض هذا أنك لا تعرف أي شيء عن الحاويات أو Kubernetes أو شبكات الخدمة أو Istio.

المهام

في هذا البرنامج التعليمي، سوف تقوم بإكمال المهام التالية:

  1. تعلم تطبيق helloworld البسيط مع خدمات متعددة.
  2. قم بتشغيل التطبيق من التعليمات البرمجية المصدر.
  3. تغليف التطبيق في حاويات.
  4. إنشاء مجموعة Kubernetes.
  5. نشر الحاويات في المجموعة.

قبل ان تبدا

اتبع التعليمات لتمكين Kubernetes Engine API:

  1. اذهب إلى صفحة محرك Kubernetes في وحدة تحكم Google Cloud Platform.
  2. إنشاء أو تحديد مشروع.
  3. انتظر حتى يتم تمكين واجهة برمجة التطبيقات (API) والخدمات ذات الصلة. قد يستغرق هذا بضع دقائق.
  4. تأكد من إعداد الفوترة لمشروع Google Cloud Platform الخاص بك. تعرف على كيفية تمكين الفوترة.

في هذا البرنامج التعليمي، يمكنك استخدام Cloud Shell، الذي يقوم بإعداد الجهاز الظاهري g1-small في Google Compute Engine مع Linux المستند إلى Debian، أو كمبيوتر Linux أو macOS.

الخيار أ: استخدام Cloud Shell

فوائد استخدام Cloud Shell:

  • بيئات تطوير Python 2 وPython 3 (بما في ذلك virtualenv) تم تكوينها بالكامل.
  • أدوات سطر الأوامر com.gcloud, عامل ميناء, طائرة نفاثة и kubectlوالتي سوف نستخدمها مثبتة بالفعل.
  • لديك العديد للاختيار من بينها محرري النصوص:
    1. محرر الكود، والذي يفتح بأيقونة التحرير أعلى نافذة Cloud Shell.
    2. Emacs أو Vim أو Nano، والتي يتم فتحها من سطر الأوامر في Cloud Shell.

ليستخدم سحابة شل:

  1. انتقل إلى وحدة تحكم Google Cloud Platform.
  2. صحافة تفعيل كلاود شل (قم بتنشيط Cloud Shell) أعلى نافذة وحدة تحكم Google Cloud Platform.

إعداد طلب لIstio

في الجزء السفلي وحدة تحكم Google Cloud Platform سيتم فتح جلسة Cloud Shell مع سطر الأوامر في نافذة جديدة.

إعداد طلب لIstio

الخيار ب: استخدام أدوات سطر الأوامر محليًا

إذا كنت ستعمل على جهاز كمبيوتر يعمل بنظام التشغيل Linux أو macOS، فستحتاج إلى تكوين المكونات التالية وتثبيتها:

  1. يعدل أو يكيف بيئة تطوير بايثون 3 وبيثون 2.

  2. قم بتثبيت Cloud SDK مع أداة سطر الأوامر com.gcloud.

  3. ضبط kubectl - أداة سطر الأوامر للعمل معها Kubernetes.

    gcloud components install kubectl

  4. ضبط إصدار مجتمع Docker (CE). سوف تستخدم أداة سطر الأوامر عامل ميناءلإنشاء صور حاوية لتطبيق العينة.

  5. قم بتثبيت الأداة التحكم في إصدار جيتللحصول على نموذج التطبيق من GitHub.

قم بتنزيل نموذج التعليمات البرمجية

  1. قم بتنزيل الكود المصدري com.helloserver:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. انتقل إلى دليل التعليمات البرمجية المثال:

    cd istio-samples/sample-apps/helloserver

استكشاف تطبيق مع خدمات متعددة

نموذج التطبيق مكتوب بلغة Python ويتكون من مكونين يتفاعلان باستخدام REST:

  • الخادم: خادم بسيط مع نقطة نهاية واحدة يحصل، /، الذي يطبع "hello World" على وحدة التحكم.
  • تحميل: البرنامج النصي الذي يرسل حركة المرور إلى الخادم، مع عدد قابل للتكوين من الطلبات في الثانية.

إعداد طلب لIstio

تشغيل تطبيق من الكود المصدري

لاستكشاف نموذج التطبيق، قم بتشغيله في 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) من الدليل الذي قمت بتنزيل نموذج التعليمات البرمجية فيه، انتقل إلى الدليل الذي يحتوي على تحميل:

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) تحديد المتطلبات ل تحميل:

pip3 install -r requirements.txt

9) تشغيل تحميل:

python3 loadgen.py

عند الركض تحميل يعرض شيئا مثل الرسالة التالية:

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 Shell الظاهري). لذلك يمكنك استخدام مؤسسة الكوثرلإرسال الطلبات إلى الخادم.
10) التوقف تحميل и الخادم، أدخل السيطرة- ج في كل نافذة طرفية.
11) في النافذة الطرفية تحميل إلغاء تنشيط البيئة الافتراضية:

deactivate

تعبئة الطلب في حاويات

لتشغيل التطبيق على GKE، تحتاج إلى حزم نموذج التطبيق − الخادم и تحميل - في حاويات. الحاوية هي طريقة لحزم تطبيق ما لعزله عن بيئته.

لحزم تطبيق ما في حاوية، تحتاج إلى Dockerfile. Dockerfile هو ملف نصي يحدد الأوامر لبناء الكود المصدري للتطبيق وتبعياته فيه صورة عامل الميناء. بمجرد الإنشاء، يمكنك تحميل الصورة إلى سجل حاوية مثل Docker Hub أو سجل الحاويات.

المثال لديه بالفعل Dockerfile إلى الخادم и تحميل مع كافة الأوامر اللازمة لجمع الصور. أقل - 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" ]

  • فريق من بايثون:3-slim كقاعدة يخبر Docker باستخدام الأحدث صورة بايثون 3 كقاعدة.
  • فريق ينسخ. . نسخ الملفات المصدر إلى دليل العمل الحالي (في حالتنا فقط server.py) إلى نظام ملفات الحاوية.
  • نقطة الدخول يحدد الأمر المستخدم لبدء الحاوية. في حالتنا، هذا الأمر هو تقريبًا نفس الأمر الذي استخدمته للتشغيل server.py من كود المصدر.
  • فريق تعرض يدل علي الخادم ينتظر البيانات من خلال المنفذ 8080. هذا الفريق ليس كذلك يوفر المنافذ. هذا نوع من الوثائق المطلوبة لفتح المنفذ 8080 عند بدء الحاوية.

التحضير لحاويات التطبيق الخاص بك

1) قم بتعيين متغيرات البيئة التالية. يستبدل معرف المشروع إلى معرف مشروع Google Cloud Platform الخاص بك.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

باستخدام القيم معرف المشروع и GCR_REPO يمكنك وضع علامة على صورة Docker عند إنشائها ودفعها إلى سجل حاوية خاص.

2) قم بتعيين مشروع GCP الافتراضي لأداة سطر الأوامر com.gcloud.

gcloud config set project $PROJECT_ID

3) قم بتعيين المنطقة الافتراضية لأداة سطر الأوامر com.gcloud.

gcloud config set compute/zone us-central1-b

4) تأكد من تمكين خدمة سجل الحاوية في مشروع GCP.

gcloud services enable containerregistry.googleapis.com

خادم الحاويات

  1. انتقل إلى الدليل الذي يوجد به المثال الخادم:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. تجميع الصورة باستخدام Dockerfile ومتغيرات البيئة التي حددتها سابقًا:

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

المعلمة -t يمثل علامة Docker. هذا هو اسم الصورة التي تستخدمها عند نشر الحاوية.

  1. قم بتحميل الصورة إلى سجل الحاوية:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

حاويات التحميل

1) انتقل إلى الدليل الذي يوجد به المثال تحميل:

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 على نظام إدارة مجموعة Kubernetes مفتوح المصدر. يوفر Kubernetes آليات للتفاعل مع المجموعة.

إنشاء مجموعة GKE:

1) إنشاء مجموعة:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

فريق com.gcloud ينشئ مجموعة جاهزة في مشروع GCP والمنطقة الافتراضية التي حددتها. لتشغيل Istio، نوصي بوجود 4 عقد وجهاز افتراضي على الأقل n1 معيار 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:

إعداد طلب لIstio

قبل نشر الحاويات في GKE، تعرف على المفاهيم الأساسية لـ Kubernetes. هناك روابط في النهاية إذا كنت تريد معرفة المزيد.

  • العقد والمجموعات. في GKE، العقدة هي جهاز افتراضي. على منصات Kubernetes الأخرى، يمكن أن تكون العقدة عبارة عن جهاز كمبيوتر أو جهاز افتراضي. المجموعة عبارة عن مجموعة من العقد التي يمكن اعتبارها وحدة واحدة حيث تقوم بنشر تطبيق في حاوية.
  • القرون. في Kubernetes، تعمل الحاويات في القرون. الكبسولة في Kubernetes هي وحدة غير قابلة للتجزئة. تحتوي الكبسولة على حاوية واحدة أو أكثر. يمكنك نشر حاويات الخادم و تحميل في قرون منفصلة. عندما تكون هناك عدة حاويات في الكبسولة (على سبيل المثال، خادم التطبيق و مخدم بروكسي)، تتم إدارة الحاويات ككيان واحد ومشاركة موارد الكبسولة.
  • عمليات النشر. في Kubernetes، النشر هو كائن عبارة عن مجموعة من القرون المتطابقة. يقوم النشر بتشغيل نسخ متماثلة متعددة من القرون الموزعة عبر عقد المجموعة. يؤدي النشر تلقائيًا إلى استبدال البودات التي فشلت أو التي لا تستجيب.
  • خدمة كوبرنيتيس. عند تشغيل كود التطبيق في GKE، يتم الاتصال بين تحميل и الخادم. عندما بدأت الخدمات على جهاز ظاهري أو سطح مكتب Cloud Shell، قمت بإرسال الطلبات إلى الخادم по адресу المضيف المحلي: 8080. بمجرد نشرها في GKE، يتم تنفيذ البودات على العقد المتاحة. بشكل افتراضي، ليس لديك أي سيطرة على العقدة التي تعمل عليها الكبسولة، لذلك أنت القرون لا توجد عناوين IP دائمة.
    للحصول على عنوان IP ل الخادم، فأنت بحاجة إلى تحديد تجريد الشبكة أعلى القرون. هذا ما هو عليه خدمة كوبرنيتيس. توفر خدمة Kubernetes نقطة نهاية ثابتة لمجموعة من القرون. هناك عدد قليل أنواع الخدمات. الخادم الاستخدامات LoadBalancer، والذي يوفر عنوان IP خارجي للاتصال الخادم من خارج الكتلة.
    يحتوي Kubernetes أيضًا على نظام DNS مدمج يقوم بتعيين أسماء DNS (على سبيل المثال، helloserver.default.cluster.local) خدمات. بفضل هذا، تتواصل القرون الموجودة داخل المجموعة مع القرون الأخرى في المجموعة على عنوان دائم. لا يمكن استخدام اسم DNS خارج المجموعة، كما هو الحال في Cloud Shell أو على جهاز كمبيوتر.

يظهر Kubernetes

عندما قمت بتشغيل التطبيق من المصدر، استخدمت الأمر الحتمي python3

server.py

والأمر يتضمن الفعل: "افعل هذا".

يستخدم كوبيرنيتيس نموذج تصريحي. هذا يعني أننا لا نخبر Kubernetes بما يجب فعله بالضبط، بل نصف الحالة المرغوبة. على سبيل المثال، يقوم Kubernetes بتشغيل وإيقاف البودات حسب الحاجة للحفاظ على الحالة الفعلية للنظام متسقة مع الحالة المطلوبة.

تشير إلى الحالة المطلوبة في البيانات أو الملفات YAML. يحتوي ملف YAML على مواصفات لكائن واحد أو أكثر من كائنات Kubernetes.

يحتوي المثال على ملف YAML لـ الخادم и تحميل. يحدد كل ملف 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 يحدد اسم النشر.
  • الحقل الأول المواصفات يحتوي على وصف للحالة المطلوبة.
  • المواصفات.النسخ المتماثلة يشير إلى العدد المطلوب من القرون.
  • قسم المواصفات.قالب يحدد قالب جراب. يوجد حقل في مواصفات الكبسولة صورة، والذي يحدد اسم الصورة التي يجب استخراجها من سجل الحاوية.

يتم تعريف الخدمة على النحو التالي:

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • LoadBalancer: يرسل العملاء طلبات إلى عنوان IP الخاص بموازن التحميل، الذي يحتوي على عنوان IP ثابت ويمكن الوصول إليه من خارج المجموعة.
  • الهدف: كما تتذكرون، الفريق كشف 8080 в Dockerfile لم توفر الموانئ. قمت بتوفير المنفذ 8080حتى تتمكن من الاتصال بالحاوية الخادم خارج الكتلة. في حالتنا هذه hellosvc.default.cluster.local:80 (اسم قصير: hellosvc) يتوافق مع المنفذ 8080 عناوين IP قرنة com.helloserver.
  • ميناء: هذا هو رقم المنفذ حيث سترسل الخدمات الأخرى في المجموعة الطلبات.

Loadgen.yaml

كائن النشر إلى Loadgen.yaml يبدو مثل server.yaml. الفرق هو أن كائن النشر يحتوي على قسم الحياة الفطرية. فهو يحدد متغيرات البيئة المطلوبة تحميل والتي قمت بتثبيتها عند تشغيل التطبيق من المصدر.

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

وقت تحميل لا يقبل الطلبات الواردة لهذا المجال نوع غير معروف 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

يحل محل معرف المشروع إلى معرف مشروع Google Cloud Platform الخاص بك.
4) حفظ وإغلاق server.yaml.
5) انشر ملف YAML إلى Kubernetes:

kubectl apply -f server.yaml

عند الانتهاء بنجاح، ينتج الأمر الكود التالي:

deployment.apps/helloserver created
service/hellosvc created

6) انتقل إلى الدليل حيث تحميل:

cd ../loadgen

7) مفتوح Loadgen.yaml في محرر النصوص.
8) استبدال الاسم في الحقل صورة إلى اسم صورة Docker الخاصة بك.

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

يحل محل معرف المشروع إلى معرف مشروع Google Cloud Platform الخاص بك.
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) استخراج سجلات التطبيق من الجراب تحميل. يحل محل 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. تحميل يمكن استخدام Kubernetes DNS (هيلوسفك:80) لإرسال الطلبات إلى الخادمويمكنك إرسال الطلبات إلى الخادم عن طريق عنوان IP الخارجي. على الرغم من أن Kubernetes يحتوي على العديد من الميزات، إلا أن هناك بعض المعلومات المفقودة حول الخدمات:

  • كيف تتفاعل الخدمات؟ ما هي العلاقات بين الخدمات؟ كيف تتدفق حركة المرور بين الخدمات؟ هل أنت على علم بذلك تحميل يرسل الطلبات إلى الخادملكن تخيل أنك لا تعرف أي شيء عن التطبيق. للإجابة على هذه الأسئلة، دعونا نلقي نظرة على قائمة البودات قيد التشغيل في GKE.
  • المقاييس. حتى متى الخادم يستجيب لطلب وارد؟ كم عدد الطلبات التي يستقبلها الخادم في الثانية؟ هل يعطي رسائل خطأ؟
  • حماية المعلومات. حركة المرور بين تحميل и الخادم يمر فقط من خلال HTTP او بواسطة mTLS?

يجيب Istio على كل هذه الأسئلة. للقيام بذلك، يضع Istio وكيلًا جانبيًا مبعوث في كل جراب. يعترض وكيل Envoy كافة حركة المرور الواردة والصادرة إلى حاويات التطبيق. هذا يعني انه الخادم и تحميل تلقي عبر وكيل السيارة الجانبية Envoy، وجميع حركة المرور من تحميل к الخادم يمر عبر الوكيل المبعوث.

تشكل الاتصالات بين وكلاء المبعوثين شبكة خدمة. توفر بنية شبكة الخدمة طبقة من التحكم أعلى Kubernetes.

إعداد طلب لIstio

نظرًا لأن وكلاء Envoy يعملون في حاوياتهم الخاصة، يمكن تثبيت Istio أعلى مجموعة GKE دون أي تغييرات تقريبًا على رمز التطبيق. لكنك قمت ببعض الأعمال لتجهيز تطبيقك لتتم إدارته بواسطة Istio:

  • خدمات لجميع الحاويات. إلى عمليات النشر الخادم и تحميل مرتبطة بخدمة Kubernetes. حتى تحميلوالتي لا تتلقى الطلبات الواردة، هناك خدمة.
  • يجب أن يكون للمنافذ الموجودة في الخدمات أسماء. على الرغم من إمكانية ترك منافذ الخدمة بدون تسمية في GKE، إلا أن Istio يتطلب منك التحديد اسم المنفذ وفقا للبروتوكول الخاص به. في ملف YAML، المنفذ لـ الخادم ودعا HTTPلأن الخادم يستخدم البروتوكول HTTP... إذا الخدمة مستعمل جي آر بي سي، يمكنك تسمية المنفذ grpc.
  • تم وضع علامة على عمليات النشر. ولذلك، يمكنك استخدام ميزات إدارة حركة المرور في Istio، مثل تقسيم حركة المرور بين إصدارات نفس الخدمة.

تثبيت

هناك طريقتان لتثبيت Istio. يستطيع تمكين Istio على امتداد GKE أو قم بتثبيت الإصدار المفتوح المصدر من Istio على الكتلة. باستخدام Istio on GKE، يمكنك بسهولة إدارة عمليات تثبيت Istio وترقياتها طوال دورة حياة مجموعة GKE. إذا كنت تريد أحدث إصدار من Istio أو المزيد من التحكم في تكوين لوحة تحكم Istio، فقم بتثبيت الإصدار مفتوح المصدر بدلاً من Istio على ملحق GKE. لاتخاذ قرار بشأن النهج، اقرأ المقال هل أحتاج إلى Istio على GKE؟.

حدد خيارًا، وراجع الدليل المناسب، واتبع الإرشادات لتثبيت Istio على مجموعتك. إذا كنت تريد استخدام Istio مع التطبيق الذي تم نشره حديثًا، تمكين تنفيذ Sidecar لمساحة الاسم الافتراضي.

تنظيف

لتجنب تحصيل رسوم من حساب Google Cloud Platform الخاص بك مقابل الموارد التي استخدمتها في هذا البرنامج التعليمي، احذف مجموعة الحاويات بمجرد تثبيت Istio وتشغيل نموذج التطبيق. سيؤدي هذا إلى إزالة كافة موارد المجموعة، مثل مثيلات الحساب والأقراص وموارد الشبكة.

ما هي الخطوة التالية؟

المصدر: www.habr.com

إضافة تعليق