Bii o ṣe le ṣiṣẹ Istio nipa lilo Kubernetes ni iṣelọpọ. Apa 1

ohun Istio? Eyi ni ohun ti a pe ni mesh Iṣẹ, imọ-ẹrọ kan ti o ṣafikun Layer ti abstraction lori nẹtiwọọki naa. A ṣe idiwọ gbogbo tabi apakan ti ijabọ ninu iṣupọ ati ṣe eto awọn iṣẹ kan pẹlu rẹ. Ewo ni? Fun apẹẹrẹ, a ṣe ipa-ọna ọlọgbọn, tabi a ṣe imuse ọna fifọ Circuit, a le ṣeto “imuṣiṣẹ Canary”, yiyipada ijabọ apakan si ẹya tuntun ti iṣẹ naa, tabi a le ṣe idinwo awọn ibaraẹnisọrọ ita ati ṣakoso gbogbo awọn irin ajo lati iṣupọ si ita nẹtiwọki. O ṣee ṣe lati ṣeto awọn ofin eto imulo lati ṣakoso awọn irin ajo laarin awọn oriṣiriṣi awọn iṣẹ microservices. Nikẹhin, a le gba gbogbo maapu ibaraenisepo nẹtiwọọki ati jẹ ki ikojọpọ iṣọkan ti awọn metiriki han gbangba si awọn ohun elo.

O le ka nipa siseto iṣẹ ni osise iwe aṣẹ. Istio jẹ ohun elo ti o lagbara gaan ti o fun ọ laaye lati yanju ọpọlọpọ awọn iṣẹ ṣiṣe ati awọn iṣoro. Ninu nkan yii, Emi yoo fẹ lati dahun awọn ibeere akọkọ ti o waye nigbagbogbo nigbati o bẹrẹ pẹlu Istio. Eyi yoo ṣe iranlọwọ fun ọ ni iyara lati koju rẹ.

Bii o ṣe le ṣiṣẹ Istio nipa lilo Kubernetes ni iṣelọpọ. Apa 1

Bi o ti ṣiṣẹ

Istio ni awọn agbegbe akọkọ meji - ọkọ ofurufu iṣakoso ati ọkọ ofurufu data. Awọn ọkọ ofurufu iṣakoso ni awọn eroja akọkọ ti o rii daju pe iṣẹ ti o tọ ti iyokù. Ninu ẹya lọwọlọwọ (1.0) ọkọ ofurufu iṣakoso ni awọn paati akọkọ mẹta: Pilot, Mixer, Citadel. A kii yoo gbero Citadel, o nilo lati ṣe agbekalẹ awọn iwe-ẹri lati rii daju TLS laarin awọn iṣẹ. Jẹ ki a ṣe akiyesi ohun elo ati idi ti Pilot ati Mixer.

Bii o ṣe le ṣiṣẹ Istio nipa lilo Kubernetes ni iṣelọpọ. Apa 1

Pilot jẹ paati iṣakoso akọkọ ti o pin gbogbo alaye nipa ohun ti a ni ninu iṣupọ - awọn iṣẹ, awọn aaye ipari wọn ati awọn ofin ipa-ọna (fun apẹẹrẹ, awọn ofin fun imuṣiṣẹ Canary tabi awọn ofin fifọ Circuit).

Mixer jẹ paati iṣakoso ọkọ ofurufu yiyan ti o pese agbara lati gba awọn metiriki, awọn akọọlẹ, ati alaye eyikeyi nipa ibaraenisepo nẹtiwọọki. O tun ṣe abojuto ibamu pẹlu awọn ofin Ilana ati ibamu pẹlu awọn opin oṣuwọn.

Ofurufu data ti wa ni imuse lilo sidecar aṣoju awọn apoti. Alagbara ni lilo nipasẹ aiyipada. aṣoju aṣoju. O le rọpo nipasẹ imuse miiran, gẹgẹbi nginx (nginmesh).

