Sida loo maamulo Istio iyadoo la adeegsanayo Kubernetes xagga wax soo saarka. Qaybta 1

Maxaa Istio? Kani waa waxa loogu yeero mesh-ka Adeegga, tignoolajiyada ku darta lakabka aabstraction ee shabakada. Waxaan ka joojinaa dhammaan ama qayb ka mid ah taraafikada kooxda waxaanan ku samaynaa hawlo gaar ah. Midkee? Tusaale ahaan, waxaan sameynaa dariiqo caqli-gal ah, ama waxaan hirgelineynaa habka wareegga wareegga, waxaan abaabuli karnaa "dejinta canary", qayb ahaan u beddelka taraafikada nooc cusub oo adeegga ah, ama waxaan xaddidi karnaa isdhexgalka dibadda waxaanan xakameyn karnaa dhammaan safarrada laga soo bilaabo kooxda ilaa shabakadda dibadda. Waa suurtogal in la dejiyo xeerar siyaasadeed si loo xakameeyo safarrada u dhexeeya adeegyadda yar yar ee kala duwan. Ugu dambeyntii, waxaan heli karnaa dhammaan khariidadda is dhexgalka shabakada waxaanan ka dhigi karnaa ururinta halbeegyada midaysan oo si buuxda u hufan codsiyada.

Waxaad ka akhrisan kartaa habka shaqada gudaha dukumeenti rasmi ah. Istio waa qalab aad u awood badan oo kuu ogolaanaya inaad xalliso hawlo iyo dhibaatooyin badan. Maqaalkan, waxaan jeclaan lahaa inaan ka jawaabo su'aalaha ugu muhiimsan ee badanaa soo baxa marka la bilaabayo Istio. Tani waxay kaa caawin doontaa inaad si degdeg ah wax uga qabato.

Sida loo maamulo Istio iyadoo la adeegsanayo Kubernetes xagga wax soo saarka. Qaybta 1

Sida ay u hawlgasho

Istio wuxuu ka kooban yahay laba qaybood oo waaweyn - diyaaradda kontoroolka iyo diyaaradda xogta. Diyaaradda xakamaynta waxay ka kooban tahay qaybaha ugu muhiimsan ee hubinaya hawlgalka saxda ah ee inta kale. Nooca hadda jira (1.0) diyaaradda xakamaynta waxay leedahay saddex qaybood oo waaweyn: Pilot, Mixer, Citadel. Ma tixgelin doono Citadel, waxaa loo baahan yahay in la soo saaro shahaadooyin si loo hubiyo in TLS ay wadaagaan adeegyada. Aan si dhow u eegno qalabka iyo ujeedada Pilot iyo Mixer.

Sida loo maamulo Istio iyadoo la adeegsanayo Kubernetes xagga wax soo saarka. Qaybta 1

Duuliye waa qaybta koontaroolka ugu weyn ee qaybisa dhammaan macluumaadka ku saabsan waxa aan ku hayno kutlada - adeegyada, barahooda dhamaadka iyo sharciyada dariiqa (tusaale, xeerarka dejinta Canary ama xeerarka wareegga wareegga).

Mixer waa qayb ka mid ah diyaarada kontoroolka ikhtiyaarka ah oo bixisa awooda lagu ururiyo mitirka, logs, iyo macluumaad kasta oo ku saabsan isdhexgalka shabakada. Waxa kale oo uu la socdaa u hoggaansanaanta xeerarka Siyaasadda iyo u hoggaansanaanta xadka sicirka.

Diyaaradda xogta waxaa lagu hirgeliyaa iyadoo la isticmaalayo weelasha wakiillada sidecar. Awood leh waxaa loo adeegsadaa si caadi ah. wakiil wakiil. Waxaa lagu bedeli karaa hirgelin kale, sida nginx (nginmesh).

