Mokhoa oa ho tsamaisa Istio o sebelisa Kubernetes tlhahiso. Karolo ea 1

seo Istio? Sena ke seo ho thoeng ke Service mesh, thekenoloji e eketsang lera la ho ikhula holim'a marang-rang. Re thibela bohle kapa karolo ea sephethephethe sehlopheng mme re etsa ts'ebetso e itseng ka sona. Efeng? Ka mohlala, re etsa tsela e bohlale, kapa re kenya ts'ebetsong mokhoa oa potoloho, re ka hlophisa "canary deployment", ka mokhoa o itseng re fetola sephethephethe ho mofuta o mocha oa ts'ebeletso, kapa re ka fokotsa likamano tsa ka ntle le ho laola maeto ohle ho tloha sehlopheng ho ea ho marangrang a kantle. Hoa khoneha ho beha melao ea leano ho laola maeto pakeng tsa li-microservices tse fapaneng. Qetellong, re ka fumana 'mapa oohle oa litšebelisano tsa marang-rang mme ra etsa hore pokello e kopaneng ea metric e be pepeneneng ho lits'ebetso.

U ka bala ka mochine oa mosebetsi ka litokomane tsa molao. Istio ke sesebelisoa se matla haholo se u lumellang ho rarolla mesebetsi le mathata a mangata. Sehloohong sena, ke rata ho araba lipotso tse ka sehloohong tse atisang ho hlaha ha u qala ka Istio. Sena se tla u thusa ho sebetsana le eona kapele.

Mokhoa oa ho tsamaisa Istio o sebelisa Kubernetes tlhahiso. Karolo ea 1

Kamoo e ea sebetsang

Istio e na le libaka tse peli tse kholo - sefofane sa taolo le sefofane sa data. Sefofane sa taolo se na le likarolo tse ka sehloohong tse netefatsang ts'ebetso e nepahetseng ea tse ling kaofela. Phetolelong ea hona joale (1.0) sefofane sa taolo se na le likarolo tse tharo tse kholo: Pilot, Mixer, Citadel. Ha re na ho nahana ka Citadel, hoa hlokahala ho hlahisa litifikeiti ho netefatsa hore TLS e kopane lipakeng tsa lits'ebeletso. Ha re shebisiseng sesebelisoa le sepheo sa Pilot le Mixer.

Mokhoa oa ho tsamaisa Istio o sebelisa Kubernetes tlhahiso. Karolo ea 1

Pilot ke karolo e ka sehloohong ea taolo e abang tlhahisoleseding eohle mabapi le seo re nang le sona sehlopheng - lits'ebeletso, li-endpoints tsa bona le melao ea ho tsamaisa (mohlala, melao ea ho tsamaisoa ha Canary kapa melao ea potoloho ea potoloho).

Mixer ke karolo ea boikhethelo ea sefofane e fanang ka bokhoni ba ho bokella metrics, logs, le tlhahisoleseling efe kapa efe mabapi le tšebelisano ea marang-rang. O boetse o beha leihlo ho tsamaellana le melao ea Leano le ho tsamaellana le meeli ea litefiso.

Sefofane sa data se kengoa ts'ebetsong ho sebelisoa lijana tsa proxy tsa sidecar. Matla a sebelisoa ke kamehla. moemeli oa moemeli. E ka nkeloa sebaka ke ts'ebetsong e 'ngoe, e kang nginx (nginmesh).

E le hore Istio e sebetse ka mokhoa o hlakileng ka ho feletseng lits'ebetsong, ho na le tsamaiso ea ente e ikemetseng. Ts'ebetsong ea morao-rao e loketse mefuta ea Kubernetes 1.9+ (mutational admission webhook). Bakeng sa mefuta ea Kubernetes 1.7, 1.8 hoa khoneha ho sebelisa Initializer.

Lijana tsa Sidecar li hokahantsoe le Pilot ho sebelisa protocol ea GRPC, e u lumellang ho ntlafatsa mofuta oa push bakeng sa liphetoho tse etsahalang sehlopheng. GRPC e 'nile ea sebelisoa ho Envoy ho tloha phetolelong ea 1.6, ho Istio esale e sebelisoa ho tloha phetolelong ea 0.8 'me ke moemeli oa lifofane - sephutheloana sa golang holim'a lenģosa le hlophisang likhetho tsa ho qala.

Pilot le Mixer ke likarolo tse se nang palo ka ho felletseng, naha eohle e bolokiloe mohopolong. Tlhophiso ea bona e behiloe ka mokhoa oa Kubernetes Custom Resources, e bolokiloeng joalo-joalo.
Moemeli oa Istio o fumana aterese ea Pilot mme o bula GRPC molapo ho eona.

