☸️ نحوه نصب و پیکربندی سرویس مش با Istio – Squad Security Security

مقدمه

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.161  9080 / 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 ایجاد شده 

      آزمایش

      برای تأیید تنظیمات ، موارد زیر را انجام دهید:

      1. زبانه مرورگر جدیدی را باز کنید
      2. نقطه پایانی DNS ارسال شده توسط فرمان قبلی دریافت سرویس istiogateway
      3. اضافه کردن / صفحه به انتهای این نقطه پایانی DNS
      4. برای دریافت صفحه ، Enter را فشار دهید.
      5. بارگیری مجدد را چندین بار فشار دهید تا ببینید که چگونه طرح و محتویات بررسی ها هنگام فراخوانی نسخه های مختلف تغییر می کند (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.yaml 

      Output

       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 -: -: - - :: -: - -: -: - - 3996
      
       metric.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.129  9090 / 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 -> 3000 

      GUI گرافانا را باز کنید

      یک ترمینال جدید را باز کنید و ارسال ترافیک به مش

       # 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/