Sut i redeg Istio gan ddefnyddio Kubernetes wrth gynhyrchu. Rhan 1

Beth yw Istio? Dyma'r rhwyll Gwasanaeth fel y'i gelwir, technoleg sy'n ychwanegu haen o dynnu dros y rhwydwaith. Rydym yn rhyng-gipio'r cyfan neu ran o'r traffig yn y clwstwr ac yn perfformio set benodol o weithrediadau ag ef. Pa un? Er enghraifft, rydyn ni'n gwneud llwybro craff, neu rydyn ni'n gweithredu'r dull torri cylched, gallwn drefnu “defnyddio caneri”, gan newid traffig yn rhannol i fersiwn newydd o'r gwasanaeth, neu gallwn gyfyngu ar ryngweithio allanol a rheoli pob taith o'r clwstwr i'r rhwydwaith allanol. Mae'n bosibl gosod rheolau polisi i reoli teithiau rhwng gwahanol ficrowasanaethau. Yn olaf, gallwn gael y map rhyngweithio rhwydwaith cyfan a gwneud y casgliad unedig o fetrigau yn gwbl dryloyw i geisiadau.

Gallwch ddarllen am fecanwaith y gwaith yn dogfennaeth swyddogol. Mae Istio yn offeryn pwerus iawn sy'n eich galluogi i ddatrys llawer o dasgau a phroblemau. Yn yr erthygl hon, hoffwn ateb y prif gwestiynau sy'n codi fel arfer wrth ddechrau gydag Istio. Bydd hyn yn eich helpu i ddelio ag ef yn gyflymach.

Sut i redeg Istio gan ddefnyddio Kubernetes wrth gynhyrchu. Rhan 1

Egwyddor o weithredu

Mae Istio yn cynnwys dau brif faes - yr awyren reoli a'r awyren ddata. Mae'r awyren reoli yn cynnwys y prif gydrannau sy'n sicrhau gweithrediad cywir y gweddill. Yn y fersiwn gyfredol (1.0) mae gan yr awyren reoli dair prif gydran: Peilot, Cymysgydd, Citadel. Ni fyddwn yn ystyried Citadel, mae angen cynhyrchu tystysgrifau i sicrhau TLS cilyddol rhwng gwasanaethau. Gadewch i ni edrych yn agosach ar ddyfais a phwrpas y Peilot a'r Cymysgydd.

Sut i redeg Istio gan ddefnyddio Kubernetes wrth gynhyrchu. Rhan 1

Peilot yw'r brif elfen reoli sy'n dosbarthu'r holl wybodaeth am yr hyn sydd gennym yn y clwstwr - gwasanaethau, eu pwyntiau terfyn a rheolau llwybro (er enghraifft, rheolau ar gyfer defnyddio Caneri neu reolau torri cylchedau).

Mae Mixer yn gydran awyren reoli ddewisol sy'n darparu'r gallu i gasglu metrigau, logiau, ac unrhyw wybodaeth am ryngweithio rhwydwaith. Mae hefyd yn monitro cydymffurfiaeth â rheolau Polisi a chydymffurfiad â therfynau cyfraddau.

Gweithredir yr awyren ddata gan ddefnyddio cynwysyddion dirprwy car ochr. Defnyddir pwerus yn ddiofyn. cennad dirprwy. Gellir ei ddisodli gan weithrediad arall, megis nginx (nginmesh).

Er mwyn i Istio weithio'n gwbl dryloyw i geisiadau, mae system chwistrellu awtomatig. Mae'r gweithrediad diweddaraf yn addas ar gyfer fersiynau Kubernetes 1.9+ (book gwe derbyn treiglol). Ar gyfer fersiynau Kubernetes 1.7, 1.8 mae'n bosibl defnyddio'r Cychwynnwr.

Mae cynwysyddion ceir ochr wedi'u cysylltu â Peilot gan ddefnyddio'r protocol GRPC, sy'n eich galluogi i wneud y gorau o'r model gwthio ar gyfer newidiadau sy'n digwydd yn y clwstwr. Mae GRPC wedi'i ddefnyddio yn Envoy ers fersiwn 1.6, yn Istio mae wedi'i ddefnyddio ers fersiwn 0.8 ac mae'n asiant peilot - deunydd lapio golang dros gennad sy'n ffurfweddu opsiynau lansio.

Mae Peilot a Cymysgydd yn gydrannau hollol ddi-wladwriaeth, ac mae pob cyflwr yn cael ei gadw yn y cof. Mae'r ffurfweddiad ar eu cyfer wedi'i osod ar ffurf Kubernetes Custom Resources, sy'n cael eu storio yn ac ati.
Mae Istio-agent yn cael cyfeiriad y Peilot ac yn agor ffrwd GRPC iddo.