Joalokaha ke boletse, Istio e sebelisa lits'ebetso tsohle tse pepeneneng ho lits'ebetso. A re boneng hore na joang. Algorithm ke ena:

  1. Ho hlahisa mofuta o mocha oa tšebeletso.
  2. Ho ipapisitsoe le mokhoa oa ho enta ka sekontiri se ka thōko, setshelo sa istio-init le setshelo sa istio-agent (moemeli) li eketsoa sethaleng sa ho sebelisa tlhophiso, kapa li se li ka kenngoa ka letsoho tlhalosong ea mokhatlo oa Kubernetes Pod.
  3. Sesebelisoa sa istio-init ke script e sebelisang melao ea iptables ho pod. Ho na le likhetho tse peli bakeng sa ho hlophisa sephethephethe se tla koaheloa ka sejana sa istio-agent: sebelisa melaoana e tsamaisang li-iptables, kapa TPROXE. Nakong ea ho ngola, mokhoa oa kamehla o na le melao ea ho tsamaisa hape. Ho istio-init, hoa khoneha ho hlophisa hore na ke sephethephethe sefe se lokelang ho amoheloa le ho romeloa ho istio-agent. Ka mohlala, e le ho thibela sephethephethe sohle se kenang le se tsoang, ho hlokahala hore u behe li-parameter -i и -b ho ba le moelelo *. O ka hlakisa likou tse khethehileng ho thibela. E le hore u se ke ua thibela subnet e itseng, u ka e hlalosa u sebelisa folakha -x.
  4. Ka mor'a hore lijana tsa init li phethoe, tse ka sehloohong li qalisoa, ho kenyelletsa le mofofisi oa sefofane (moemeli). E hokahana le Pilot e seng e kentsoe tšebetsong ka GRPC 'me e fumana leseli mabapi le lits'ebeletso tsohle tse teng le maano a litsela sehlopheng. Ho ea ka lintlha tse fumanoeng, o lokisa lihlopha ebe o li abela ka ho toba qetellong ea likopo tsa rona sehlopheng sa Kubernetes. Hape hoa hlokahala ho ela hloko ntlha ea bohlokoa: moemeli o hlophisa bamameli ka matla (IP, li-port pair) tseo a qalang ho li mamela. Ka hona, ha likōpo li kena ka pod, li fetisetsoa ho sebelisa melao ea iptables ea redirect ka lehlakoreng la koloi, moemeli a ka se a ntse a sebetsana ka katleho le likhokahano tsena le ho utloisisa hore na o ka tsoela pele ho ba moemeli oa sephethephethe hokae. Hape mothating ona, tlhahisoleseling e romelloa ho Mixer, eo re tla e sheba hamorao, 'me ho romelloa spans.

Ka lebaka leo, re fumana marang-rang a mangata a li-server tsa proxy tseo re ka li lokisang ho tloha ntlha e le 'ngoe (Pilot). Likopo tsohle tse kenang le tse tsoang kantle li feta ka moemeli. Ho feta moo, ke sephethephethe sa TCP feela se amoheloang. Sena se bolela hore tšebeletso ea Kubernetes IP e rarolloa ho sebelisoa kube-dns holim'a UDP ntle le ho fetoha. Joale, ka mor'a qeto eo, kopo e hlahang e amoheloa le ho sebetsoa ke moemeli, ea seng a ntse a etsa qeto ea hore na kopo e lokela ho romelloa hokae (kapa e sa romeloe, tabeng ea maano a phihlello kapa sekhechana sa algorithm).

Re fumane Pilot, joale re hloka ho utloisisa hore na Mixer e sebetsa joang le hore na hobaneng e hlokahala. U ka bala litokomane tsa molao bakeng sa eona mona.

