Mar a ruitheas tu Istio a’ cleachdadh Kubernetes ann an cinneasachadh. Pàirt 1

Istio? Is e seo am mogal seirbheis ris an canar, teicneòlas a chuireas sreath de tharraing thairis air an lìonra. Bidh sinn a’ cur stad air an trafaic gu lèir no pàirt dheth anns a’ bhuidheann agus a’ coileanadh seata sònraichte de ghnìomhachd leis. Dè am fear? Mar eisimpleir, bidh sinn a ’dèanamh slighe snasail, no bidh sinn a’ cur an gnìomh an dòigh brisidh cuairteachaidh, is urrainn dhuinn “cleachdadh canary” a chuir air dòigh, gu ìre ag atharrachadh trafaic gu dreach ùr den t-seirbheis, no is urrainn dhuinn eadar-obrachaidhean taobh a-muigh a chuingealachadh agus smachd a chumail air a h-uile turas bhon bhuidheann chun bhuidheann. lìonra a-muigh. Tha e comasach riaghailtean poileasaidh a shuidheachadh gus smachd a chumail air tursan eadar diofar mhicro-sheirbheisean. Mu dheireadh, is urrainn dhuinn am mapa eadar-obrachaidh lìonra gu lèir fhaighinn agus an cruinneachadh aonaichte de mheatairean a dhèanamh gu tur follaiseach do thagraidhean.

Faodaidh tu leughadh mun uidheamachd obrach ann sgrìobhainnean oifigeil. Tha Istio na inneal fìor chumhachdach a leigeas leat iomadh gnìomh agus duilgheadas fhuasgladh. San artaigil seo, bu mhath leam na prìomh cheistean a bhios ag èirigh nuair a thòisicheas tu le Istio a fhreagairt. Cuidichidh seo thu gus dèiligeadh ris nas luaithe.

Mar a ruitheas tu Istio a’ cleachdadh Kubernetes ann an cinneasachadh. Pàirt 1

Ciamar a tha e ag obair

Tha dà phrìomh raon ann an Istio - am plèana smachd agus am plèana dàta. Anns an itealan smachd tha na prìomh phàirtean a nì cinnteach gu bheil an còrr ag obrachadh. Anns an dreach làithreach (1.0) tha trì prìomh phàirtean aig an itealan smachd: Pìleat, Measgadair, Citadel. Cha bheachdaich sinn air Citadel, tha feum air teisteanasan a ghineadh gus dèanamh cinnteach à TLS dha chèile eadar seirbheisean. Bheir sinn sùil nas mionaidiche air inneal agus adhbhar Pilot and Mixer.

Mar a ruitheas tu Istio a’ cleachdadh Kubernetes ann an cinneasachadh. Pàirt 1

Is e pìleat am prìomh phàirt smachd a bhios a’ sgaoileadh a h-uile fiosrachadh mu na tha againn sa bhuidheann - seirbheisean, na puingean crìochnachaidh aca agus riaghailtean slighe (mar eisimpleir, riaghailtean airson cleachdadh Canary no riaghailtean brisidh chuairtean).

Tha measgaiche na phàirt plèana smachd roghainneil a bheir seachad comas metrics, logaichean, agus fiosrachadh sam bith mu eadar-obrachadh lìonra a chruinneachadh. Bidh e cuideachd a’ cumail sùil air gèilleadh ri riaghailtean Poileasaidh agus gèilleadh ri crìochan reata.

Tha am plèana dàta air a chuir an gnìomh a’ cleachdadh soithichean proxy sidecar. Tha cumhachdach air a chleachdadh gu bunaiteach. neach-ionaid teachdaire. Faodar buileachadh eile a chuir na àite, leithid nginx (nginmesh).

Gus am bi Istio ag obair gu tur follaiseach a thaobh thagraidhean, tha siostam stealladh fèin-ghluasadach ann. Tha am buileachadh as ùire freagarrach airson dreachan Kubernetes 1.9+ (dreach lìn inntrigidh mutational). Airson dreachan Kubernetes 1.7, 1.8 tha e comasach an initializer a chleachdadh.