Fel y dywedais, mae Istio yn gweithredu pob swyddogaeth yn gwbl dryloyw i gymwysiadau. Gawn ni weld sut. Dyma'r algorithm:

  1. Defnyddio fersiwn newydd o'r gwasanaeth.
  2. Yn dibynnu ar y dull chwistrellu cynhwysydd car ochr, ychwanegir y cynhwysydd istio-init a'r cynhwysydd istio-asiant (cennad) ar y cam o gymhwyso'r cyfluniad, neu gellir eu mewnosod â llaw eisoes yn y disgrifiad o endid Kubernetes Pod.
  3. Mae'r cynhwysydd istio-init yn sgript sy'n cymhwyso rheolau iptables i'r pod. Mae dau opsiwn ar gyfer ffurfweddu traffig i'w lapio mewn cynhwysydd istio-asiant: defnyddio rheolau ailgyfeirio iptables, neu TPROXY. Ar adeg ysgrifennu, y dull rhagosodedig yw rheolau ailgyfeirio. Yn istio-init, mae'n bosibl ffurfweddu pa draffig y dylid ei ryng-gipio a'i anfon at istio-agent. Er enghraifft, er mwyn atal yr holl draffig sy'n dod i mewn a'r holl draffig sy'n mynd allan, mae angen i chi osod y paramedrau -i и -b i mewn i ystyr *. Gallwch nodi porthladdoedd penodol i ryng-gipio. Er mwyn peidio â rhyng-gipio is-rwydwaith penodol, gallwch ei nodi gan ddefnyddio'r faner -x.
  4. Ar ôl i'r cynwysyddion init gael eu gweithredu, mae'r prif rai yn cael eu lansio, gan gynnwys yr asiant peilot (cennad). Mae'n cysylltu â'r Peilot sydd eisoes ar waith trwy GRPC ac yn derbyn gwybodaeth am yr holl wasanaethau presennol a pholisïau llwybro yn y clwstwr. Yn ôl y data a dderbyniwyd, mae'n ffurfweddu'r clystyrau ac yn eu neilltuo'n uniongyrchol i bwyntiau terfyn ein cymwysiadau yng nghlwstwr Kubernetes. Mae angen nodi pwynt pwysig hefyd: mae cennad yn ffurfweddu gwrandawyr yn ddeinamig (IP, parau porthladdoedd) y mae'n dechrau gwrando arnynt. Felly, pan fydd ceisiadau'n mynd i mewn i'r pod, yn cael eu hailgyfeirio gan ddefnyddio'r rheolau ailgyfeirio iptables yn y car ochr, gall llysgennad eisoes brosesu'r cysylltiadau hyn yn llwyddiannus a deall ble i ddirprwyo'r traffig ymhellach. Hefyd ar y cam hwn, anfonir gwybodaeth at y Cymysgydd, y byddwn yn edrych arno'n ddiweddarach, ac anfonir rhychwantau olrhain.