Si Istio uu si hufan ugu shaqeeyo codsiyada, waxaa jira nidaam duritaan oo toos ah. Hirgelintii u dambaysay waxay ku habboon tahay Kubernetes 1.9+ noocyada (webhook gelitaanka isbeddelka). Noocyada Kubernetes 1.7, 1.8 waa suurtogal in la isticmaalo bilowga.

Weelasha gaadhigu waxay ku xidhan yihiin duuliyaha iyadoo la isticmaalayo borotokoolka GRPC, kaas oo kuu ogolaanaya inaad sare u qaaddo qaabka riixitaanka ee isbeddelada ku dhaca kutlada. GRPC waxaa lagu dhex isticmaalay Ergayga ilaa nooca 1.6, gudaha Istio waxaa la isticmaalayey ilaa nooca 0.8 waana wakiil duuliye - duubo golang ah oo ka sarreeya ergayga kaas oo habeeya xulashooyinka bilaabista.

Duuliye iyo Mixer gabi ahaanba waa qaybo bilaa dawlad ah, dhammaan gobolka waxa lagu hayaa xusuusta. Qaabaynta iyaga waxa loo dejiyay qaab Kubernetes Custom Resources, kuwaas oo lagu kaydiyo iwm.
Wakiilka Istio wuxuu helay ciwaanka duuliyaha oo u furaya qulqulka GRPC.

Sidii aan idhi, Istio waxay fulisaa dhammaan hawlaha si buuxda oo hufan codsiyada. Aan aragno sida. Algorithm waa kan:

  1. Gelinaya nooc cusub oo adeega ah.
  2. Iyada oo ku xidhan habka duritaanka weelka dhinac, weelka istio-init iyo weelka wakiilka istio (ergeyga) ayaa lagu daraa marxaladda lagu dabaqayo qaabeynta, ama mar hore ayaa gacanta lagu gelin karaa sharaxaadda cidda Kubernetes Pod.
  3. Weelka istio-init waa qoraal ku dabaqa xeerarka iptables-ka podska. Waxaa jira laba ikhtiyaar oo loogu talagalay habaynta taraafikada in lagu duuduubo weelka wakiilka istio: isticmaal xeerarka dib u habeynta iptables, ama TPRoxy. Waqtiga qorista, habka caadiga ah wuxuu la socdaa sharciyada dib u hagida. Gudaha istio-init, waa suurtagal in la habeeyo taraafikada ay tahay in la joojiyo oo loo diro wakiilka istio-agent. Tusaale ahaan, si aad u dhexgasho dhammaan taraafikada soo galaya iyo dhammaan taraafikada, waxaad u baahan tahay inaad dejiso cabbirada -i и -b macno ahaan *. Waxaad cayimi kartaa dekedo gaar ah si aad u dhex gasho. Si aanad u dhexgalin subnet gaar ah, waxaad ku qeexi kartaa adigoo isticmaalaya calanka -x.
  4. Ka dib marka weelasha la geliyo, kuwa ugu muhiimsan ayaa la bilaabayaa, oo ay ku jiraan wakiilka duuliyaha (ergeyga). Waxa ay ku xidhaa duuliyihii hore loo diray iyada oo loo sii marayo GRPC oo ay ka hesho macluumaadka ku saabsan dhammaan adeegyada jira iyo siyaasadaha hagidda kooxda. Marka loo eego xogta la helay, wuxuu habeeyaa kooxaha wuxuuna si toos ah ugu meeleeyaa meelaha ugu dambeeya ee codsiyadeena ku jira kutlada Kubernetes. Waxa kale oo lagama maarmaan ah in la xuso qodob muhiim ah: ergeygu wuxuu si firfircoon u habeeyaa dhegeystayaasha (IP, port pairs) ee uu bilaabo dhegeysiga. Sidaa darteed, marka codsiyadu soo galaan podska, waxaa dib loo hagayaa iyada oo la adeegsanayo xeerarka dib-u-dejinta iptables ee ku yaal dhinaca baabuurka, ergeygu wuxuu horeyba si guul leh u socodsiin karaa isku-xirayaashan oo uu fahmi karaa meesha uu ku sii socdo wakiilka gaadiidka. Sidoo kale marxaladan, macluumaadka waxaa loo diraa Mixer-ka, kaas oo aan dib u eegi doono, baafinta taako ayaa loo diraa.

