Kif tmexxi Istio billi tuża Kubernetes fil-produzzjoni. Parti 1

X'inhu Istio? Din hija l-hekk imsejħa Service mesh, teknoloġija li żżid saff ta 'estrazzjoni fuq in-netwerk. Aħna ninterċettaw it-traffiku kollu jew parti minnu fil-cluster u nwettqu ċertu sett ta 'operazzjonijiet miegħu. Liema? Pereżempju, nagħmlu routing intelliġenti, jew nimplimentaw l-approċċ ta 'circuit breaker, nistgħu norganizzaw "skjerament tal-kanarji", naqleb parzjalment it-traffiku għal verżjoni ġdida tas-servizz, jew nistgħu nillimitaw l-interazzjonijiet esterni u nikkontrollaw il-vjaġġi kollha mill-cluster sal- netwerk estern. Huwa possibbli li jiġu stabbiliti regoli ta' politika biex jiġu kkontrollati l-vjaġġi bejn mikroservizzi differenti. Fl-aħħarnett, nistgħu niksbu l-mappa kollha tal-interazzjoni tan-netwerk u nagħmlu l-ġbir unifikat ta 'metriċi kompletament trasparenti għall-applikazzjonijiet.

Tista 'taqra dwar il-mekkaniżmu tax-xogħol fi dokumentazzjoni uffiċjali. Istio hija għodda tassew qawwija li tippermettilek issolvi ħafna kompiti u problemi. F'dan l-artikolu, nixtieq inwieġeb il-mistoqsijiet ewlenin li normalment iqumu meta nibda b'Istio. Dan jgħinek tittrattaha aktar malajr.

Kif tmexxi Istio billi tuża Kubernetes fil-produzzjoni. Parti 1

Prinċipju ta 'operazzjoni

Istio jikkonsisti f'żewġ oqsma ewlenin - il-pjan ta 'kontroll u l-pjan tad-dejta. Il-pjan ta 'kontroll fih il-komponenti ewlenin li jiżguraw it-tħaddim korrett tal-bqija. Fil-verżjoni attwali (1.0) il-pjan ta 'kontroll għandu tliet komponenti ewlenin: Pilota, Mixer, Ċittadella. Aħna mhux se nikkunsidraw iċ-Ċittadella, huwa meħtieġ li niġġeneraw ċertifikati biex niżguraw TLS reċiproku bejn is-servizzi. Ejja nagħtu ħarsa aktar mill-qrib lejn l-apparat u l-iskop ta 'Pilot u Mixer.

Kif tmexxi Istio billi tuża Kubernetes fil-produzzjoni. Parti 1

Il-pilota huwa l-komponent ewlieni tal-kontroll li jqassam l-informazzjoni kollha dwar dak li għandna fil-cluster - is-servizzi, l-endpoints tagħhom u r-regoli tar-rotot (pereżempju, regoli għall-iskjerament tal-Kanarji jew regoli dwar circuit breaker).

Mixer huwa komponent fakultattiv tal-pjan ta 'kontroll li jipprovdi l-abbiltà li jiġbor metriċi, zkuk, u kwalunkwe informazzjoni dwar l-interazzjoni tan-netwerk. Huwa jissorvelja wkoll il-konformità mar-regoli tal-Politika u l-konformità mal-limiti tar-rati.

Il-pjan tad-dejta huwa implimentat bl-użu ta 'kontenituri ta' prokura sidecar. Qawwija tintuża awtomatikament. prokura mibgħuta. Jista 'jiġi sostitwit b'implimentazzjoni oħra, bħal nginx (nginmesh).

