آماده سازی اپلیکیشن ایستیو

آماده سازی اپلیکیشن ایستیو

ایستیو ابزاری مناسب برای اتصال، ایمن سازی و نظارت بر برنامه های کاربردی توزیع شده است. ایستیو از فناوری‌های مختلفی برای اجرا و مدیریت نرم‌افزار در مقیاس استفاده می‌کند، از جمله کانتینرها برای بسته‌بندی کد برنامه و وابستگی‌ها برای استقرار، و Kubernetes برای مدیریت آن کانتینرها. بنابراین، برای کار با ایستیو باید بدانید که یک اپلیکیشن با چندین سرویس مبتنی بر این فناوری ها چگونه کار می کند بدون ایستیو. اگر این ابزارها و مفاهیم قبلاً برای شما آشنا هستند، از این آموزش رد شوید و مستقیماً به بخش بروید. نصب Istio در Google Kubernetes Engine (GKE) یا نصب افزونه ایستیو در GKE.

این یک راهنمای گام به گام است که در آن کل فرآیند از کد منبع تا ظرف GKE را طی می کنیم تا از طریق یک مثال به شما درک اساسی از این فناوری ها را ارائه دهیم. همچنین خواهید دید که ایستیو چگونه از قدرت این فناوری ها بهره می برد. این فرض را بر این می‌گذارد که شما چیزی در مورد کانتینرها، Kubernetes، مش‌های سرویس یا Istio نمی‌دانید.

وظایف

در این آموزش، شما وظایف زیر را انجام خواهید داد:

  1. آموزش اپلیکیشن hello world ساده با چندین سرویس.
  2. برنامه را از روی کد منبع اجرا کنید.
  3. بسته بندی برنامه در ظروف.
  4. ایجاد یک خوشه Kubernetes
  5. استقرار کانتینرها در یک خوشه

قبل از اینکه تو شروع کنی

برای فعال کردن Kubernetes Engine API دستورالعمل ها را دنبال کنید:

  1. برو به صفحه موتور Kubernetes در کنسول Google Cloud Platform.
  2. ایجاد یا انتخاب یک پروژه
  3. صبر کنید تا API و خدمات مرتبط فعال شوند. این ممکن است چند دقیقه طول بکشد.
  4. مطمئن شوید که صورت‌حساب برای پروژه Google Cloud Platform شما تنظیم شده است. نحوه فعال کردن صورتحساب را بیاموزید.

در این آموزش می توانید از Cloud Shell که ماشین مجازی را آماده می کند استفاده کنید g1-small در موتور محاسباتی گوگل با لینوکس مبتنی بر دبیان یا رایانه لینوکس یا macOS.

گزینه A: استفاده از Cloud Shell

مزایای استفاده از Cloud Shell:

  • محیط های توسعه پایتون 2 و پایتون 3 (از جمله مجازی) به طور کامل پیکربندی شده اند.
  • ابزارهای خط فرمان gcloud, داکتر, دستگاه گوارش и کوبکتل، که ما استفاده خواهیم کرد قبلاً نصب شده اند.
  • شما چندین مورد را برای انتخاب دارید ویرایشگرهای متن:
    1. ویرایشگر کد، که با نماد ویرایش در بالای پنجره Cloud Shell باز می شود.
    2. Emacs، Vim یا Nano که از خط فرمان در Cloud Shell باز می شوند.

برای استفاده ابر پوسته:

  1. به کنسول GCP بروید.
  2. مطبوعات Cloud Shell را فعال کنید (فعال کردن Cloud Shell) در بالای پنجره کنسول GCP.

آماده سازی اپلیکیشن ایستیو

در قسمت پایین کنسول GCP یک جلسه Cloud Shell با یک خط فرمان در یک پنجره جدید باز می شود.

آماده سازی اپلیکیشن ایستیو

گزینه B: استفاده از ابزارهای خط فرمان به صورت محلی

اگر روی رایانه‌ای کار می‌کنید که دارای Linux یا macOS است، باید اجزای زیر را پیکربندی و نصب کنید:

  1. شخصی سازی محیط توسعه پایتون 3 و پایتون 2.

  2. Cloud SDK را نصب کنید با ابزار خط فرمان gcloud.

  3. مجموعه کوبکتل - ابزار خط فرمان برای کار با کوبرنیتس.

    gcloud components install kubectl

  4. مجموعه Docker Community Edition (CE). شما از ابزار خط فرمان استفاده خواهید کرد داکتربرای ایجاد تصاویر ظرف برای برنامه نمونه.

  5. ابزار را نصب کنید کنترل نسخه Gitبرای دریافت نمونه برنامه از GitHub.