Ni ibere fun Istio lati ṣiṣẹ ni gbangba si awọn ohun elo, eto abẹrẹ laifọwọyi wa. Imuse tuntun dara fun awọn ẹya Kubernetes 1.9+ (webu gbigba gbigba iyipada). Fun awọn ẹya Kubernetes 1.7, 1.8 o ṣee ṣe lati lo Initializer.

Sidecar awọn apoti ti wa ni ti sopọ si Pilot lilo GRPC Ilana, eyi ti o faye gba o lati je ki awọn titari awoṣe fun awọn ayipada waye ninu awọn iṣupọ. A ti lo GRPC ni Aṣoju lati ẹya 1.6, ni Istio o ti lo lati ẹya 0.8 ati pe o jẹ aṣoju-aṣoju-aṣoju golang kan lori aṣoju ti o tunto awọn aṣayan ifilọlẹ.

Pilot ati Mixer jẹ awọn paati ti ko ni ipinlẹ patapata, gbogbo ipinlẹ wa ni iranti. Iṣeto ni fun wọn ti ṣeto ni irisi Awọn orisun Aṣa Kubernetes, eyiti a fipamọ sinu ati bẹbẹ lọ.
Aṣoju Istio gba adirẹsi Pilot ati ṣi ṣiṣan GRPC kan si.

Gẹgẹbi Mo ti sọ, Istio ṣe gbogbo iṣẹ ṣiṣe ni gbangba si awọn ohun elo. Jẹ ká wo bi. Algorithm ni eyi:

  1. Gbigbe ẹya tuntun ti iṣẹ naa.
  2. Ti o da lori ọna injecting eiyan sidecar, eiyan istio-init ati eiyan oluranlowo istio-aṣoju (aṣoju) ti wa ni afikun ni ipele ti lilo iṣeto ni, tabi wọn le ti fi sii pẹlu ọwọ sinu apejuwe ti nkan Kubernetes Pod.
  3. Apoti istio-init jẹ iwe afọwọkọ ti o kan awọn ofin iptables si podu naa. Awọn aṣayan meji wa fun atunto ijabọ lati wa ni we sinu apo-iṣoro-aṣoju: lo awọn ofin atunṣe iptables, tabi TPRXY. Ni akoko kikọ, ọna aiyipada jẹ pẹlu awọn ofin àtúnjúwe. Ni istio-init, o ṣee ṣe lati tunto iru ijabọ ti o yẹ ki o wa ni idilọwọ ati firanṣẹ si aṣoju istio. Fun apẹẹrẹ, lati le ṣe idiwọ gbogbo awọn ti nwọle ati gbogbo ijabọ ti njade, o nilo lati ṣeto awọn paramita -i и -b sinu itumo *. O le pato awọn ebute oko oju omi kan pato lati wọle. Ni ibere ki o má ba ṣe idilọwọ awọn subnet kan pato, o le ṣe pato nipa lilo asia -x.
  4. Lẹhin ti awọn apoti init ti ṣiṣẹ, awọn akọkọ ti ṣe ifilọlẹ, pẹlu aṣoju-aṣoju (aṣoju). O sopọ mọ Pilot ti a ti gbe lọ tẹlẹ nipasẹ GRPC ati gba alaye nipa gbogbo awọn iṣẹ ti o wa ati awọn ilana ipa-ọna ninu iṣupọ. Gẹgẹbi data ti o gba, o tunto awọn iṣupọ ati fi wọn ranṣẹ taara si awọn aaye ipari ti awọn ohun elo wa ni iṣupọ Kubernetes. O tun jẹ dandan lati ṣe akiyesi aaye pataki kan: aṣoju tunto awọn olutẹtisi ni agbara (IP, awọn orisii ibudo) ti o bẹrẹ gbigbọ. Nitorinaa, nigbati awọn ibeere ba tẹ adarọ-ese, ti wa ni darí nipa lilo awọn ofin iptables àtúnjúwe ni sidecar, aṣoju le ti ṣaṣeyọri awọn ọna asopọ wọnyi tẹlẹ ki o loye ibiti o ti le siwaju si aṣoju ijabọ naa. Paapaa ni ipele yii, a fi alaye ranṣẹ si Mixer, eyiti a yoo wo nigbamii, ati awọn akoko wiwa wa ni fifiranṣẹ.