Sabiex Istio jaħdem kompletament trasparenti għall-applikazzjonijiet, hemm sistema ta 'injezzjoni awtomatika. L-aħħar implimentazzjoni hija adattata għall-verżjonijiet ta 'Kubernetes 1.9+ (webhook ta' ammissjoni mutazzjonali). Għall-verżjonijiet Kubernetes 1.7, 1.8 huwa possibbli li tuża l-Initializer.

Il-kontenituri sidecar huma konnessi mal-Pilot bl-użu tal-protokoll GRPC, li jippermettilek li tottimizza l-mudell push għal bidliet li jseħħu fil-cluster. GRPC ilu jintuża f'Envoy mill-verżjoni 1.6, f'Istio ilu jintuża mill-verżjoni 0.8 u huwa pilota-aġent - tgeżwir ta 'golang fuq mibgħut li jikkonfigura l-għażliet ta' tnedija.

Pilot u Mixer huma komponenti kompletament mingħajr stat, l-istat kollu jinżamm fil-memorja. Il-konfigurazzjoni għalihom hija stabbilita fil-forma ta 'Kubernetes Custom Resources, li huma maħżuna f'etcd.
Istio-agent jikseb l-indirizz tal-Pilota u jiftaħ fluss GRPC għalih.

Kif għedt, Istio jimplimenta l-funzjonalità kollha kompletament trasparenti għall-applikazzjonijiet. Ejja naraw kif. L-algoritmu huwa dan:

  1. L-iskjerament ta' verżjoni ġdida tas-servizz.
  2. Skont l-approċċ tal-injezzjoni tal-kontenitur sidecar, il-kontenitur istio-init u l-kontenitur istio-aġent (mibgħut) huma miżjuda fl-istadju tal-applikazzjoni tal-konfigurazzjoni, jew diġà jistgħu jiddaħħlu manwalment fid-deskrizzjoni tal-entità Kubernetes Pod.
  3. Il-kontenitur istio-init huwa skript li japplika r-regoli iptables għall-pod. Hemm żewġ għażliet għall-konfigurazzjoni tat-traffiku biex ikun imgeżwer f'kontenitur istio-agent: uża r-regoli ta' redirect iptables, jew TPROXY. Fiż-żmien tal-kitba, l-approċċ default huwa b'regoli ta 'ridirezzjoni. F'istio-init, huwa possibbli li jiġi kkonfigurat liema traffiku għandu jiġi interċettat u mibgħut lil istio-agent. Pereżempju, sabiex tinterċetta t-traffiku kollu deħlin u ħerġin kollu, għandek bżonn tissettja l-parametri -i и -b fis-sens *. Tista 'tispeċifika portijiet speċifiċi biex jinterċettaw. Sabiex ma tinterċettax subnet speċifiku, tista' tispeċifikaha billi tuża l-bandiera -x.
  4. Wara li jiġu esegwiti l-kontenituri init, jitnedew dawk ewlenin, inkluż il-pilota-aġent (mibgħut). Hija tikkonnettja mal-Pilota diġà skjerata permezz tal-GRPC u tirċievi informazzjoni dwar is-servizzi eżistenti kollha u l-politiki tar-rotot fil-cluster. Skont id-dejta riċevuta, huwa jikkonfigura l-clusters u jassenjahom direttament lill-endpoints tal-applikazzjonijiet tagħna fil-cluster Kubernetes. Huwa wkoll meħtieġ li wieħed jinnota punt importanti: l-envoy jikkonfigura s-semmiegħa b'mod dinamiku (IP, pari ta 'port) li jibda jisma'. Għalhekk, meta t-talbiet jidħlu fil-pod, huma ridiretti bl-użu tar-regoli iptables redirect fis-sidecar, l-envoy diġà jista 'jipproċessa b'suċċess dawn il-konnessjonijiet u jifhem fejn ikompli jipprokura t-traffiku. F'dan l-istadju wkoll, l-informazzjoni tintbagħat lill-Mixer, li se nħarsu lejh aktar tard, u jintbagħtu spans ta 'traċċar.

Bħala riżultat, ikollna netwerk sħiħ ta 'servers prokura tal-mibgħut li nistgħu kkonfiguraw minn punt wieħed (Pilot). It-talbiet kollha deħlin u ħerġin jgħaddu minn mibgħut. Barra minn hekk, it-traffiku TCP biss huwa interċettat. Dan ifisser li l-IP tas-servizz Kubernetes jiġi solvut bl-użu ta 'kube-dns fuq UDP mingħajr ma jinbidel. Imbagħad, wara r-riżoluzzjoni, it-talba ħerġin tiġi interċettata u pproċessata mill-mibgħut, li diġà jiddeċiedi lil liema endpoint għandha tintbagħat it-talba (jew ma tintbagħatx, fil-każ ta 'politiki ta' aċċess jew is-circuit breaker tal-algoritmu).

Aħna dehret Pilot, issa rridu nifhmu kif jaħdem Mixer u għaliex huwa meħtieġ. Tista' taqra d-dokumentazzjoni uffiċjali għaliha hawn.

Mixer fil-forma attwali tiegħu jikkonsisti f'żewġ komponenti: istio-telemetrija, istio-politika (qabel il-verżjoni 0.8 kien komponent wieħed istio-mixer). It-tnejn huma miksers, li kull wieħed minnhom huwa responsabbli għall-kompitu tiegħu stess. Istio telemetry tirċievi informazzjoni dwar min imur fejn u b'liema parametri minn sidecar Report containers permezz tal-GRPC. Istio-policy taċċetta talbiet Iċċekkja biex tivverifika li r-regoli tal-Politika huma sodisfatti. Il-verifiki poilicy, ovvjament, mhumiex imwettqa għal kull talba, iżda huma miżmuma fil-cache fuq il-klijent (fis-sidecar) għal ċertu żmien. Il-kontrolli tar-rapporti jintbagħtu bħala talbiet tal-lott. Ejja naraw kif tikkonfigura u liema parametri għandhom jintbagħtu ftit aktar tard.