دانلود نمونه کد

  1. کد منبع را دانلود کنید سلام سرور:

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

  2. به دایرکتوری کد نمونه بروید:

    cd istio-samples/sample-apps/helloserver

کاوش یک برنامه با چندین سرویس

برنامه نمونه به زبان پایتون نوشته شده است و از دو مؤلفه تشکیل شده است که با استفاده از آن تعامل دارند REST:

  • سرور: سرور ساده با یک نقطه پایانی گرفتن، /، که "سلام جهان" را روی کنسول چاپ می کند.
  • بارگذار: اسکریپتی که ترافیک را به سرور، با تعداد قابل تنظیم درخواست در ثانیه.

آماده سازی اپلیکیشن ایستیو

اجرای برنامه از روی کد منبع

برای کاوش نمونه برنامه، آن را در 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 --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) اجرا می شود. بنابراین می توانید استفاده کنید localhost رابرای ارسال درخواست ها به سرور.
10) توقف کردن بارگذار и سرور، وارد Ctrl-c در هر پنجره ترمینال
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" ]

  • تیم FROM python: 3-slim به عنوان پایه به داکر می گوید که از جدیدترین ها استفاده کند تصویر پایتون 3 به عنوان پایه
  • تیم کپی 🀄. . فایل های منبع را در فهرست کاری فعلی کپی می کند (فقط در مورد ما server.py) به سیستم فایل کانتینر.
  • نقطه ورود دستوری را که برای راه اندازی کانتینر استفاده می شود را تعریف می کند. در مورد ما، این دستور تقریباً مشابه دستوری است که قبلاً اجرا می کردید server.py از کد منبع
  • تیم در معرض گذاشتن نشان میدهد که سرور منتظر اطلاعات از طریق پورت است 8080. این تیم نیست پورت ها را فراهم می کند. این نوعی از اسنادی است که برای باز کردن پورت مورد نیاز است 8080 هنگام راه اندازی ظرف

در حال آماده شدن برای کانتینری کردن برنامه شما

1) متغیرهای محیطی زیر را تنظیم کنید. جایگزین کردن PROJECT_ID به شناسه پروژه GCP شما.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

استفاده از ارزش ها PROJECT_ID и GCR_REPO هنگام ساختن تصویر داکر را تگ می کنید و آن را به یک رجیستری کانتینر خصوصی فشار می دهید.

2) پروژه پیش فرض GCP را برای ابزار خط فرمان تنظیم کنید gcloud.

gcloud config set project $PROJECT_ID

3) منطقه پیش فرض را برای ابزار خط فرمان تنظیم کنید gcloud.

gcloud config set compute/zone us-central1-b

4) مطمئن شوید که سرویس Container Registry در پروژه 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 یا روی رایانه با دستور اجرا کرد دكتر اجرا كننده. اما در یک محیط تولید، شما به راهی برای هماهنگی مرکزی کانتینرها نیاز دارید. به عنوان مثال، شما به سیستمی نیاز دارید که اطمینان حاصل کند که کانتینرها همیشه در حال اجرا هستند، و به روشی نیاز دارید تا در صورت افزایش ترافیک، نمونه‌های کانتینر اضافی را افزایش دهید و بچرخانید.

برای اجرای برنامه های کانتینری می توانید از آن استفاده کنید G.K.E.. 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 و منطقه پیش فرضی که شما مشخص کرده اید ایجاد می کند. برای اجرای ایستیو توصیه می کنیم حداقل 4 نود و یک ماشین مجازی داشته باشید n1-استاندارد-2.

تیم در چند دقیقه خوشه را ایجاد می کند. وقتی خوشه آماده شد، فرمان چیزی شبیه به این را خروجی می دهد сообщение.

2) اعتبار را در ابزار خط فرمان ارائه کنید کوبکتلبرای استفاده از آن برای مدیریت خوشه:

gcloud container clusters get-credentials istioready