Bi abajade, a gba gbogbo nẹtiwọọki ti awọn olupin aṣoju aṣoju ti a le tunto lati aaye kan (Pilot). Gbogbo awọn ibeere ti nwọle ati ti njade lọ nipasẹ aṣoju. Jubẹlọ, nikan TCP ijabọ ti wa ni intercepted. Eyi tumọ si pe IP iṣẹ Kubernetes ti pinnu nipa lilo kube-dns lori UDP laisi iyipada. Lẹhinna, lẹhin ipinnu, ibeere ti njade ti wa ni idilọwọ ati ilana nipasẹ aṣoju, eyiti o pinnu tẹlẹ iru aaye ipari ti ibeere naa yẹ ki o firanṣẹ si (tabi ko firanṣẹ, ninu ọran ti awọn eto imulo iwọle tabi fifọ Circuit ti algorithm).

A ṣe ayẹwo Pilot, ni bayi a nilo lati ni oye bi Mixer ṣe n ṣiṣẹ ati idi ti o ṣe nilo. O le ka iwe aṣẹ fun u nibi.

Alapọpọ ni fọọmu lọwọlọwọ ni awọn paati meji: istio-telemetry, eto imulo istio (ṣaaju ẹya 0.8 o jẹ paati istio-mixer kan). Mejeji ti wọn wa ni mixers, kọọkan ti eyi ti o jẹ lodidi fun awọn oniwe-ara-ṣiṣe. Istio telemetry gba alaye nipa tani lọ nibiti ati pẹlu awọn aye wo lati awọn apoti ijabọ sidecar nipasẹ GRPC. Ilana Istio gba Awọn ibeere Ṣayẹwo lati rii daju pe awọn ofin Ilana ni itẹlọrun. Awọn sọwedowo eto imulo jẹ, dajudaju, ko ṣe fun gbogbo ibeere, ṣugbọn ti wa ni ipamọ lori alabara (ninu ọkọ ayọkẹlẹ ẹgbẹ) fun akoko kan. Awọn sọwedowo ijabọ ni a firanṣẹ bi awọn ibeere ipele. Jẹ ki a wo bii o ṣe le tunto ati kini awọn paramita yẹ ki o firanṣẹ diẹ diẹ nigbamii.

Mixer yẹ ki o jẹ paati ti o wa pupọ ti o ni idaniloju iṣẹ ti ko ni idilọwọ lori apejọ ati sisẹ data telemetry. Awọn eto ti wa ni gba bi awọn kan abajade bi a olona-ipele saarin. Ni ibẹrẹ, data ti wa ni buffered lori ẹgbẹ ẹgbẹ ti awọn apoti, lẹhinna ni ẹgbẹ alapọpọ, ati lẹhinna firanṣẹ si ohun ti a pe ni awọn ẹhin aladapọ. Bi abajade, ti eyikeyi awọn paati eto ba kuna, ifipamọ naa dagba ati ki o fọ lẹhin ti eto naa ti tun pada. Awọn ẹhin aladapọ jẹ awọn aaye ipari fun fifiranṣẹ data telemetry: awọn iṣiro, newrelic, ati bẹbẹ lọ. O le kọ ara rẹ backend, o jẹ ohun rọrun, ati awọn ti a yoo ri bi o lati se o.

Bii o ṣe le ṣiṣẹ Istio nipa lilo Kubernetes ni iṣelọpọ. Apa 1

Lati ṣe akopọ, ero fun ṣiṣẹ pẹlu istio-telemetry jẹ atẹle.

  1. Iṣẹ 1 firanṣẹ ibeere kan si iṣẹ 2.
  2. Nigbati o ba lọ kuro ni iṣẹ 1, ibeere naa ni a we sinu ọkọ ayọkẹlẹ tirẹ.
  3. Aṣoju Sidecar ṣe abojuto bi ibeere naa ṣe lọ si iṣẹ 2 ati mura alaye pataki.
  4. Lẹhinna firanṣẹ si istio-telemetry nipa lilo ibeere ijabọ kan.
  5. Istio-telemetry pinnu boya o yẹ ki o firanṣẹ Iroyin yii si awọn ẹhin, eyiti ati kini data yẹ ki o firanṣẹ.
  6. Istio-telemetry firanṣẹ data Iroyin si ẹhin ti o ba nilo.