Tha soithichean càr-taobh ceangailte ri Pilot a’ cleachdadh protocol GRPC, a leigeas leat am modal putaidh a bharrachadh airson atharrachaidhean a tha a’ tachairt sa bhuidheann. Tha GRPC air a bhith air a chleachdadh ann an Tosgaire bho dhreach 1.6, ann an Istio chaidh a chleachdadh bho dhreach 0.8 agus tha e na àidseant pìleat - còmhdach golang thairis air tosgaire a bhios a’ rèiteachadh roghainnean cur air bhog.

Tha Pìleat agus Measgadair nan co-phàirtean gu tur gun stàit, tha a h-uile stàite air a chumail mar chuimhneachan. Tha an rèiteachadh dhaibh air a shuidheachadh ann an cruth Kubernetes Custom Resources, a tha air an stòradh ann am msaa.
Bidh Istio-agent a’ faighinn seòladh a’ Phìleat agus a’ fosgladh sruth GRPC dha.

Mar a thuirt mi, tha Istio a’ cur an gnìomh a h-uile gnìomh gu tur follaiseach do thagraidhean. Chì sinn ciamar. Is e seo an algorithm:

  1. A’ cleachdadh dreach ùr den t-seirbheis.
  2. A rèir an dòigh stealladh inneal-càr taobh, tha an soitheach istio-init agus an soitheach istio-agent (tosgaire) air an cur ris aig ìre cur an sàs an rèiteachaidh, no faodaidh iad a bhith air an cuir a-steach le làimh anns an tuairisgeul air eintiteas Kubernetes Pod.
  3. Is e sgriobt a th’ anns a’ ghobhar istio-init a chuireas riaghailtean iptables an sàs anns a’ phod. Tha dà roghainn ann airson trafaic a rèiteachadh airson a phasgadh ann an soitheach istio-agent: cleachd riaghailtean ath-stiùiridh iptables, no TPROXY. Aig àm sgrìobhaidh, tha an dòigh-obrach bunaiteach le riaghailtean ath-sheòlaidh. Ann an istio-init, tha e comasach rèiteachadh dè an trafaic a bu chòir a bhith air a ghlacadh agus a chuir gu istio-agent. Mar eisimpleir, gus casg a chuir air a h-uile trafaic a-steach agus a-mach, feumaidh tu na crìochan a shuidheachadh -i и -b ann an ciall *. Faodaidh tu puirt sònraichte a shònrachadh airson eadar-ghearradh. Gus nach cuir thu bacadh air subnet sònraichte, faodaidh tu a shònrachadh leis a’ bhratach -x.
  4. Às deidh na soithichean init a chuir gu bàs, thèid na prìomh fheadhainn a chuir air bhog, a ’toirt a-steach am pìleat-àidseant (tosgaire). Bidh e a’ ceangal ris a’ Phìleat a chaidh a chleachdadh mar-thà tro GRPC agus a’ faighinn fiosrachadh mu na seirbheisean agus na poileasaidhean slighe a th’ ann mar-thà sa bhuidheann. A rèir an dàta a fhuaireadh, bidh e a’ rèiteachadh na cruinneachaidhean agus gan sònrachadh gu dìreach gu cinn-uidhe nan tagraidhean againn ann am buidheann Kubernetes. Feumar cuideachd puing chudromach a thoirt fa-near: bidh tosgaire a ’rèiteachadh luchd-èisteachd gu dinamach (IP, paidhrichean puirt) a thòisicheas e ag èisteachd. Mar sin, nuair a thèid iarrtasan a-steach don pod, air an ath-stiùireadh le bhith a’ cleachdadh riaghailtean ath-sheòlaidh iptables anns a’ chàr-taobh, faodaidh tosgaire na ceanglaichean sin a phròiseasadh gu soirbheachail agus tuigsinn càite an tèid an trafaic a phrosbaig tuilleadh. Cuideachd aig an ìre seo, thèid fiosrachadh a chuir chun mheasgaiche, air am bi sinn a’ coimhead nas fhaide air adhart, agus thèid rèisean lorg a chuir.