3) اکنون می توانید با Kubernetes از طریق ارتباط برقرار کنید کوبکتل. به عنوان مثال، دستور زیر می تواند وضعیت گره ها را دریابد:

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، ظروف در غلاف اجرا می شوند. یک Pod در Kubernetes یک واحد تقسیم ناپذیر است. یک Pod یک یا چند ظرف را در خود جای می دهد. شما کانتینرهای سرور و بارگذار در غلاف های جداگانه هنگامی که چندین کانتینر در یک پاد وجود دارد (به عنوان مثال، یک سرور برنامه و سرور پروکسی، کانتینرها به عنوان یک موجودیت واحد مدیریت می شوند و منابع غلاف را به اشتراک می گذارند.
  • استقرارها. در Kubernetes، Deployment یک شی است که مجموعه ای از pods یکسان است. Deployment چندین کپی از غلاف ها را راه اندازی می کند که در گره های خوشه ای توزیع شده اند. استقرار به طور خودکار پادهایی را جایگزین می‌کند که از کار افتاده یا پاسخگو نیستند.
  • سرویس Kubernetes. هنگام اجرای کد برنامه در GKE، ارتباط بین بارگذار и سرور. هنگامی که خدمات را در ماشین مجازی یا دسکتاپ Cloud Shell شروع کردید، درخواست‌هایی را به آن ارسال کردید سرور توسط آدرس localhost: 8080. پس از استقرار در GKE، پادها بر روی گره های موجود اجرا می شوند. به‌طور پیش‌فرض، هیچ کنترلی روی گره‌ای که غلاف روی کدام گره اجرا می‌شود، ندارید، بنابراین شما غلاف ها بدون آدرس IP دائمی
    برای به دست آوردن آدرس IP برای سرور، باید یک انتزاع شبکه در بالای پادها تعریف کنید. همین است سرویس Kubernetes. سرویس Kubernetes یک نقطه پایانی پایدار برای مجموعه‌ای از pods فراهم می‌کند. مقدار کمی وجود دارد انواع خدمات. سرور استفاده می کند متعادل کننده بار، که یک آدرس IP خارجی برای تماس فراهم می کند سرور از خارج از خوشه
    Kubernetes همچنین دارای یک سیستم DNS داخلی است که نام های DNS را اختصاص می دهد (به عنوان مثال، helloserver.default.cluster.local) خدمات. به همین دلیل، غلاف‌های درون خوشه با سایر غلاف‌های خوشه در یک آدرس دائمی ارتباط برقرار می‌کنند. نام DNS را نمی توان در خارج از خوشه، مانند Cloud Shell یا رایانه استفاده کرد.

Kubernetes آشکار می شود

هنگامی که برنامه را از منبع اجرا می کردید، از دستور امری استفاده می کردید python3

server.py

امری مستلزم یک فعل است: "این را انجام بده".

Kubernetes استفاده می کند مدل اعلامی. این بدان معنی است که ما دقیقاً به کوبرنتیس نمی گوییم که چه کاری انجام دهد، بلکه وضعیت مطلوب را توصیف می کنیم. به عنوان مثال، Kubernetes در صورت نیاز، پادها را شروع و متوقف می کند تا مطمئن شود که وضعیت واقعی سیستم با وضعیت مطلوب مطابقت دارد.

شما وضعیت مورد نظر را در مانیفست ها یا فایل ها نشان می دهید یامل. یک فایل 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 نام استقرار را مشخص می کند.
  • فیلد اول تنظیمات شامل شرح حالت مورد نظر است.
  • spec.replicas تعداد غلاف مورد نظر را نشان می دهد.
  • بخش spec.template قالب پاد را تعریف می کند. یک فیلد در مشخصات غلاف وجود دارد تصویر، که نام تصویری را که باید از Container Registry استخراج شود مشخص می کند.

این سرویس به صورت زیر تعریف می شود:

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

  • متعادل کننده بار: مشتریان درخواست‌ها را به آدرس IP متعادل‌کننده بار ارسال می‌کنند که آدرس IP ثابتی دارد و از خارج از خوشه قابل دسترسی است.
  • targetPort: همانطور که به یاد دارید، تیم EXPOSE 8080 в dockerfile پورت ها را ارائه نکرد. شما پورت را ارائه می دهید 8080تا بتوانید با ظرف تماس بگیرید سرور خارج از خوشه در مورد ما hellosvc.default.cluster.local:80 (نام کوتاه: hellosvc) مربوط به پورت است 8080 آدرس های IP پاد سلام سرور.
  • بندر: این شماره پورتی است که سایر خدمات در خوشه درخواست ها را در آنجا ارسال می کنند.

loadgen.yaml

هدف استقرار به loadgen.yaml شبیه server.yaml. تفاوت این است که شی استقرار شامل یک بخش است env. متغیرهای محیطی مورد نیاز را تعریف می کند بارگذار و هنگام اجرای برنامه از منبع آن را نصب کرده اید.

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

جایگزین کردن PROJECT_ID به شناسه پروژه GCP شما.
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

جایگزین کردن 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) گزارش های برنامه را از غلاف استخراج کنید بارگذار. جایگزین کردن 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

بیایید به ایستیو بپردازیم

