Otu esi agba ọsọ Istio site na iji Kubernetes na mmepụta. Akụkụ 1

Gịnị Istio? Nke a bụ ihe a na-akpọ ntupu ọrụ, teknụzụ na-agbakwunye akwa abstraction na netwọkụ. Anyị na-egbochi ihe niile ma ọ bụ akụkụ nke okporo ụzọ dị na ụyọkọ ahụ ma jiri ya rụọ ọrụ ụfọdụ. Kedu nke ọ bụ? Dị ka ọmụmaatụ, anyị na-eme smart routing, ma ọ bụ anyị mejuputa sekit breaker obibia, anyị nwere ike hazie "canary deployment", akụkụ ụfọdụ ịgbanwe okporo ụzọ na ụdị ọhụrụ nke ọrụ, ma ọ bụ anyị nwere ike na-amachi mpụga mmekọrịta ma na-achịkwa niile njem si ụyọkọ na netwọk mpụga. Ọ ga-ekwe omume ịtọ iwu iwu iji chịkwaa njem n'etiti ọrụ microservice dị iche iche. N'ikpeazụ, anyị nwere ike nweta maapụ mmekọrịta netwọkụ niile wee mee ka mkpokọta metrik dị n'otu pụta ìhè na ngwa.

Ị nwere ike ịgụ banyere usoro nke ọrụ na akwụkwọ ikike. Istio bụ ngwá ọrụ dị ike nke na-enye gị ohere idozi ọtụtụ ọrụ na nsogbu. N'isiokwu a, ọ ga-amasị m ịza ajụjụ ndị bụ isi na-ebilite mgbe ịmalitere Istio. Nke a ga-enyere gị aka ime ya ngwa ngwa.

Otu esi agba ọsọ Istio site na iji Kubernetes na mmepụta. Akụkụ 1

Olee otú o si arụ ọrụ

Istio nwere mpaghara isi abụọ - ụgbọ elu njikwa na ụgbọ elu data. Ụgbọ elu na-achịkwa nwere ihe ndị bụ isi na-eme ka ọrụ ndị ọzọ dị mma. Na ụdị ugbu a (1.0) ụgbọ elu njikwa nwere isi ihe atọ: Pilot, Mixer, Citadel. Anyị agaghị atụle Citadel, ọ dị mkpa ka ịmepụta asambodo iji hụ na TLS jikọrọ ọnụ n'etiti ọrụ. Ka anyị lebakwuo anya na ngwaọrụ na ebumnuche nke Pilot na Mixer.

Otu esi agba ọsọ Istio site na iji Kubernetes na mmepụta. Akụkụ 1

Pilot bụ isi ihe njikwa nke na-ekesa ozi niile gbasara ihe anyị nwere na ụyọkọ - ọrụ, njedebe ha na iwu ntụgharị (dịka ọmụmaatụ, iwu maka ntinye Canary ma ọ bụ iwu sekit).

Ngwakọta bụ akụrụngwa njikwa ụgbọ elu nhọrọ nke na-enye ikike ịnakọta metrik, ndekọ na ozi ọ bụla gbasara mmekọrịta netwọkụ. Ọ na-enyocha nrube isi na iwu Iwu yana nnabata na oke ọnụego.

A na-eji igbe proxy sidecar mejuputa ụgbọ elu data. A na-eji nke dị ike na ndabara. onye nnọchiteanya proxy. Enwere ike dochie ya site na mmejuputa ọzọ, dị ka nginx (nginmesh).

Ka Istio rụọ ọrụ n'ụzọ doro anya na ngwa, enwere sistemụ ịgbanye akpaaka. Mmejuputa iwu kachasị ọhụrụ dabara adaba maka ụdị Kubernetes 1.9+ (webhook nnabata mutational). Maka ụdị Kubernetes 1.7, 1.8 ọ ga-ekwe omume iji Initializer.

A na-ejikọta akpa ndị sidecar na Pilot na-eji usoro GRPC, nke na-enye gị ohere ịkwalite ụdị ntinye maka mgbanwe na-eme na ụyọkọ ahụ. Ejiri GRPC na Envoy kemgbe ụdị 1.6, na Istio ejirila ya kemgbe ụdị 0.8 ma bụrụ onye nnọchi anya ụgbọ elu - ihe mkpuchi golang n'elu onye ozi na-ahazi nhọrọ mmalite.

Pilot na mixer bụ ihe ndị na-enweghị steeti, echekwara steeti niile na ebe nchekwa. Edebere nhazi maka ha n'ụdị Kubernetes Custom Resources, nke echekwara na wdg.
Onye nnọchi anya Istio na-enweta adreesị Pilot wee mepee iyi GRPC na ya.

