مقدمه
Istio یک مش سرویس مستقل و منبع باز است که ملزومات موفقیت یک معماری میکروسرویس توزیع شده را فراهم می کند.
Mesh Service یک لایه زیربنایی اختصاصی برای پردازش ارتباط بین خدمات است.
پاسخ می دهد. برای تحویل قابل اعتماد درخواست ها از طریق توپولوژی پیچیده خدماتی که یک برنامه کاربردی مدرن ابری را تشکیل می دهند.
Service Mesh Istio به طور منطقی به صفحه داده داده و و هواپیمای کنترل تقسیم می شود. ] شامل مجموعه ای از اطلاعات است این پراکسی ها کلیه ارتباطات شبکه بین میکرو سرویس ها ، و همچنین میکسر ، یک مرکز جهانی سیاست ها و تله متری را کنترل و کنترل می کنند.
بیایید نگاهی دقیق تر به هر یک از مؤلفه های تشکیل دهنده این سرویس خدمات مش
- فرستاده
-
شفاف پردازش ورودی ترافیک I / O بین خدمات.
-
- خلبان
-
خلبان کشف سرویس هایی را برای پیاده روهای فرستاده ، و همچنین کنترل ترافیک برای مسیریابی هوشمند (به عنوان مثال ، تست های A / B ، استقرار قناری و غیره) و تحمل خطا (
-
- میکسر
-
میکسر کنترل دسترسی و استفاده از خط مشی را فراهم می کند و داده های تله متری را از سرور پروکسی Envoy و سایر خدمات جمع آوری می کند.
-
- Citadel
-
Citadel احراز هویت قوی را ارائه می دهد. بین خدمات و کاربران نهایی با همه شناسایی swarm و مدیریت اعتبار.
-
ISTIO CLI
را بارگیری و نصب کنید قبل از شروع تنظیمات Istio ، ابتدا باید ابزارهای خط فرمان را نصب کنید که با آنها تعامل برقرار خواهید کرد.
برای انجام این کار ، دستور زیر را اجرا کنید: [19659022] curl -L https://git.io/getLatestIstio | sh –
// نسخه می تواند متفاوت باشد با به روز رسانی istio
cd istio- *
sudo mv -v bin / istioctl / usr / local / bin /
خروجی مثال:
# curl -L https://git.io/getLatestIstio | sh -
٪ مجموع٪ دریافت شده٪ Xferd میانگین سرعت زمان زمان زمان فعلی
بارگذاری سرعت بارگذاری شده در کل بارگذاری کنید
0 0 0 0 0 0 0 0 0 -: -: - - -: -: - - ::: - 0
100 1631 100 1631 0 0 1849 0 -: -: - - ::: - -: - - 1849
بارگیری istio-1.1.2 از https://github.com/istio/istio/releases/download/1.1.2/istio-1.1.2-linux.tar.gz ...
٪ مجموع٪ دریافت شده٪ Xferd میانگین سرعت زمان زمان زمان فعلی
بارگذاری سرعت بارگذاری شده در کل بارگذاری کنید
100 614 0 614 0 0 1485 0 -: -: - - -: -: - -: -: - 1483
100 15.0M 100 15.0M 0 0 8379k 0 0:00:01 0:00:01 -: -:: - 21.5M
بارگیری در istio-1.1.2:
bin install istio-telemetry.yaml istio.VERSION LICENSE README ابزار نمونه
/root/istio-1.1.2/bin را به مسیر خود اضافه کنید؛ به عنوان مثال کپی کردن خمیر در پوسته و / یا ~ /. پروفیلی:
صادرات PATH = "$ PATH: /root/istio-1.1.2/bin"
root @ kube-master: ~ # cd istio- *
root @ kube-master: ~ / istio-1.1.2 # sudo mv -v bin / istioctl / usr / local / bin /
'bin / istioctl' -> '/ usr / local / bin / istioctl'
نصب ISTIO
یک حساب کاربری برای Tiller تعریف کنید
ابتدا یک حساب کاربری برای Tiller ایجاد کنید:
kubectl اعمال -f install / kubernetes / helm / helm-service-account.yaml
خروجی:
serviceaccount / پناه بدون تغییر
clusterrolebinding.rbac.authorization.k8s.io/tiller بدون تغییر
نصب Istio CRD
# helm install install install / kubernetes / helm / istio-init --name istio-init --namespace istio-system
نصب را تأیید کنید :
# kubectl get crds | grep 'istio.io'
adapters.config.istio.io 2019-04-08T12: 39: 02Z
apikeys.config.istio.io 2019-04-08T12: 39: 02Z
attributemanifests.config.istio.io 2019-04-08T12: 39: 01Z
autorizations.config.istio.io 2019-04-08T12: 39: 02Z
bypasses.config.istio.io 2019-04-08T12: 39: 02Z
checknothings.config.istio.io 2019-04-08T12: 39: 02Z
circonuses.config.istio.io 2019-04-08T12: 39: 02Z
cloudwatches.config.istio.io 2019-04-08T12: 39: 00Z
clusterrbacconfigs.rbac.istio.io 2019-04-08T12: 39: 01Z
deniers.config.istio.io 2019-04-08T12: 39: 02Z
destinationrules.networking.istio.io 2019-04-08T12: 39: 01Z
dogstatsds.config.istio.io 2019-04-08T12: 39: 00Z
edge.config.istio.io 2019-04-08T12: 39: 02Z
envoyfilters.networking.istio.io 2019-04-08T12: 39: 01Z
fluentds.config.istio.io 2019-04-08T12: 39: 02Z
gateways.networking.istio.io 2019-04-08T12: 39: 01Z
.....
....
سرانجام ، مؤلفه های اصلی Istio را نصب کنید:
# helm install install / kubernetes / helm / istio --name istio - namespace istio-system --set global.configValidation = false --set sidecarInjectorWebhook.enabled = false --set grafana.enabled = true --set servicegraph.enabled = true
خدمات نصب شده را بررسی کنيد:
# kubectl get svc -n istio-system
نام خانوادگی TYPE CLUSTER-IP EXTERNAL-IP PORT (S) سن
grafana ClusterIP 10.96.171.173 3000 / TCP 2m40s
istio-citadel ClusterIP 10.96.65.75 8060 / TCP، 15014 / TCP 2m40s
istio-galley ClusterIP 10.106.97.125 443 / TCP، 15014 / TCP، 9901 / TCP 2m40s
istio-ingressgateway LoadBalancer 10.102.204.117 172.20.240.112 80: 31380 / TCP، 443: 31390 / TCP، 31400: 31400 / TCP، 15029: 30709 / TCP، 15030: 30672 / TCP، 15031: 31789 / TCP، 15032: 32654 / TCP ، 15443: 30390 / TCP ، 15020: 31778 / TCP 2m40s
istio-pilot ClusterIP 10.109.0.98 15010 / TCP، 15011 / TCP، 8080 / TCP، 15014 / TCP 2m40s
خوشه istio-Policy ClusterIP 10.106.140.39 9091 / TCP، 15004 / TCP، 15014 / TCP 2m40s
خوشه istio-teletetry 10.98.74.109 9091 / TCP، 15004 / TCP، 15014 / TCP، 42422 / TCP 2m40s
ClusterIP پرومتئوس 10.98.183.129 9090 / TCP 2m40s
servicegraph ClusterIP 10.100.212.98 8088 / TCP
تأیید کنید که تپه ها عملیاتی هستند.
# kubectl get غلاف ها-istio-system
نام مستقل وضعیت احیاء سن
grafana-57586c685b-5nsb9 1/1 در حال اجرا 0 3m25s
istio-citadel-7579f8fbb9-frnqz 1/1 Running 0 3m25s
istio-galley-79d4c5d9f7-llpvk 1/1 در حال اجرا 0 3m25s
istio-ingressgateway-5fbcf4488f-vzt98 1/1 در حال اجرا 0 3m25s
istio-init-crd-10-cwn8j 0/1 0 6m28s کامل شد
istio-init-crd-11-k4lx4 0/1 0 6m28s کامل شد
istio-pilot-df78f86cb-sfzjt 2/2 در حال اجرا 0 3m25s
istio-policy-5f4747447c-rvt72 2/2 در حال اجرا 2 3m25s
istio-telemetry-84697c64d7-btbbm 2/2 در حال اجرا 2 3m25s
prometheus-66c9f5694-lp2wq 1/1 در حال اجرا 0 3m25s
servicegraph-57d6f5b58c-4m92m 1/1 در حال اجرا 1 3m24s
برنامه نمونه را گسترش دهید
اکنون که کلیه منابع برای Istio نصب شده ایم ، از یک برنامه نمونه به نام BookInfo استفاده خواهیم کرد تا ویژگی های کلیدی مش سرویس ، مانند تست مسیریابی هوشمند و مشاهده داده های تله متری با استفاده از Prometheus & Grafana.

برنامه Bookinfo به چهار ریز خدمات جداگانه تقسیم شده است:
- صفحه محصول . . میکروزر [جزئیات] شامل اطلاعات مربوط به خوانندگان کتاب است.
- بررسی . بررسی های میکروسرویس شامل بررسی کتاب ها است.
- رتبه بندی ها. رتبه بندی میکروسرویس شامل اطلاعات مربوط به رتبه بندی کتاب است که همراه با بررسی کتاب است. [19659055] 3 نسخه از بررسی های میکروسرویس وجود دارد:
- نسخه v1 سرویس رتبه بندی را صدا نمی کند.
- نسخه v2 سرویس رتبه بندی را فراخوانی می کند و هر رتبه بندی را در قالب 1 تا 5 ستاره سیاه نمایش می دهد.
- نسخه v3 سرویس را رتبه بندی می کند و هر امتیاز را در قالب 1 تا 5 ستاره قرمز نمایش می دهد.
استقرار نمونه با
برنامه های نمونه را بصورت دستی با افزودن پروکسی istio گسترش دهید و تأیید کنید که خدمات به درستی کار می کنند
# kubectl اعمال --f <(istioctl kube-inject -f نمونه / bookinfo / platform / kube / bookinfo .yaml) مثال خروجی:خدمات / جزئیات ایجاد شده است deployment.extensions / details-v1 ایجاد شد سرویس / رتبه بندی ایجاد شده است deployment.extensions / ratings-v1 ایجاد شده است خدمات / بررسیهای ایجاد شده deployment.extensions / review-v1 ایجاد شده است deployment.extensions / review-v2 ایجاد شده است deployment.extensions / review-v3 ایجاد شد سرویس / صفحه ایجاد شده است deployment.extensions / productpage-v1 ایجاد شدهتأیید کنید که غلاف و سرویس ها در حال اجرا هستند:
# kubectl get غلاف ، svc نام مستقل وضعیت احیاء سن pod / details-v1-54c6f46b4b-q5b45 2/2 در حال اجرا 0 58s غلاف / my-nginx-6cc48cd8db-n6scm 1/1 در حال اجرا 4 27d pod / productpage-v1-5c4f6df4dd-7lcws 2/2 در حال اجرا 0 58s pod / ratings-v1-6ccbd9c4f4-2cjbd 2/2 در حال اجرا 0 58 pod / review-v1-bfc99c79-jhqr6 2/2 در حال اجرا 0 58s pod / review-v2-6ffb5f6b44-zf9tt 2/2 در حال اجرا 0 58s pod / review-v3-7c67bd445-bc5ms 2/2 در حال اجرا 0 58s نام خانوادگی TYPE CLUSTER-IP EXTERNAL-IP PORT (S) سن خدمات / جزئیات ClusterIP 10.99.96.1619080 / TCP 58s service / kubernetes ClusterIP 10.96.0.1 443 / TCP 27d سرویس / صفحه ClusterIP 10.106.134.93 9080 / TCP 58 سرویس / رتبه بندی ClusterIP 10.106.213.22 9080 / TCP 58 سرویس / بررسی ClusterIP 10.100.60.83 9080 / TCP 58s خدمات و ورودی مجازی را تعریف کنید:
# kubectl اعمال -f نمونه ها / bookinfo / networking / bookinfo-gateway.yaml [1945902424]خروجی:
gateway.networking.istio.io/bookinfo-gateway ایجاد شد virtualservice.networking.istio.io/bookinfo ایجاد شدهآزمایش
برای تأیید تنظیمات ، موارد زیر را انجام دهید:
- زبانه مرورگر جدیدی را باز کنید
- نقطه پایانی DNS ارسال شده توسط فرمان قبلی دریافت سرویس istiogateway
- اضافه کردن / صفحه به انتهای این نقطه پایانی DNS
- برای دریافت صفحه ، Enter را فشار دهید.
- بارگیری مجدد را چندین بار فشار دهید تا ببینید که چگونه طرح و محتویات بررسی ها هنگام فراخوانی نسخه های مختلف تغییر می کند (v1 ، v2 ، v3) برنامه های کاربردی.
پیکربندی مسیریابی درخواست
نسخه های خدمات (با نام زیر مجموعه ها ).
سناریوهای استقرار مداوم ، سرویس ارائه شده ممکن است زیر مجموعه های مختلفی داشته باشد و ممکن است نسخه های مختلفی از همان برنامه را اجرا کند.
سناریوهای متداول که در آن اتفاق می افتد شامل آزمایش A / B ، استقرار قناری ها و غیره است.
] انتخاب نسخه خاص با توجه به معیارهای مختلف (هدر ، URL ، و غیره) و / یا جلد اختصاص یافته به هر نسخه قابل تصمیم گیری است.
هر سرویس دارای نسخه پیش فرض است که شامل تمام نمونه های آن است.
برای نشان دادن این رفتار
از قانون واگذاری استفاده کنید
# kubectl اعمال --f نمونه ها / bookinfo / شبکه سازی / مقصد-قانون-all.yamlخروجی:
destinationrule.networking.istio .io / صفحه ایجاد شده است destinationrule.networking.istio.io/reviews ایجاد شد destinationrule.networking.istio.io/ratings ایجاد شد destinationrule.networking.istio.io/details ایجاد شدهمشاهده قانون مقصد برای bookinfo
kubectl دریافت مقصد -o yamlخروجی:
... ... مشخصات: میزبان: جزئیات زیر مجموعه ها: - برچسب ها: نسخه: v1 نام: v1 - برچسب ها: نسخه: v2 نام: v2 مشخصات: میزبان: صفحه زیر مجموعه ها: - برچسب ها: نسخه: v1 نام: v1 مشخصات: میزبان: رتبه بندی زیر مجموعه ها: - برچسب ها: نسخه: v1 نام: v1 - برچسب ها: نسخه: v2 نام: v2 - برچسب ها: نسخه: v2-mysql نام: v2-mysql - برچسب ها: نسخه: v2-mysql-vm نام: v2-mysql-vm مشخصات: میزبان: بررسی زیر مجموعه ها: - برچسب ها: نسخه: v1 نام: v1 - برچسب ها: نسخه: v2 نام: v2 - برچسب ها: نسخه: v3 name: v3برای مسیریابی فقط به یک نسخه ، از خدمات مجازی استفاده می کنید که نسخه پیش فرض را برای خدمات خرد تنظیم می کنند.
در این حالت ، خدمات مجازی تمام ترافیک را به بررسی هدایت می کنند: v1 .
# kubectl اعمال نمونه های -f / bookinfo / شبکه سازی / خدمات مجازی-all-v1.yamlخروجی
virtualservice.networking.istio.io/productpage ایجاد شده virtualservice.networking.istio.io/reviews ایجاد شد virtualservice.networking.istio.io/ratings ایجاد شد virtualservice.networking.istio.io/details ایجاد شده# kubectl دریافت بررسیهای خدمات مجازی -o yamlخروجی
....... ....... مشخصات: میزبان: - بررسی http: - مسیر: - مقصد: میزبان: بررسی زیرمجموعه: v1چندین بار بارگذاری مجدد صفحه را انجام دهید و توجه کنید که چگونه هر بار فقط نسخه 1 نمایش داده می شود!

