Momwe mungayendetsere Istio pogwiritsa ntchito Kubernetes popanga. Gawo 1

Kodi Istio? Izi ndizomwe zimatchedwa Service mesh, ukadaulo womwe umawonjezera kusanja pamaneti. Timaletsa zonse kapena gawo la kuchuluka kwa magalimoto mgululi ndikuchita nawo ntchito zina. Chiti? Mwachitsanzo, timayendetsa njira zanzeru, kapena timagwiritsa ntchito njira yodutsa dera, titha kukonza "kutumiza kwa canary", kusintha pang'ono magalimoto kupita ku mtundu watsopano wautumiki, kapena titha kuchepetsa kuyanjana kwakunja ndikuwongolera maulendo onse kuchokera pagulu kupita ku maukonde akunja. Ndizotheka kukhazikitsa malamulo oyendetsera maulendo pakati pa ma microservices osiyanasiyana. Pomaliza, titha kupeza mapu onse olumikizana ndi netiweki ndikupanga zophatikiza zofananira kuti ziwonekere pamapulogalamu.

Mukhoza kuwerenga za ndondomeko ya ntchito mu zolemba zovomerezeka. Istio ndi chida champhamvu kwambiri chomwe chimakulolani kuthetsa ntchito ndi mavuto ambiri. M'nkhaniyi, ndikufuna kuyankha mafunso akuluakulu omwe nthawi zambiri amakhalapo akayamba ndi Istio. Izi zikuthandizani kuthana nazo mwachangu.

Momwe mungayendetsere Istio pogwiritsa ntchito Kubernetes popanga. Gawo 1

Momwe ntchito

Istio ili ndi madera awiri akuluakulu - ndege yolamulira ndi ndege ya data. Ndege yolamulira imakhala ndi zigawo zikuluzikulu zomwe zimatsimikizira kuti zotsalazo zikuyenda bwino. M'mawonekedwe amakono (1.0) ndege yolamulira ili ndi zigawo zitatu zazikulu: Woyendetsa, Wosakaniza, Citadel. Sitingaganizire za Citadel, ikufunika kuti ipange ziphaso kuti zitsimikizire kuti pali mgwirizano wa TLS pakati pa mautumiki. Tiyeni tiwone bwinobwino chipangizo ndi cholinga cha Pilot ndi Mixer.

Momwe mungayendetsere Istio pogwiritsa ntchito Kubernetes popanga. Gawo 1

Woyendetsa ndiye chigawo chachikulu chowongolera chomwe chimagawira zidziwitso zonse zomwe tili nazo mgululi - mautumiki, malekezero awo ndi malamulo oyendetsera (mwachitsanzo, malamulo oyendetsera Canary kapena malamulo ophwanya dera).

Mixer ndi gawo la ndege losasankha lomwe limakupatsani mwayi wotolera ma metric, logi, ndi chidziwitso chilichonse chokhudza kulumikizana kwa netiweki. Amayang'aniranso kutsatiridwa kwa malamulo a Policy komanso kutsata malire a mitengo.

Ndege ya data imayendetsedwa pogwiritsa ntchito zotengera zam'mbali. Mphamvu imagwiritsidwa ntchito ndi kusakhazikika. nthumwi ya nthumwi. Itha kusinthidwa ndi kukhazikitsa kwina, monga nginx (nginmesh).

Kuti Istio igwire ntchito momveka bwino pamapulogalamu, pali njira yojambulira yokha. Kukhazikitsa kwaposachedwa ndikoyenera kumasulira kwa Kubernetes 1.9+ (mutational admission webhook). Kwa mitundu ya Kubernetes 1.7, 1.8 ndizotheka kugwiritsa ntchito Initializer.

Zotengera za Sidecar zimalumikizidwa ndi Pilot pogwiritsa ntchito protocol ya GRPC, yomwe imakulolani kukhathamiritsa mtundu wokankhira pazosintha zomwe zimachitika pagulu. GRPC yakhala ikugwiritsidwa ntchito mu Envoy kuyambira mtundu 1.6, ku Istio yakhala ikugwiritsidwa ntchito kuyambira mtundu wa 0.8 ndipo ndi woyendetsa ndege - chomangira cha golang pa nthumwi chomwe chimakonza zosankha zoyambitsa.

Pilot ndi Mixer ndizinthu zopanda malire, mayiko onse amakumbukiridwa. Kukonzekera kwawo kumayikidwa mu mawonekedwe a Kubernetes Custom Resources, omwe amasungidwa etcd.
Wothandizira Istio amalandira adilesi ya Woyendetsa ndegeyo ndikutsegula mtsinje wa GRPC.