Dịka m kwuru, Istio na-arụ ọrụ niile doro anya na ngwa. Ka anyị hụ otú. Algọridim bụ nke a:

  1. Na-ebuga ụdị ọrụ ọhụrụ.
  2. Dabere na ụzọ ntinye akpa akpa sidecar, a na-agbakwunye akpa istio-init na akpa onye nnọchi anya (onye ozi) na ọkwa nke itinye nhazi ahụ, ma ọ bụ tinyelarị ha aka na nkọwa nke ụlọ ọrụ Kubernetes Pod.
  3. Akpa istio-init bụ edemede na-etinye iwu iptables na pọd. Enwere nhọrọ abụọ maka ịhazi okporo ụzọ ka a kechie n'ime akpa onye nnọchi anya istio: jiri iwu iptables redirect, ma ọ bụ TPRXY. N'oge ederede, usoro ndabara bụ iwu redirect. Na istio-init, ọ ga-ekwe omume ịhazi okporo ụzọ a ga-egbochi ma ziga ya na onye nnọchi anya istio. Dịka ọmụmaatụ, iji gbochie okporo ụzọ niile na-abata na ndị na-apụ apụ, ịkwesịrị ịtọ ntọala -i и -b n'ime ihe pụtara *. Ị nwere ike ezipụta ọdụ ụgbọ mmiri akọwapụtara iji gbochie. Ka ị ghara igbochi otu subnet a kapịrị ọnụ, ịnwere ike iji ọkọlọtọ kọwaa ya -x.
  4. Mgbe e gbuchara igbe init, a na-ewepụta ihe ndị bụ isi, gụnyere onye na-anya ụgbọelu (onye ozi). Ọ na-ejikọ na Pilot etinyelarị ugbu a site na GRPC wee nata ozi gbasara ọrụ niile dị na atumatu ngagharị na ụyọkọ ahụ. Dị ka data natara, ọ na-ahazi ụyọkọ ma kenye ha ozugbo na njedebe nke ngwa anyị na ụyọkọ Kubernetes. Ọ dịkwa mkpa iburu n'uche isi ihe dị mkpa: onye nnọchi anya na-ahazi ndị na-ege ntị (IP, ọdụ ụgbọ mmiri) nke ọ na-amalite ige ntị. Ya mere, mgbe arịrịọ tinye pod, na-ibugharị site na iji redirect iptables iwu na sidecar, envoy nwere ike ugbua ọma hazie ndị a njikọ na ịghọta ebe ọzọ proxy okporo ụzọ. Nakwa na ọkwa a, a na-ezigara ozi na Mixer, nke anyị ga-eleba anya ma e mesịa, a na-ezigakwa oge ịchọta.

N'ihi ya, anyị na-enweta a dum netwọk nke envoy proxy sava na anyị nwere ike hazie site n'otu ebe (Pilot). Arịrịọ niile mbata na ọpụpụ na-aga site n'aka ndị ozi. Ọzọkwa, naanị okporo ụzọ TCP ka a na-egbochi. Nke a pụtara na a na-edozi IP ọrụ Kubernetes site na iji kube-dns n'elu UDP na-agbanweghị. Mgbe ahụ, mgbe mkpebi ahụ gasịrị, a na-anabata arịrịọ na-apụ apụ ma na-edozi ya site n'aka onye nnọchiteanya, nke kpebirilarị njedebe njedebe nke a ga-ezigara arịrịọ ahụ (ma ọ bụ na-ezigaghị ya, n'ihe banyere ohere ịnweta ma ọ bụ onye na-emebi sekit nke algọridim).

Anyị chepụtara Pilot, ugbu a, anyị kwesịrị ịghọta otú Mixer si arụ ọrụ na ihe mere o ji dị mkpa. Ị nwere ike ịgụ akwụkwọ maka ya ebe a.

Ngwakọta n'ụdị ya dị ugbu a nwere ihe abụọ: istio-telemetry, istio-policy (tupu ụdị 0.8 ọ bụ otu akụkụ istio-mixer). Ha abụọ bụ mixers, nke ọ bụla n'ime ha na-ahụ maka ọrụ nke ya. Istio telemetry na-enweta ozi gbasara onye na-aga ebe yana ụdị paramita sitere na igbe mkpesa sidecar site na GRPC. Istio-policy na-anabata arịrịọ nlele iji nyochaa na afọ ojuju iwu amụma. N'ezie, a na-eme ndenye ego maka arịrịọ ọ bụla, mana a na-echekwa ya na onye ahịa (na sidecar) ruo oge ụfọdụ. A na-eziga nlele mkpesa dị ka arịrịọ ogbe. Ka anyị hụ otú e si ahazi na ihe parameters kwesịrị iziga obere ka e mesịrị.