Il-Mixer suppost huwa komponent disponibbli ħafna li jiżgura xogħol bla interruzzjoni fuq l-assemblaġġ u l-ipproċessar tad-dejta tat-telemetrija. Is-sistema tinkiseb bħala riżultat bħala buffer f'diversi livelli. Inizjalment, id-data hija buffered fuq in-naħa sidecar tal-kontenituri, imbagħad fuq in-naħa tal-mixer, u mbagħad mibgħuta lill-hekk imsejħa mixer backends. Bħala riżultat, jekk xi wieħed mill-komponenti tas-sistema jfalli, il-buffer jikber u jitlaħlaħ wara li s-sistema tiġi restawrata. Il-backends tal-mixer huma endpoints biex tintbagħat dejta tat-telemetrija: statsd, newrelic, eċċ. Tista 'tikteb backend tiegħek, huwa pjuttost sempliċi, u naraw kif tagħmel dan.

Kif tmexxi Istio billi tuża Kubernetes fil-produzzjoni. Parti 1

Fil-qosor, l-iskema biex taħdem bl-istio-telemetrija hija kif ġej.

  1. Is-servizz 1 jibgħat talba lis-servizz 2.
  2. Meta titlaq mis-servizz 1, it-talba hija mgeżwra fis-sidecar tagħha stess.
  3. Il-mibgħut tas-sidecar jimmonitorja kif it-talba tmur għas-servizz 2 u jipprepara l-informazzjoni meħtieġa.
  4. Imbagħad tibgħatha lil istio-telemetry billi tuża talba għal Rapport.
  5. Istio-telemetrija tiddetermina jekk dan ir-Rapport għandux jintbagħat lill-backends, lil liema u liema data għandha tintbagħat.
  6. Istio-telemetrija tibgħat id-dejta tar-Rapport lill-backend jekk meħtieġ.

Issa ejja naraw kif tuża Istio fis-sistema, li tikkonsisti biss mill-komponenti ewlenin (pilota u mibgħut sidecar).

L-ewwel, ejja nħarsu lejn il-konfigurazzjoni prinċipali (malji) li Pilot jaqra:

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

Il-komponenti ta 'kontroll prinċipali kollha (pjan ta' kontroll) se jkunu jinsabu fis-sistema istio-istio tal-ispazju tal-isem f'Kubernetes.

Bħala minimu, għandna bżonn biss li niskjeraw Pilot. Għal dan nużaw konfigurazzjoni bħal din.

U aħna ser tikkonfigura manwalment is-sidecar li tinjetta tal-kontenitur.

Init container:

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

U sidecar:

       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

Sabiex kollox jibda b'suċċess, għandek bżonn toħloq ServiceAccount, ClusterRole, ClusterRoleBinding, CRD for Pilot, li d-deskrizzjonijiet tiegħu jistgħu jinstabu. hawn.

Bħala riżultat, is-servizz li fih ninjettaw sidecar mal-mibgħut għandu jibda b'suċċess, jirċievi l-iskoperta kollha mill-pilota u jipproċessa t-talbiet.

Huwa importanti li wieħed jifhem li l-komponenti kollha tal-pjan ta 'kontroll huma applikazzjonijiet mingħajr stat u jistgħu jiġu skalati orizzontalment mingħajr problemi. Id-dejta kollha hija maħżuna f'etcd fil-forma ta 'deskrizzjonijiet personalizzati tar-riżorsi Kubernetes.

Ukoll, Istio (għadu sperimentali) għandu l-abbiltà li jimxi barra l-cluster u l-abbiltà li jara u skoperta servizz bejn diversi clusters Kubernetes. Tista' taqra aktar dwar dan hawn.

Għal installazzjoni multi-cluster, kun konxju mil-limitazzjonijiet li ġejjin:

  1. Pod CIDR u Service CIDR għandhom ikunu uniċi fil-clusters kollha u m'għandhomx jikkoinċidu.
  2. Il-CIDR Pods kollha għandhom ikunu aċċessibbli minn kwalunkwe CIDR Pods bejn il-clusters.
  3. Is-servers kollha tal-API Kubernetes għandhom ikunu aċċessibbli għal xulxin.

Din hija l-informazzjoni inizjali biex tgħinek tibda b'Istio. Madankollu, għad hemm ħafna nases. Pereżempju, karatteristiċi ta 'routing tat-traffiku estern (barra l-cluster), approċċi għad-debugging sidecars, profiling, twaqqif ta' mixer u kitba ta 'backend ta' mixer personalizzat, twaqqif ta 'mekkaniżmu ta' traċċar u t-tħaddim tiegħu bl-użu ta 'envoy.
Dan kollu se nikkunsidraw fil-pubblikazzjonijiet li ġejjin. Staqsi l-mistoqsijiet tiegħek, ser nipprova nkoprihom.

Sors: www.habr.com

Żid kumment