Motsoako ka mokhoa oa hona joale o na le likarolo tse peli: istio-telemetry, istio-policy (pele ho phetolelo ea 0.8 e ne e le karolo e le 'ngoe ea istio-mixer). Ka bobeli ke li-mixer, tseo e 'ngoe le e' ngoe e ikarabellang bakeng sa mosebetsi oa eona. Istio telemetry e fumana leseli mabapi le hore na ke mang ea eang kae le hore na o sebelisa li-parameter life ho tsoa lijaneng tsa li-sidecar Report ka GRPC. Leano la Istio le amohela likopo tsa Hlahloba ho netefatsa hore melao ea Leano e khotsofetse. Licheke tsa leano, ehlile, ha li etsoe bakeng sa kopo e 'ngoe le e' ngoe, empa li bolokiloe ho moreki (ka koloing e ka thoko) ka nako e itseng. Licheke tsa tlaleho li romelloa joalo ka likopo tsa sehlopha. Ha re boneng mokhoa oa ho hlophisa le hore na ke li-parameter life tse lokelang ho romelloa hamorao.

Mixer e lokela ho ba karolo e fumanehang haholo e netefatsang mosebetsi o sa sitisoeng ho kopanya le ho sebetsa ha data ea telemetry. Sistimi e fumanoa ka lebaka leo e le buffer ea maemo a mangata. Qalong, data e buffered ka lehlakoreng le ka lehlakoreng la lijana, ebe ka lehlakoreng la mixer, ebe e romeloa ho seo ho thoeng ke li-mixer backends. Ka lebaka leo, haeba e 'ngoe ea likarolo tsa sistimi e hloleha, buffer e ea hola mme e hlatsuoa kamora hore sistimi e tsosolose. Li-mixer backends ke liphetho tsa ho romella data ea telemetry: statsd, newrelic, joalo-joalo. U ka ngola sengoloa sa hau sa morao-rao, se bonolo haholo, 'me re tla bona hore na se etsoa joang.

Mokhoa oa ho tsamaisa Istio o sebelisa Kubernetes tlhahiso. Karolo ea 1

Ho akaretsa, leano la ho sebetsa le istio-telemetry ke le latelang.

  1. Tšebeletso ea 1 e romela kopo ho tšebeletso 2.
  2. Ha u tlohela tšebeletso ea 1, kopo e phuthetsoe ka koloing ea eona e ka thōko.
  3. Moemeli oa Sidecar o beha leihlo hore na kopo e ea joang tšebeletsong ea 2 le ho lokisa tlhahisoleseding e hlokahalang.
  4. Ebe e e romella ho istio-telemetry o sebelisa kopo ea Tlaleho.
  5. Istio-telemetry e etsa qeto ea hore na Tlaleho ena e lokela ho romelloa ka morao, hore na data e lokela ho romeloa hokae le hore na ke efe.
  6. Istio-telemetry e romella Tlaleho ea data ho backend haeba ho hlokahala.

Joale a re boneng mokhoa oa ho kenya Istio tsamaisong, e nang le likarolo tse ka sehloohong feela (Pilot le moemeli oa likoloi tse ka thōko).

Taba ea pele, a re shebeng tlhophiso ea mantlha (mesh) eo Pilot a e balang:

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

Likarolo tsohle tse ka sehloohong tsa taolo (sefofane sa taolo) li tla be li le sebakeng sa lebitso la istio-system ho Kubernetes.

Bonyane, re hloka feela ho sebelisa Pilot. Bakeng sa sena re sebelisa tlhophiso e joalo.

'Me re tla hlophisa ka letsoho koloi e ka thōko e kenang ea setshelo.

Qala setshelo:

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

Le 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

E le hore ntho e 'ngoe le e' ngoe e qale ka katleho, o hloka ho theha ServiceAccount, ClusterRole, ClusterRoleBinding, CRD bakeng sa Pilot, litlhaloso tsa eona li ka fumanoa. mona.

Ka lebaka leo, ts'ebeletso eo re kenyang koloi e ka thōko ho eona le moemeli e lokela ho qala ka katleho, ho fumana lintho tsohle tse sibollotsoeng ho tsoa ho mofofisi le ho sebetsa likopo.

Ho bohlokoa ho utloisisa hore likarolo tsohle tsa sefofane sa taolo ke lits'ebetso tse se nang palo mme li ka fokotsoa ka mokhoa o otlolohileng ntle le mathata. Lintlha tsohle li bolokiloe joalo-joalo ka mokhoa oa litlhaloso tsa tloaelo tsa lisebelisoa tsa Kubernetes.

Hape, Istio (e ntse e le liteko) e na le bokhoni ba ho matha ka ntle ho sehlopha le bokhoni ba ho shebella le ho sibolla litšebeletso tse sibollotsoeng pakeng tsa lihlopha tse 'maloa tsa Kubernetes. U ka bala haholoanyane ka sena mona.

Bakeng sa ho kenya lihlopha tse ngata, ela hloko mefokolo e latelang:

  1. Pod CIDR le Service CIDR li tlameha ho ikhetha ho pholletsa le lihlopha tsohle 'me li se ke tsa nyallana.
  2. Li-pods tsohle tsa CIDR li tlameha ho fumaneha ho tsoa ho li-pods tsa CIDR lipakeng tsa lihlopha.
  3. Li-server tsohle tsa Kubernetes API li tlameha ho fumaneha ho tse ling.

Ena ke lintlha tsa pele tse u thusang ho qala ka Istio. Leha ho le joalo, ho ntse ho e-na le maraba a mangata. Ka mohlala, likarolo tsa ho tsamaisa sephethephethe sa ka ntle (ka ntle ho sehlopha), mekhoa ea ho lokisa li-sidecars, profiling, ho theha motsoako le ho ngola mokokotlo oa motsoako o tloaelehileng, ho theha mochine oa ho latela le ts'ebetso ea oona ho sebelisa moemeli.
Tsena tsohle re tla li tšohla likhatisong tse latelang. Botsa lipotso tsa hau, ke tla leka ho li koahela.

Source: www.habr.com

Eketsa ka tlhaloso