Mar thoradh air an sin, gheibh sinn lìonra iomlan de luchd-frithealaidh proxy tosgaire as urrainn dhuinn a rèiteachadh bho aon phuing (Pilot). Bidh a h-uile iarrtas a-steach is a-mach a’ dol tro thosgaire. A bharrachd air an sin, chan eil ach trafaic TCP air a ghlacadh. Tha seo a 'ciallachadh gu bheil IP seirbheis Kubernetes air a rèiteachadh le bhith a' cleachdadh kube-dns thairis air UDP gun atharrachadh. An uairsin, às deidh an rèiteachadh, tha an t-iarrtas a-mach air a ghlacadh agus air a phròiseasadh le teachdaire, a tha mar-thà a’ co-dhùnadh dè an ceann-uidhe a bu chòir an t-iarrtas a chuir gu (no nach deach a chuir, a thaobh poileasaidhean ruigsinneachd no an inneal brisidh cuairteachaidh a bhrosnaicheas an algairim).

Rinn sinn a-mach Pilot, a-nis feumaidh sinn tuigsinn mar a tha Mixer ag obair agus carson a tha feum air. Faodaidh tu na sgrìobhainnean oifigeil a leughadh air a shon an seo.

Tha dà phàirt ann am measgadair mar a tha e an-dràsta: istio-telemetry, istio-policy (ro dhreach 0.8 bha e na aon phàirt istio-mixer). Tha an dithis aca nan measgairean, agus tha uallach air gach fear airson a ghnìomh fhèin. Bidh Istio telemetry a’ faighinn fiosrachadh mu cò a bhios a’ dol càite agus dè na crìochan bho shoithichean aithisg càr taobh tro GRPC. Tha Istio-policy a’ gabhail ri iarrtasan seic gus dearbhadh gu bheil riaghailtean Poileasaidh riaraichte. Gu dearbh, chan eil sgrùdaidhean poileasaidh air an dèanamh airson a h-uile iarrtas, ach tha iad air an tasgadh air an neach-dèiligidh (anns a ’chàr-taobh) airson ùine sònraichte. Thèid sgrùdaidhean aithris a chuir mar iarrtasan baidse. Nach faic sinn mar a rèiteachadh agus dè na crìochan a bu chòir a chuir beagan nas fhaide air adhart.

Tha còir aig a’ mheasgaiche a bhith na phàirt a tha ri fhaighinn gu mòr a nì cinnteach gu bheil obair gun bhriseadh air a bhith a’ cruinneachadh agus a’ giullachd dàta telemetry. Tha an siostam air fhaighinn mar thoradh air mar bufair ioma-ìre. An toiseach, tha dàta air a buffered air taobh càr taobh nan soithichean, an uairsin air an taobh measgachaidh, agus an uairsin air a chuir gu backends measgachaidh ris an canar. Mar thoradh air an sin, ma dh’ fhailicheas gin de na pàirtean den t-siostam, bidh am bufair a’ fàs agus a’ sruthadh às deidh an siostam ath-nuadhachadh. Tha backends measgachaidh nan puingean crìochnachaidh airson dàta telemetry a chuir: statsd, newrelic, msaa. Faodaidh tu an backend agad fhèin a sgrìobhadh, tha e gu math sìmplidh, agus chì sinn mar a nì thu e.

Mar a ruitheas tu Istio a’ cleachdadh Kubernetes ann an cinneasachadh. Pàirt 1