Ngwakọta ahụ kwesịrị ịbụ akụkụ dị oke mma nke na-eme ka ọrụ akwụsịghị akwụsị na mgbakọ na nhazi nke data telemetry. A na-enweta usoro ahụ n'ihi na ọ bụ ihe nkwụnye ọkwa dị iche iche. Na mbụ, data na-buffered n'akụkụ sidecar nke containers, mgbe ahụ n'akụkụ igwekota, na mgbe ahụ zigara na-akpọ mixer backends. N'ihi ya, ọ bụrụ na nke ọ bụla n'ime ihe ndị dị na sistemu ahụ ada ada, ihe nchekwa ahụ na-eto ma na-ekpochapụ ya mgbe emechara usoro ahụ. Ngwakọta azụ azụ bụ njedebe maka izipu data telemetry: statsd, newrelic, wdg. Ị nwere ike dee azụ azụ nke gị, ọ dị mfe, anyị ga-ahụkwa ka esi eme ya.

Otu esi agba ọsọ Istio site na iji Kubernetes na mmepụta. Akụkụ 1

Iji chịkọta ọnụ, atụmatụ maka ịrụ ọrụ na istio-telemetry bụ nke a.

  1. Ọrụ 1 na-eziga arịrịọ maka ọrụ 2.
  2. Mgbe ị na-ahapụ ọrụ 1, a na-ekechi arịrịọ ahụ n'akụkụ ụgbọ nke ya.
  3. Onye nnọchi anya Sidecar na-enyocha ka arịrịọ ahụ si aga ọrụ 2 ma kwadebe ozi dị mkpa.
  4. Wee zipu ya na istio-telemetry site na iji mkpesa mkpesa.
  5. Istio-telemetry na-ekpebi ma a ga-ezigara akụkọ a na azụ azụ, nke na ihe data kwesịrị iziga.
  6. Istio-telemetry na-eziga data mkpesa na azụ azụ ma ọ dị mkpa.

Ugbu a, ka anyị hụ otú idokwa Istio na usoro, esịnede naanị nke isi components (Pilot na sidecar envoy).

Nke mbụ, ka anyị leba anya na nhazi isi (ntupu) nke Pilot gụrụ:

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

All isi ihe njikwa (ụgbọ elu njikwa) ga-adị na namespace istio-system na Kubernetes.

Opekempe, naanị anyị kwesịrị ibuga Pilot. Maka nke a anyị na-eji nhazi dị otú ahụ.

Na anyị ga-eji aka hazie injecting sidecar nke akpa.

Akpa 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

Na 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

Ka ihe niile wee malite nke ọma, ịkwesịrị ịmepụta AccountAccount, ClusterRole, ClusterRoleBinding, CRD maka Pilot, nkọwa nke enwere ike ịchọta ya. ebe a.

N'ihi ya, ọrụ nke anyị na-ịgba sidecar na envoy kwesịrị ịmalite nke ọma, nata niile nchoputa si pilot na hazie arịrịọ.

Ọ dị mkpa ịghọta na ihe niile na-achịkwa ụgbọ elu bụ ngwa na-enweghị obodo ma nwee ike ịgbatị ya n'ihu n'enweghị nsogbu. A na-echekwa data niile na wdgd n'ụdị nkọwa nke akụrụngwa Kubernetes.

Ọzọkwa, Istio (ka na-anwale) nwere ike ịgba ọsọ n'èzí ụyọkọ ahụ yana ike ikiri na ịchọta ọrụ n'etiti ọtụtụ ụyọkọ Kubernetes. Ị nwere ike ịgụkwu gbasara nke a ebe a.

Maka nrụnye ọtụtụ ụyọkọ, mara oke ndị a:

  1. Pod CIDR na Ọrụ CIDR ga-abụrịrị ihe pụrụ iche n'ofe ụyọkọ niile na ha agaghị ejikọta ya.
  2. Pọọdụ CIDR niile ga-enwerịrị ike ịnweta site na CIDR Pods ọ bụla n'etiti ụyọkọ.
  3. Sava Kubernetes API niile ga-enwerịrị ike ịnweta ibe ha.

Nke a bụ ozi mbụ ga-enyere gị aka ibido na Istio. Agbanyeghị, a ka nwere ọtụtụ ọnyà. Dịka ọmụmaatụ, njirimara nke ụzọ okporo ụzọ mpụga (n'èzí ụyọkọ), ịbịaru nso iji debugging sidecars, profaịlụ, ịmepụta igwekota na ide ihe ndabere igwekota omenala, ịmepụta usoro nchọta na ọrụ ya site na iji onye ozi.
Anyị ga-atụle ihe ndị a niile n’akwụkwọ ndị na-esonụ. Jụọ ajụjụ gị, m ga-agbalị ikpuchi ha.

isi: www.habr.com

Tinye a comment