O ganlyniad, rydym yn cael rhwydwaith cyfan o weinyddion dirprwy cenhadol y gallwn eu ffurfweddu o un pwynt (Peilot). Mae pob cais i mewn ac allan yn mynd trwy gennad. Ar ben hynny, dim ond traffig TCP sy'n cael ei ryng-gipio. Mae hyn yn golygu bod IP gwasanaeth Kubernetes yn cael ei ddatrys gan ddefnyddio kube-dns dros CDU heb newid. Yna, ar ôl y penderfyniad, mae'r cais sy'n mynd allan yn cael ei ryng-gipio a'i brosesu gan gennad, sydd eisoes yn penderfynu i ba bwynt terfyn y dylid anfon y cais (neu beidio â'i anfon, yn achos polisïau mynediad neu dorrwr cylched yr algorithm).

Fe wnaethon ni gyfrifo Peilot, nawr mae angen i ni ddeall sut mae Mixer yn gweithio a pham mae ei angen. Gallwch ddarllen y ddogfennaeth swyddogol ar ei gyfer yma.

Mae cymysgydd yn ei ffurf bresennol yn cynnwys dwy gydran: istio-telemetreg, istio-polisi (cyn fersiwn 0.8 roedd yn un elfen istio-cymysgydd). Mae'r ddau ohonyn nhw'n gymysgwyr, pob un ohonyn nhw'n gyfrifol am ei dasg ei hun. Mae Istio telemetry yn derbyn gwybodaeth am bwy sy'n mynd ble a gyda pha baramedrau o gynwysyddion adrodd ar y car ochr trwy GRPC. Mae Istio-policy yn derbyn Ceisiadau Gwirio i wirio bod rheolau Polisi yn cael eu bodloni. Wrth gwrs, ni chynhelir gwiriadau polisi ar gyfer pob cais, ond cânt eu storio ar y cleient (yn y car ochr) am amser penodol. Anfonir sieciau adroddiadau fel ceisiadau swp. Gadewch i ni weld sut i ffurfweddu a pha baramedrau y dylid eu hanfon ychydig yn ddiweddarach.

Mae'r Cymysgydd i fod i fod yn gydran sydd ar gael yn helaeth sy'n sicrhau gwaith di-dor ar gydosod a phrosesu data telemetreg. Mae'r system yn cael ei sicrhau o ganlyniad fel byffer aml-lefel. I ddechrau, mae data'n cael ei glustogi ar ochr car ochr y cynwysyddion, yna ar ochr y cymysgydd, ac yna'n cael ei anfon at y cefnau cymysgydd fel y'u gelwir. O ganlyniad, os bydd unrhyw un o gydrannau'r system yn methu, mae'r byffer yn tyfu ac yn cael ei fflysio ar ôl i'r system gael ei hadfer. Mae ôl-lenni cymysgydd yn bwyntiau terfyn ar gyfer anfon data telemetreg: statsd, newrelic, ac ati. Gallwch chi ysgrifennu eich backend eich hun, mae'n eithaf syml, a byddwn yn gweld sut i wneud hynny.

Sut i redeg Istio gan ddefnyddio Kubernetes wrth gynhyrchu. Rhan 1

I grynhoi, mae'r cynllun ar gyfer gweithio gydag istio-telemetreg fel a ganlyn.

  1. Mae Gwasanaeth 1 yn anfon cais i wasanaeth 2.
  2. Wrth adael gwasanaeth 1, caiff y cais ei lapio yn ei gar ochr ei hun.
  3. Mae llysgennad Sidecar yn monitro sut mae'r cais yn mynd i wasanaeth 2 ac yn paratoi'r wybodaeth angenrheidiol.
  4. Yna yn ei anfon i istio-telemetreg gan ddefnyddio Cais Adroddiad.
  5. Istio-telemetreg sy'n penderfynu a ddylid anfon yr Adroddiad hwn i'r ôl-ben, i ba ddata y dylid ei anfon ac at ba ddata y dylid ei anfon.
  6. Mae Istio-telemetreg yn anfon data Report i'r ôl-ddiwedd os oes angen.

Nawr, gadewch i ni weld sut i ddefnyddio Istio yn y system, sy'n cynnwys y prif gydrannau yn unig (cennad peilot a cheir ochr).

Yn gyntaf, gadewch i ni edrych ar y prif ffurfweddiad (rhwyll) y mae Pilot yn ei ddarllen:

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

Bydd yr holl brif gydrannau rheoli (awyren reoli) wedi'u lleoli yn y system istio gofod enw yn Kubernetes.

O leiaf, dim ond Peilot sydd ei angen arnom. Ar gyfer hyn rydym yn defnyddio cyfluniad o'r fath.

A byddwn yn ffurfweddu car ochr chwistrellu'r cynhwysydd â llaw.

Cynhwysydd Init:

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

A char ochr:

       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

Er mwyn i bopeth ddechrau'n llwyddiannus, mae angen i chi greu Cyfrif Gwasanaeth, Rôl Clwstwr, Rhwymo Role Clwstwr, CRD ar gyfer Peilot, y gellir dod o hyd i'w ddisgrifiadau yma.

O ganlyniad, dylai'r gwasanaeth yr ydym yn chwistrellu car ochr gyda llysgennad iddo ddechrau'n llwyddiannus, derbyn pob darganfyddiad o'r peilot a phrosesu ceisiadau.

Mae'n bwysig deall bod holl gydrannau'r awyren reoli yn gymwysiadau heb wladwriaeth a gellir eu graddio'n llorweddol heb broblemau. Mae'r holl ddata yn cael ei storio mewn ac ati ar ffurf disgrifiadau arferol o adnoddau Kubernetes.

Hefyd, mae gan Istio (yn dal i fod yn arbrofol) y gallu i redeg y tu allan i'r clwstwr a'r gallu i wylio a darganfod gwasanaeth ymbalfalu rhwng sawl clwstwr Kubernetes. Gallwch ddarllen mwy am hyn yma.

Ar gyfer gosodiad aml-glwstwr, byddwch yn ymwybodol o'r cyfyngiadau canlynol:

  1. Rhaid i Pod CIDR a CIDR Gwasanaeth fod yn unigryw ar draws pob clwstwr ac ni ddylent orgyffwrdd.
  2. Rhaid i bob Pod CIDR fod yn hygyrch o unrhyw God CIDR rhwng clystyrau.
  3. Rhaid i bob gweinydd API Kubernetes fod yn hygyrch i'w gilydd.

Dyma'r wybodaeth gychwynnol i'ch helpu i gychwyn arni gydag Istio. Fodd bynnag, mae yna lawer o beryglon o hyd. Er enghraifft, nodweddion llwybro traffig allanol (y tu allan i'r clwstwr), ymagweddau at ddadfygio ceir ochr, proffilio, gosod cymysgydd ac ysgrifennu backend cymysgydd wedi'i deilwra, sefydlu mecanwaith olrhain a'i weithrediad gan ddefnyddio cennad.
Byddwn yn ystyried hyn i gyd yn y cyhoeddiadau canlynol. Gofynnwch eich cwestiynau, byddaf yn ceisio eu cwmpasu.

Ffynhonnell: hab.com

Ychwanegu sylw