Monga ndidanenera, Istio imagwiritsa ntchito magwiridwe antchito onse powonekera pamapulogalamu. Tiyeni tione mmene tingachitire. Algorithm ndi iyi:

  1. Kuyika mtundu watsopano wa ntchito.
  2. Kutengera njira yojambulira chidebe cha sidecar, chidebe cha istio-init ndi chidebe cha istio-agent (mthumwi) amawonjezedwa pamlingo wogwiritsa ntchito kasinthidwe, kapena akhoza kuyikidwa kale pamanja pofotokozera za Kubernetes Pod.
  3. Chidebe cha istio-init ndi script yomwe imagwiritsa ntchito malamulo a iptables pa pod. Pali njira ziwiri zosinthira magalimoto kuti azikulungidwa mu chidebe cha istio-agent: gwiritsani ntchito malamulo owongolera a iptables, kapena Chithunzi cha TPROXY. Panthawi yolemba, njira yosasinthika imakhala ndi malamulo owongolera. Mu istio-init, ndizotheka kukonza magalimoto omwe ayenera kulumikizidwa ndikutumizidwa kwa istio-agent. Mwachitsanzo, kuti muchepetse magalimoto onse omwe akubwera komanso otuluka, muyenera kukhazikitsa magawo -i и -b mu mtengo *. Mutha kutchula madoko ena kuti mutseke. Kuti musasokoneze subnet inayake, mutha kufotokozera pogwiritsa ntchito mbendera -x.
  4. Zotengera za init zikatha, zazikulu zimayambitsidwa, kuphatikiza woyendetsa ndege (mtumiki). Imalumikizana ndi Woyendetsa ndege yemwe watumizidwa kale kudzera pa GRPC ndipo imalandira chidziwitso cha mautumiki onse omwe alipo komanso ndondomeko zamayendetsedwe mgululi. Malinga ndi zomwe adalandira, amakonza maguluwo ndikuwapatsa mwachindunji kumapeto kwa ntchito zathu mgulu la Kubernetes. M'pofunikanso kuzindikira mfundo yofunika: nthumwi imakonza omvera (IP, ma port pairs) omwe amayamba kumvetsera. Chifukwa chake, zopempha zikalowa mu pod, zimatumizidwanso pogwiritsa ntchito malamulo a redirect iptables mu sidecar, nthumwi imatha kukonza bwino maulumikizidwewa ndikumvetsetsa komwe angapititse patsogolo magalimoto. Komanso panthawiyi, zambiri zimatumizidwa kwa Mixer, zomwe tidzayang'ana pambuyo pake, ndipo maulendo otsata amatumizidwa.

Zotsatira zake, timapeza maukonde onse a ma seva oyimira nthumwi omwe titha kuwakonza kuchokera ku mfundo imodzi (Pilot). Zopempha zonse zolowa ndi zotuluka zimadutsa mwa nthumwi. Kuphatikiza apo, magalimoto a TCP okha ndi omwe amalumikizidwa. Izi zikutanthauza kuti Kubernetes service IP imathetsedwa pogwiritsa ntchito kube-dns pa UDP osasintha. Kenako, chigamulocho chitatha, pempho lomwe likutuluka limalandidwa ndikukonzedwa ndi nthumwi, yomwe imasankha kale kuti pempholo liyenera kutumizidwa kwa (kapena osatumizidwa, pankhani ya mfundo zopezera kapena wophwanya algorithm).

Tidalingalira Pilot, tsopano tikuyenera kumvetsetsa momwe Mixer imagwirira ntchito komanso chifukwa chake ikufunika. Mutha kuwerenga zolemba zovomerezeka za izo apa.

Chosakaniza mu mawonekedwe ake amakono chimakhala ndi zigawo ziwiri: istio-telemetry, istio-policy (pambuyo pa 0.8 inali gawo limodzi la istio-mixer). Onsewa ndi osakaniza, omwe ali ndi udindo pa ntchito yake. Istio telemetry imalandira zambiri za yemwe amapita kuti ndi magawo ati kuchokera m'matumba a sidecar Report kudzera pa GRPC. Ndondomeko ya Istio imavomereza Chongani zopempha kuti zitsimikizire kuti malamulo a Policy akwaniritsidwa. Macheke a ndondomeko, ndithudi, samachitidwa pa pempho lililonse, koma amasungidwa pa kasitomala (m'galimoto yam'mbali) kwa nthawi inayake. Macheke amalipoti amatumizidwa ngati zopempha zamagulu. Tiyeni tiwone momwe tingakhazikitsire komanso magawo omwe ayenera kutumizidwa pambuyo pake.