مسیری براساس شناسایی کاربر
مسیریابی کاربر.
در این حالت ، کلیه ترافیک ها از یک کاربر به نام جیسون به بررسی خدمات هدایت می شود: v2.
# kubectl اعمال نمونه ها -f / bookinfo / شبکه سازی / virtual-service-review-test-v2.yamlOutput
virtualservice.networking. istio.io/reviews پیکربندی شدهاگر عنوان کاربر جیسون است ، به [ بررسی ها هدایت می شود: v2 .
kubectl get virtualservice revi میس -و یامل ........... ........... مشخصات: میزبان: - بررسی http: - مطابقت: - هدر: کاربر نهایی: دقیق: جیسون مسیر: - مقصد: میزبان: بررسی زیر مجموعه: v2 - مسیر: - مقصد: میزبان: بررسی زیرمجموعه: v1اکنون با ورود به سیستم نام کاربری جیسون ، آن را امتحان کنید و رمز عبور را خالی بگذارید

مسیر مبتنی بر ترافیک
در مرحله بعد ، ما نشان خواهیم داد که چگونه به تدریج بتوانیم ترافیک را از یک نسخه از میکروسرویس به دیگری انتقال دهیم.
در مثال ما ، 50٪ از ترافیک را به بررسیها ارسال خواهیم کرد: v1 و 50٪ به بررسی: v3.
kubectl اعمال نمونه های -f / bookinfo / شبکه / مجازی-خدمات-همه-v1.yaml kubectl اعمال نمونه -f نمونه ها / bookinfo / شبکه / مجازی-خدمات-بررسی-50-v3.yaml kubectl دریافت بررسیهای خدمات مجازی -o yamlزیر مجموعه برای 50٪ ترافیک در v1 و 50٪ ترافیک در v3 برای همه درخواست ها تنظیم شده است بررسی
root @ kube- استاد: ~ / istio-1.1.2 # kubectl بررسیهای خدمات مجازی -o yll را دریافت کنید ............. ............. مشخصات: میزبان: - بررسی http: - مسیر: - مقصد: میزبان: بررسی زیر مجموعه: v1 وزن: 50 - مقصد: میزبان: بررسی زیر مجموعه: v3 وزن: 50برای بررسی این ، دوباره و بارها مرورگر خود را تازه کنید و فقط بررسی ها را مشاهده خواهید کرد: v1 و بررسی ها: v3.

نظارت و تجسم IIstio
ابتدا داده های جدید telemetry را جمع کنید و یک پرونده بارگذاری کنید YAML برای ذخیره سازی پیکربندی برای جریان جدید متریک و ورود به سیستم که Istio به طور خودکار تولید و جمع می کند.
# curl -LO https://eksworkshop.com/servicemesh/deploy.files/istio-telemetry. یامل # kubectl اعمال -f istio-telemetry.yamlخروجی:
٪ Total٪ دریافت شده٪ Xferd میانگین سرعت زمان زمان فعلی بارگذاری سرعت بارگذاری شده در کل بارگذاری کنید 0 0 0 0 0 0 0 0 0 -: -: - - -: -: - - ::: - 0 100 2254 100 2254 0 0 3994 0 -: -: - - :: -: - -: -: - - 3996metric.config.istio.io/doublequestcount ایجاد شد prometheus.config.istio.io/doublehandler ایجاد شد rul.config.istio.io/doubleprom ایجاد شد logentry.config.istio.io/newlog ایجاد شد stdio.config.istio.io/newhandler ایجاد شده است rul.config.istio.io/newlogstdio ایجاد شدهتأیید کنید که خدمات پرومتئوس و گرافانا در دسترس هستند
# kubectl -n istio-system get prometheus svc نام خانوادگی TYPE CLUSTER-IP EXTERNAL-IP PORT (S) سن Prometheus ClusterIP 10.98.183.1299090 / TCP 75m # kubectl -n istio-system get svc grafana نام خانوادگی TYPE CLUSTER-IP EXTERNAL-IP PORT (S) سن grafana ClusterIP 10.96.171.173 3000 / TCP 75m پیکربندی حمل و نقل پورت برای گرافانا
kubectl -n istio-system port-forward $ (kubectl -n istio-system get pod -l app = grafana -o jsonpath = 'items. آیتم ها [0] .metadata.name name') 8080: 3000خروجی:
موارد [0] .metadata.name} ') 8080: 3000 حمل و نقل از 127.0.0.1:8080 -> 3000GUI گرافانا را باز کنید

یک ترمینال جدید را باز کنید و ارسال ترافیک به مش
# while true؛ curl -o / dev / null -s "172.20.240.112/productpage"؛ انجام شده
حذف نیمکت تست
مورد نیاز:
- حذف پیکربندی تله متری
- حذف برنامه خدمات مجازی / قوانین تعیین تکلیف
- حذف دروازه
- حذف Istio
kubectl حذف -f istio-telemetry.yaml kubectl Delete -f نمونه ها / bookinfo / networking / virtual-service-all-v1.yaml kubectl Delete -f نمونه / bookinfo / شبکه / مقصد-قانون-all.yaml kubectl Delete -f نمونه ها / bookinfo / networking / bookinfo-gateway.yaml kubectl Delete -f نمونه ها / bookinfo / platform / kube / bookinfo.yaml را حذف کنید helm Delete --purge istio helm remove --purge istio-initپیوندهای کمک کننده
https://istio.io/docs/
- نسخه v1 سرویس رتبه بندی را صدا نمی کند.