Bayi jẹ ki a wo bii o ṣe le mu Istio ṣiṣẹ ninu eto naa, ti o ni awọn paati akọkọ (Pilot ati aṣoju ẹgbẹ ẹgbẹ).

Ni akọkọ, jẹ ki a wo iṣeto akọkọ (mesh) ti Pilot ka:

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio
  namespace: istio-system
  labels:
    app: istio
    service: istio
data:
  mesh: |-

    # пока что не включаем отправку tracing информации (pilot настроит envoy’и таким образом, что отправка не будет происходить)
    enableTracing: false

    # пока что не указываем mixer endpoint’ы, чтобы sidecar контейнеры не отправляли информацию туда
    #mixerCheckServer: istio-policy.istio-system:15004
    #mixerReportServer: istio-telemetry.istio-system:15004

    # ставим временной промежуток, с которым будет envoy переспрашивать Pilot (это для старой версии envoy proxy)
    rdsRefreshDelay: 5s

    # default конфигурация для envoy sidecar
    defaultConfig:
      # аналогично как rdsRefreshDelay
      discoveryRefreshDelay: 5s

      # оставляем по умолчанию (путь к конфигурации и бинарю envoy)
      configPath: "/etc/istio/proxy"
      binaryPath: "/usr/local/bin/envoy"

      # дефолтное имя запущенного sidecar контейнера (используется, например, в именах сервиса при отправке tracing span’ов)
      serviceCluster: istio-proxy

      # время, которое будет ждать envoy до того, как он принудительно завершит все установленные соединения
      drainDuration: 45s
      parentShutdownDuration: 1m0s

      # по умолчанию используются REDIRECT правила iptables. Можно изменить на TPROXY.
      #interceptionMode: REDIRECT

      # Порт, на котором будет запущена admin панель каждого sidecar контейнера (envoy)
      proxyAdminPort: 15000

      # адрес, по которому будут отправляться trace’ы по zipkin протоколу (в начале мы отключили саму отправку, поэтому это поле сейчас не будет использоваться)
      zipkinAddress: tracing-collector.tracing:9411

      # statsd адрес для отправки метрик envoy контейнеров (отключаем)
      # statsdUdpAddress: aggregator:8126

      # выключаем поддержку опции Mutual TLS
      controlPlaneAuthPolicy: NONE

      # адрес, на котором будет слушать istio-pilot для того, чтобы сообщать информацию о service discovery всем sidecar контейнерам
      discoveryAddress: istio-pilot.istio-system:15007

Gbogbo awọn paati iṣakoso akọkọ (ọkọ ofurufu iṣakoso) yoo wa ni aaye istio-system ni Kubernetes.

Ni o kere ju, a nilo nikan lati ran Pilot lọ. Fun eyi a lo iru iṣeto ni.

Ati pe a yoo tunto pẹlu ọwọ abẹrẹ ẹgbẹ ẹgbẹ abẹrẹ ti eiyan naa.

Apoti inu:

initContainers:
 - name: istio-init
   args:
   - -p
   - "15001"
   - -u
   - "1337"
   - -m
   - REDIRECT
   - -i
   - '*'
   - -b
   - '*'
   - -d
   - ""
   image: istio/proxy_init:1.0.0
   imagePullPolicy: IfNotPresent
   resources:
     limits:
       memory: 128Mi
   securityContext:
     capabilities:
       add:
       - NET_ADMIN