Airson geàrr-chunntas, tha an sgeama airson obrachadh le istio-telemetry mar a leanas.

  1. Bidh Seirbheis 1 a’ cur iarrtas gu seirbheis 2.
  2. Nuair a dh’ fhàgas tu seirbheis 1, tha an t-iarrtas air a phasgadh sa chàr-thaobh aige fhèin.
  3. Bidh tosgaire Sidecar a’ cumail sùil air mar a thèid an t-iarrtas gu seirbheis 2 agus ag ullachadh an fhiosrachaidh riatanach.
  4. An uairsin ga chuir gu istio-telemetry a’ cleachdadh iarrtas Aithisg.
  5. Bidh Istio-telemetry a’ dearbhadh am bu chòir an Aithisg seo a chuir gu na backends, gu dè agus dè an dàta a bu chòir a chuir.
  6. Bidh Istio-telemetry a’ cur dàta Aithisg chun an deireadh-sheachdain ma bhios feum air.

A-nis chì sinn mar a chleachdas tu Istio san t-siostam, anns nach eil ach na prìomh phàirtean (Pìleat agus tosgaire càr taobh).

An toiseach, leig dhuinn sùil a thoirt air a’ phrìomh rèiteachadh (mogal) a leugh Pilot:

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

Bidh na prìomh phàirtean smachd (plèana smachd) suidhichte anns an t-siostam ainm-àite ann an Kubernetes.

Aig a’ char as lugha, chan fheum sinn ach Pilot a chleachdadh. Airson seo cleachdaidh sinn leithid de rèiteachadh.

Agus rèitichidh sinn le làimh càr-taobh an t-soithich.

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

Agus taobh-chàr:

       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

Gus an tòisich a h-uile càil gu soirbheachail, feumaidh tu Cunntas Seirbheis, ClusterRole, ClusterRoleBinding, CRD for Pilot a chruthachadh, agus gheibhear na tuairisgeulan air an seo.

Mar thoradh air an sin, bu chòir don t-seirbheis anns am bi sinn a’ cuir a-steach càr-taobh le tosgaire a’ tòiseachadh gu soirbheachail, a’ faighinn a h-uile lorg bhon phìleat agus a’ pròiseasadh iarrtasan.

Tha e cudromach tuigsinn gu bheil a h-uile pàirt de phlèana smachd nan tagraidhean gun stàit agus gum faodar an sgèile gu còmhnard gun duilgheadasan. Tha a h-uile dàta air a stòradh ann am msaa ann an cruth tuairisgeulan àbhaisteach air goireasan Kubernetes.

Cuideachd, tha comas aig Istio (fhathast deuchainneach) ruith taobh a-muigh a’ bhuidheann agus an comas a bhith a’ coimhead agus a’ lorg lorg seirbheis eadar grunn bhuidhnean de Kubernetes. Faodaidh tu barrachd a leughadh mu dheidhinn seo an seo.

Airson stàladh ioma-chnuasach, bi mothachail air na cuingeadan a leanas:

  1. Feumaidh Pod CIDR agus CIDR Seirbheis a bhith gun samhail thar gach buidheann agus chan fhaod iad a dhol thairis air.
  2. Feumaidh a h-uile Pod CIDR a bhith ruigsinneach bho Pods CIDR sam bith eadar buidhnean.
  3. Feumaidh a h-uile seirbheisiche Kubernetes API a bhith ruigsinneach dha chèile.

Seo a’ chiad fhiosrachadh a chuidicheas tu gus tòiseachadh le Istio. Ach, tha mòran bhuannachdan ann fhathast. Mar eisimpleir, feartan ann a bhith a’ stiùireadh trafaic bhon taobh a-muigh (taobh a-muigh a’ chnuas), dòighean-obrach a thaobh dì-bhugachadh chàraichean taobh, pròifil, stèidheachadh measgadair agus sgrìobhadh backend measgachaidh àbhaisteach, stèidheachadh inneal lorg agus obrachadh le bhith a’ cleachdadh teachdaire.
Beachdaichidh sinn air seo uile anns na foillseachaidhean a leanas. Faighnich do cheistean, feuchaidh mi rin còmhdach.

Source: www.habr.com

Cuir beachd ann