Natiijo ahaan, waxaan helnaa shabakad dhan oo ah server-yada wakiillada oo aan ka habeyn karno hal dhibic (Pilot). Dhammaan codsiyada soo gelitaanka iyo ka bixida waxay maraan ergayga. Waxaa intaa dheer, kaliya taraafikada TCP ayaa la xannibay. Tani waxay ka dhigan tahay in adeegga Kubernetes IP lagu xalliyo iyadoo la isticmaalayo kube-dns dusha UDP iyada oo aan la beddelin. Kadib, ka dib markii la xaliyo, codsiga baxay waa la dhexgalo oo laga baaraandegay ergeyga, kaas oo horey u go'aamiyay meesha ugu dambeysa ee codsiga loo diri karo (ama aan la dirin, marka la eego siyaasadaha helitaanka ama wareegga wareegga algorithm).

Waxaan ogaanay Pilot, hadda waxaan u baahanahay inaan fahamno sida Mixer u shaqeeyo iyo sababta loogu baahan yahay. Waxaad u akhrin kartaa dukumentiyada rasmiga ah halkan.

Mixer qaabka uu hadda yahay waxa uu ka kooban yahay laba qaybood: istio-telemetry, istio-policy (ka hor nooca 0.8 waxa ay ahayd hal qayb istio-mixer). Labaduba waa isku-darka, mid walbana shaqadiisa ayuu ka masuul yahay. Istio telemetry waxa ay heshaa macluumaadka ku saabsan cidda tagta iyo waxa cabbiraadaha ka soo warbixi weelasha dhinaca gaadhiga iyada oo loo sii marayo GRPC. Siyaasadda Istio-ku waxay aqbashaa codsiyada Jeegga si loo xaqiijiyo in xeerarka siyaasaddu ay ku qanacsan yihiin. Jeegaga sharciga ah, dabcan, lama fuliyo codsi kasta, laakiin waxa lagu kaydiyaa macmiilka (baabuurka dhinaceeda) wakhti go'an. Jeegaga warbixinta waxa loo diraa codsi dufcad ahaan. Aan aragno sida loo habeeyo iyo waxa loo baahan yahay in la diro wax yar ka dib.

Mixer-ku waxa loo malaynayaa inuu yahay qayb si heersare ah loo heli karo oo hubisa shaqada aan kala go' lahayn ee ururinta iyo habaynta xogta telemetry. Nadaamka waxa lagu helay natiijadu tahay kayd heerar badan ah. Ugu horrayn, xogta waxa lagu xidhaa dhinaca baabuurka weelasha, ka dibna dhinaca qaswadayaasha, ka dibna waxa loo diraa waxa loogu yeedho qasaha dhabarka. Natiijo ahaan, haddii mid ka mid ah qaybaha nidaamka ay ku guuldareystaan, kaydku wuu koraa oo waa la nadiifiyaa ka dib marka nidaamka dib loo soo celiyo. Backends Mixer waa barta dhamaadka dirida xogta telemetry: statsd, newrelic, iwm. Waxaad qori kartaa dhabarkaaga, way fududahay, waana arki doonaa sida loo sameeyo.

Sida loo maamulo Istio iyadoo la adeegsanayo Kubernetes xagga wax soo saarka. Qaybta 1