The Mixer ikuyenera kukhala gawo lopezeka kwambiri lomwe limatsimikizira ntchito yosasokoneza pakusonkhanitsa ndi kukonza deta ya telemetry. Dongosololi limapezedwa chifukwa chachitetezo chamitundu yambiri. Poyamba, deta ndi buffered pa sidecar mbali ya muli, ndiye pa chosakanizira mbali, ndiyeno anatumiza kwa otchedwa osakaniza backends. Zotsatira zake, ngati gawo lililonse ladongosolo likulephera, buffer imakula ndikuthamangitsidwa dongosolo likabwezeretsedwa. Mixer backends ndi malekezero otumizira deta ya telemetry: statsd, newrelic, etc. Mutha kulemba zanu zakumbuyo, ndizosavuta, ndipo tiwona momwe tingachitire.

Momwe mungayendetsere Istio pogwiritsa ntchito Kubernetes popanga. Gawo 1

Mwachidule, chiwembu chogwirira ntchito ndi istio-telemetry ndi motere.

  1. Service 1 imatumiza pempho ku service 2.
  2. Mukasiya ntchito 1, pempholi limakutidwa mugalimoto yakeyake.
  3. Nthumwi ya Sidecar imayang'anira momwe pempholo limagwirira ntchito 2 ndikukonzekeretsa zofunikira.
  4. Kenako imatumiza ku istio-telemetry pogwiritsa ntchito pempho la Report.
  5. Istio-telemetry imatsimikizira ngati Lipotili liyenera kutumizidwa kumbuyo, komwe ndi deta yomwe iyenera kutumizidwa.
  6. Istio-telemetry imatumiza lipoti la data ku backend ngati pakufunika.

Tsopano tiyeni tiwone momwe tingagwiritsire ntchito Istio mu dongosolo, lopangidwa ndi zigawo zikuluzikulu zokha (woyendetsa ndege ndi nthumwi ya sidecar).

Choyamba, tiyeni tiwone masinthidwe akulu (ma mesh) omwe Pilot amawerenga:

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

Zigawo zonse zazikulu zowongolera (ndege yowongolera) zizipezeka mu namespace istio-system ku Kubernetes.

Pang'ono ndi pang'ono, timangofunika kutumiza Pilot. Kwa izi tidzagwiritsa ntchito kasinthidwe kotere.

Ndipo tidzakonza pamanja jekeseni wam'mbali mwa chidebecho.

Koyamba:

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

Ndipo 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

Kuti chilichonse chiyambe bwino, muyenera kupanga ServiceAccount, ClusterRole, ClusterRoleBinding, CRD for Pilot, mafotokozedwe ake omwe angapezeke. apa.

Zotsatira zake, ntchito yomwe timayikiramo galimoto yam'mbali ndi nthumwi iyenera kuyamba bwino, kulandira zonse zomwe zapezeka kuchokera kwa woyendetsa ndi kukonza zopempha.

Ndikofunikira kumvetsetsa kuti zigawo zonse za ndege zowongolera ndizopanda malire ndipo zimatha kuwongoleredwa popanda mavuto. Deta yonse imasungidwa mu etcd m'njira yofotokozera za Kubernetes.

Komanso, Istio (akadali woyesera) amatha kuthamanga kunja kwa gululi komanso amatha kuyang'ana ndikufufuza kupezeka kwa ntchito pakati pa magulu angapo a Kubernetes. Mutha kuwerenga zambiri za izi apa.

Pakukhazikitsa ma multicluster, dziwani izi:

  1. Pod CIDR ndi Service CIDR ziyenera kukhala zapadera m'magulu onse ndipo zisagwirizane.
  2. Ma CIDR Pods onse ayenera kupezeka kuchokera ku CIDR Pods iliyonse pakati pa magulu.
  3. Ma seva onse a Kubernetes API ayenera kupezeka kwa wina ndi mnzake.

Uwu ndiye chidziwitso choyambirira chokuthandizani kuti muyambe ndi Istio. Komabe, pali zovuta zambiri. Mwachitsanzo, mawonekedwe oyendetsa magalimoto akunja (kunja kwa tsango), njira zowongolera magalimoto am'mbali, kufotokoza, kukhazikitsa chosakaniza ndi kulemba chosakaniza cham'mbuyo, kukhazikitsa njira yolondolera ndi ntchito yake pogwiritsa ntchito nthumwi.
Zonsezi tikambirana m'mabuku otsatirawa. Funsani mafunso anu, ndiyesetsa kuwayankha.

Source: www.habr.com

Kuwonjezera ndemanga