شما قبلاً یک برنامه کاربردی در GKE دارید. بارگذار می توانید از Kubernetes DNS استفاده کنید (hellosvc:80) برای ارسال درخواست به سرورو می توانید درخواست ها را به سرور توسط آدرس IP خارجی اگرچه Kubernetes دارای ویژگی های بسیاری است، اما برخی از اطلاعات در مورد خدمات گم شده است:

  • خدمات چگونه تعامل دارند؟ چه روابطی بین خدمات وجود دارد؟ چگونه ترافیک بین سرویس ها جریان دارد؟ آیا شما آگاه هستید که بارگذار درخواست ها را ارسال می کند سرور، اما تصور کنید که چیزی در مورد برنامه نمی دانید. برای پاسخ به این سؤالات، بیایید به لیست پادهای در حال اجرا در GKE نگاه کنیم.
  • معیارهای. چه مدت سرور به درخواست دریافتی پاسخ می دهد؟ در هر ثانیه چند درخواست توسط سرور دریافت می شود؟ پیغام خطا میده؟
  • اطلاعات امنیتی. ترافیک بین بارگذار и سرور فقط می گذرد HTTP یا توسط mTLS?

ایستیو به همه این سوالات پاسخ می دهد. برای انجام این کار، Istio یک پراکسی sidecar قرار می دهد فرستاده در هر غلاف پروکسی Envoy تمام ترافیک ورودی و خروجی به کانتینرهای برنامه را رهگیری می کند. این به آن معنا است سرور и بارگذار دریافت از طریق پراکسی sidecar Envoy، و تمام ترافیک از بارگذار к سرور از طریق پروکسی فرستاده می رود.

اتصالات بین پروکسی های Envoy یک شبکه خدماتی را تشکیل می دهند. معماری مش سرویس لایه ای از کنترل را در بالای Kubernetes فراهم می کند.

آماده سازی اپلیکیشن ایستیو

از آنجایی که پروکسی‌های Envoy در کانتینرهای خود اجرا می‌شوند، ایستیو را می‌توان در بالای یک خوشه GKE نصب کرد و تقریباً هیچ تغییری در کد برنامه ایجاد نشد. اما شما کارهایی را انجام داده اید تا برنامه خود را برای مدیریت ایستیو آماده کنید:

  • خدمات برای تمامی کانتینرها به استقرارها سرور и بارگذار به سرویس Kubernetes گره خورده است. زوج بارگذار، که درخواست های دریافتی را دریافت نمی کند، یک سرویس وجود دارد.
  • پورت های موجود در سرویس ها باید دارای نام باشند. اگرچه پورت های سرویس را می توان بدون نام در GKE رها کرد، ایستیو از شما می خواهد که مشخص کنید نام پورت مطابق پروتکل او در فایل YAML پورت برای سرور نامیده می شود HTTPزیرا سرور از پروتکل استفاده می کند HTTP... اگر سرویس استفاده شده gRPCپورت را نام ببرید grpc.
  • استقرارها پرچم گذاری شده اند. بنابراین، می توانید از ویژگی های مدیریت ترافیک ایستیو مانند تقسیم ترافیک بین نسخه های همان سرویس استفاده کنید.

نصب و راه اندازی

دو راه برای نصب ایستیو وجود دارد. می توان Istio را در پسوند GKE فعال کنید یا نسخه متن باز ایستیو را نصب کنید روی خوشه با Istio در GKE، می توانید به راحتی نصب و ارتقاء Istio را در طول چرخه عمر خوشه GKE مدیریت کنید. اگر می‌خواهید آخرین نسخه Istio یا کنترل بیشتری بر پیکربندی کنترل پنل Istio خود داشته باشید، نسخه منبع باز را به جای افزونه Istio در GKE نصب کنید. برای تصمیم گیری در مورد رویکرد، مقاله را بخوانید آیا به Istio در GKE نیاز دارم؟.

یک گزینه را انتخاب کنید، راهنمای مناسب را مرور کنید و دستورالعمل‌های نصب Istio را در کلاستر خود دنبال کنید. اگر می خواهید از Istio با برنامه جدید خود استفاده کنید، پیاده سازی sidecar را فعال کنید برای فضای نام به طور پیش فرض.

تمیز کردن

برای جلوگیری از کسر هزینه به حساب Google Cloud Platform شما بابت منابعی که در این آموزش استفاده کرده اید، پس از نصب Istio و بازی با برنامه نمونه، دسته کانتینر را حذف کنید. این همه منابع خوشه مانند نمونه های محاسباتی، دیسک ها و منابع شبکه را حذف می کند.

گام بعدی چیست؟

منبع: www.habr.com

اضافه کردن نظر