Si loo soo koobo, nidaamka loogu shaqeeyo istio-telemetry waa sida soo socota.

  1. Adeegga 1 waxa uu codsi u diraa adeegga 2.
  2. Markaad ka baxayso adeega 1, codsiga waxa lagu duuduubay gaadhi dhinaceeda ah.
  3. Ergeyga Sidecar wuxuu la socdaa sida codsigu u socdo adeegga 2 wuxuuna diyaariyaa macluumaadka lagama maarmaanka ah.
  4. Kadibna waxay u dirtaa istio-telemetry iyadoo la isticmaalayo codsi Warbixinta.
  5. Istio-telemetry ayaa go'aamisa in Warbixintan loo diro dhabarka dambe, xogta loo dirayo iyo in kale.
  6. Istio-telemetry waxay u soo dirtaa xogta xogta dhabarka dambe haddii loo baahdo.

Hadda aan aragno sida loo geeyo Istio nidaamka, oo ka kooban kaliya qaybaha ugu muhiimsan (Pilot iyo sidecar envoy).

Marka hore, aan eegno qaabeynta ugu weyn (mesh) ee uu Pilot akhriyo:

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

Dhammaan qaybaha ugu muhiimsan ee kantaroolka (diyaaradda xakamaynta) waxay ku yaalliin nidaamka istio-namespace ee Kubernetes.

Ugu yaraan, waxaan u baahanahay oo kaliya inaan dirno Pilot. Tan waxaan u isticmaalnaa qaabeynta sida.

Oo waxaan gacanta ku habeyn doonaa gaariga dhinac ee weelka lagu duro.

Weelka gudaha:

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

Iyo 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

Si wax walba ay ugu bilowdaan si guul leh, waxaad u baahan tahay inaad abuurto ServiceAccount, ClusterRole, ClusterRoleBinding, CRD for Pilot, sharraxaadahaas oo la heli karo halkan.

Natiijo ahaan, adeegga aan ku durayno baabuur dhinac-side ah ergayga waa in uu si guul leh u bilaabo, oo uu helo dhammaan daahfurka duuliyaha iyo codsiyada habraaca.

Waxaa muhiim ah in la fahmo in dhammaan qaybaha diyaaraduhu ay yihiin codsiyo aan waddan lahayn oo si siman loo cabbiri karo dhib la'aan. Dhammaan xogta waxa lagu kaydiyaa etcd qaab sifada gaarka ah ee ilaha Kubernetes.

Sidoo kale, Istio (wali waa tijaabo) waxa uu awood u leeyahay in uu ka baxsado kutlada iyo awooda uu ku daawado oo uu ku dawakhsado helitaanka adeega inta u dhaxaysa dhawr kooxood oo Kubernetes ah. Wax badan oo arrintan ku saabsan ayaad ka akhrisan kartaa halkan.

Ku rakibida kooxo badan, ka digtoonow xaddidaadaha soo socda:

  1. Pod CIDR iyo Adeegga CIDR waa inay ahaadaan kuwo u gaar ah dhammaan rucubyada oo waa inaysan is dulsaaran.
  2. Dhammaan CIDR Pods waa in laga heli karaa CIDR Pods kasta oo u dhexeeya rucubyada.
  3. Dhammaan adeegayaasha API ee Kubernetes waa inay noqdaan kuwo la heli karo midba midka kale.

Tani waa macluumaadka ugu horreeya ee kaa caawinaya inaad ku bilowdo Istio. Si kastaba ha ahaatee, weli waxaa jira dabinno badan. Tusaale ahaan, sifooyinka habaynta taraafikada dibadda (kutlada ka baxsan), hababka lagu saxayo baabuurta dhinaceeda, muujinta, samaynta qaswadayaasha iyo qorista dhabarka dambe ee qasaha, dejinta habka baafinta iyo hawlgalkeeda iyadoo la adeegsanayo ergayga.
Waxaas oo dhan waxaynu ka fiirsan doonaa daabacadaha soo socda. Weydii su'aalahaaga, waxaan isku dayi doonaa inaan daboolo.

Source: www.habr.com

Add a comment