Ati awọn ọkọ ayọkẹlẹ:

       name: istio-proxy
       args:
         - "bash"
         - "-c"
         - |
           exec /usr/local/bin/pilot-agent proxy sidecar 
           --configPath 
           /etc/istio/proxy 
           --binaryPath 
           /usr/local/bin/envoy 
           --serviceCluster 
           service-name 
           --drainDuration 
           45s 
           --parentShutdownDuration 
           1m0s 
           --discoveryAddress 
           istio-pilot.istio-system:15007 
           --discoveryRefreshDelay 
           1s 
           --connectTimeout 
           10s 
           --proxyAdminPort 
           "15000" 
           --controlPlaneAuthPolicy 
           NONE
         env:
         - name: POD_NAME
           valueFrom:
             fieldRef:
               fieldPath: metadata.name
         - name: POD_NAMESPACE
           valueFrom:
             fieldRef:
               fieldPath: metadata.namespace
         - name: INSTANCE_IP
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
         - name: ISTIO_META_POD_NAME
           valueFrom:
             fieldRef:
               fieldPath: metadata.name
         - name: ISTIO_META_INTERCEPTION_MODE
           value: REDIRECT
         image: istio/proxyv2:1.0.0
         imagePullPolicy: IfNotPresent
         resources:
           requests:
             cpu: 100m
             memory: 128Mi
           limits:
             memory: 2048Mi
         securityContext:
           privileged: false
           readOnlyRootFilesystem: true
           runAsUser: 1337
         volumeMounts:
         - mountPath: /etc/istio/proxy
           name: istio-envoy

Ni ibere fun ohun gbogbo lati bẹrẹ ni aṣeyọri, o nilo lati ṣẹda Account Service, ClusterRole, ClusterRoleBinding, CRD fun Pilot, awọn apejuwe eyiti o le rii nibi.

Bi abajade, iṣẹ ti a fi sinu ọkọ ayọkẹlẹ ẹgbẹ pẹlu aṣoju yẹ ki o bẹrẹ ni aṣeyọri, gba gbogbo awari lati ọdọ awaoko ati awọn ibeere ilana.

O ṣe pataki lati ni oye pe gbogbo awọn paati ọkọ ofurufu iṣakoso jẹ awọn ohun elo ti ko ni ipinlẹ ati pe o le ni iwọn petele laisi awọn iṣoro. Gbogbo data ti wa ni ipamọ ni etcd ni irisi awọn apejuwe aṣa ti awọn orisun Kubernetes.

Paapaa, Istio (ti o tun ṣe idanwo) ni agbara lati ṣiṣe ni ita iṣupọ ati agbara lati wo ati ṣiṣawari iṣẹ ṣiṣe laarin ọpọlọpọ awọn iṣupọ Kubernetes. O le ka diẹ sii nipa eyi nibi.

Fun fifi sori opo-ọpọlọpọ, ṣe akiyesi awọn idiwọn wọnyi:

  1. Pod CIDR ati CIDR Iṣẹ gbọdọ jẹ alailẹgbẹ kọja gbogbo awọn iṣupọ ati pe ko gbọdọ ni lqkan.
  2. Gbogbo CIDR Pods gbọdọ wa ni wiwọle lati eyikeyi CIDR Pods laarin awọn iṣupọ.
  3. Gbogbo awọn olupin API Kubernetes gbọdọ wa ni iraye si ara wọn.

Eyi ni alaye akọkọ lati ṣe iranlọwọ fun ọ lati bẹrẹ pẹlu Istio. Sibẹsibẹ, ọpọlọpọ awọn ipalara tun wa. Fun apẹẹrẹ, awọn ẹya ara ẹrọ ti ipa-ọna opopona ita (ni ita iṣupọ), awọn isunmọ si awọn ọkọ ayọkẹlẹ ti n ṣatunṣe aṣiṣe, profaili, ṣeto aladapọ kan ati kikọ ẹhin alapọpo aṣa, ṣeto ilana wiwa kakiri ati iṣẹ rẹ nipa lilo aṣoju.
Gbogbo èyí la máa gbé yẹ̀ wò nínú àwọn ìtẹ̀jáde tó tẹ̀ lé e. Beere awọn ibeere rẹ, Emi yoo gbiyanju lati bo wọn.

orisun: www.habr.com

Fi ọrọìwòye kun