E faʻafefea ona taʻavale Istio faʻaaoga Kubernetes i le gaosiga. Vaega 1

ā Istio? O le mea lea e taʻua o le 'auʻaunaga mesh, o se tekinolosi e faʻaopoopoina ai se vaega o le faʻaogaina i luga o le upega tafailagi. Matou te faʻalavelave uma poʻo se vaega o fefaʻatauaiga i totonu o le fuifui ma faia se seti o gaioiga faʻatasi ma ia. O fea tonu? Mo se faʻataʻitaʻiga, matou te faia faʻataʻitaʻiga atamai, pe matou te faʻatinoina le auala vaʻavaʻavaʻa, e mafai ona matou faʻatulagaina le "faʻapipiʻiina o canary", o se vaega o le fesuiaʻiina o feoaiga i se lomiga fou o le auaunaga, pe mafai foi ona faʻatapulaaina fegalegaleaiga i fafo ma pulea malaga uma mai le fuifui i le. feso'otaiga i fafo. E mafai ona fa'atulaga tulafono fa'avae e pulea ai malaga i le va o microservices eseese. Ma le mea mulimuli, e mafai ona matou maua le faʻafanua fesoʻotaʻiga atoa o fesoʻotaʻiga ma faʻamaonia atoatoa le aoina o fua faʻatatau i talosaga.

E mafai ona e faitau e uiga i le faiga o galuega i pepa aloaia. Istio o se meafaigaluega malosi tele e mafai ai e oe ona foia le tele o galuega ma faʻafitauli. I lenei tusiga, ou te fia tali fesili autu e masani ona tulaʻi mai pe a amata ile Istio. O le a fesoasoani lea ia te oe e taulimaina vave.

E faʻafefea ona taʻavale Istio faʻaaoga Kubernetes i le gaosiga. Vaega 1

Pe faapefea ona galue

Istio e aofia ai vaega autu e lua - o le vaalele pulea ma le vaalele faʻamatalaga. O le vaalele pulea o loʻo i ai vaega autu e faʻamautinoa ai le faʻaogaina saʻo o le isi vaega. I le lomiga o loʻo i ai nei (1.0) o le vaʻalele faʻatonutonu e tolu vaega autu: Pilot, Mixer, Citadel. Matou te le mafaufau i le Citadel, e manaʻomia le faʻatupuina o tusi faamaonia e faʻamautinoa ai le TLS i le va o auaunaga. Se'i o tatou va'ava'ai toto'a ile masini ma le fa'amoemoe ole Pilot and Mixer.

E faʻafefea ona taʻavale Istio faʻaaoga Kubernetes i le gaosiga. Vaega 1

O le pailate o le vaega autu e pulea e tufatufaina atu faʻamatalaga uma e uiga i mea o loʻo ia i tatou i totonu o le fuifui - auaunaga, o latou faʻaiʻuga ma tulafono taʻavale (mo se faʻataʻitaʻiga, tulafono mo le faʻapipiʻiina o Canary poʻo tulafono vaʻavaʻa).

Mixer o se vaega fa'atonutonu va'alele e tu'uina atu ai le agava'a e aoina metrics, ogalaau, ma so'o se fa'amatalaga e uiga i feso'ota'iga feso'ota'iga. Na te mata'itūina fo'i le tausisia o tulafono fa'avae ma le tausisia o tapulaa tau.

O le va'alele fa'amaumauga o lo'o fa'atinoina i le fa'aogaina o koneteina sui o ta'avale. E fa'aaogaina le malosi e ala i le faaletonu. sui sui. E mafai ona suia i se isi faʻatinoga, pei o le nginx (nginmesh).

Ina ia mafai e Istio ona galue manino atoatoa i talosaga, o loʻo i ai se faʻaogaina otometi. Ole fa'atinoga lata mai e talafeagai mo Kubernetes 1.9+ versions (mutational admission webhook). Mo Kubernetes versions 1.7, 1.8 e mafai ona faʻaaoga le Initializer.

O pusa Sidecar e fesoʻotaʻi ma Pilot e faʻaaoga ai le GRPC protocol, lea e mafai ai ona e faʻaogaina le faʻataʻitaʻiga faʻataʻitaʻiga mo suiga o loʻo tutupu i totonu o le fuifui. O le GRPC na faʻaaogaina i le Envoy talu mai le version 1.6, i Istio na faʻaaogaina talu mai le version 0.8 ma o se pailate-agent - o se afifi golang i luga o le avefeʻau e faʻatulagaina filifiliga faʻalauiloa.

Pilot ma Mixer o ni vaega e leai ni setete, o setete uma e teuina i le manatua. O le faʻatulagaga mo i latou o loʻo faʻatulagaina i le tulaga o Kubernetes Custom Resources, o loʻo teuina i etcd.
E maua e le Istio-agent le tuatusi o le pailate ma tatala ai se vaitafe GRPC i ai.

E pei ona ou fai atu, o loʻo faʻatinoina e Istio galuega uma e manino atoatoa i talosaga. Sei o tatou vaai pe faapefea. Ole algorithm ole:

  1. Fa'atuina se fa'afouga fou o le tautua.
  2. Faʻalagolago i le auala e tui ai le atigipusa, o le istio-init container ma le istio-agent container (avefeʻau) e faʻaopoopoina i le tulaga o le faʻaogaina o le faʻatulagaga, pe mafai foi ona tuʻuina ma le lima i le faʻamatalaga o le Kubernetes Pod entity.
  3. O le pusa istio-init o se tusitusiga e faʻaoga tulafono iptables i le pod. E lua filifiliga mo le faʻatulagaina o fefaʻatauaiga e afifi i totonu o se pusa istio-agent: faʻaaoga tulafono faʻasalalau iptables, poʻo TPROXY. I le taimi o le tusitusi, o le auala le faʻaogaina o le toe faʻatonutonu tulafono. I le istio-init, e mafai ona fetuutuunai po o fea felauaiga e tatau ona taofia ma auina atu i le istio-agent. Mo se faʻataʻitaʻiga, ina ia mafai ona faʻalavelave uma feʻaveaʻi o loʻo sau ma fafo, e tatau ona e setiina faʻamau -i и -b i le uiga *. E mafai ona e fa'amaoti ports fa'apitoa e fa'alavelave. Ina ia aua neʻi faʻalavelaveina se subnet patino, e mafai ona e faʻamaonia i le faʻaaogaina o le fuʻa -x.
  4. A maeʻa ona faʻataunuʻuina pusa init, e faʻalauiloa mea autu, e aofia ai le pailate-agent (avefeʻau). E fa'afeso'ota'i i le Pilot ua uma ona fa'atulagaina e ala i le GRPC ma maua fa'amatalaga e uiga i auaunaga uma o lo'o i ai ma faiga fa'aalaala i totonu o le fuifui. E tusa ai ma faʻamatalaga na maua, na te faʻapipiʻiina le fuifui ma tuʻu saʻo i latou i pito oa tatou talosaga i le Kubernetes cluster. E tatau foi ona matauina se mea taua: avefeau dynamically configures faalogologo (IP, port pairs) e amata ona faalogo i ai. O le mea lea, pe a o'o mai talosaga i totonu o le pod, ua toe fa'afeiloa'i i le fa'aogaina o tulafono redirect iptables i totonu o le ta'avale, e mafai e le avefe'au ona fa'agasolo lelei nei feso'ota'iga ma malamalama i le mea e toe sui ai le felauaiga. I le taimi foʻi lea, o loʻo tuʻuina atu faʻamatalaga i le Mixer, lea o le a tatou vaʻavaʻai i ai i se taimi mulimuli ane, ma o le suʻeina o vaʻa e auina atu.

O se taunuuga, matou te maua se fesoʻotaʻiga atoa o sui sui sui e mafai ona matou faʻatulagaina mai le tasi itu (Pilot). O talosaga uma i totonu ma fafo e ala atu i avefe'au. E le gata i lea, na'o le TCP felauaiga e fa'alavelaveina. O lona uiga o le Kubernetes service IP o loʻo foia e ala i le kube-dns i luga ole UDP e aunoa ma se suiga. Ma, a maeʻa le faʻaiuga, o le talosaga i fafo e faʻalavelaveina ma faʻatautaia e le avefeʻau, lea ua uma ona filifili po o fea le pito e tatau ona lafo i ai le talosaga (pe le auina atu, i le tulaga o faiga faʻavae poʻo le vaeluaga o le algorithm).

Na matou iloa le Pilot, o lea e tatau ona matou malamalama i le auala e galue ai Mixer ma pe aisea e manaʻomia ai. E mafai ona e faitau i pepa aloaia mo lea mea iinei.

Mixer i lona tulaga o loʻo i ai nei e aofia ai vaega e lua: istio-telemetry, istio-policy (aʻo leʻi oʻo i le version 0.8 o se tasi vaega o le istio-mixer). O i latou uma e lua o mea faʻafefiloi, o ia mea taʻitasi e nafa ma lana lava galuega. E maua e le Istio telemetry fa'amatalaga po'o ai e alu i fea ma po'o a ni tapula'a mai pusa ta'avale Ripoti e ala i le GRPC. E talia e le Istio-policy talosaga Siaki e fa'amaonia ai ua faamalieina tulafono Fa'avae. O su'esu'ega fa'apolokiki, o le mea moni, e le fa'atinoina mo talosaga uma, ae o lo'o teuina i luga o le kalani (i totonu o le ta'avale) mo se taimi patino. O siaki lipoti e auina atu e pei o talosaga fa'ato'a. Se'i o tatou va'ai pe fa'afefea ona fa'atulaga ma po'o a fa'amaufa'ailoga e tatau ona lafo i se taimi mulimuli ane.

O le Mixer e tatau ona avea o se vaega sili ona avanoa e faʻamautinoa ai le le faʻalavelaveina o galuega i luga o le faʻapotopotoga ma le faʻaogaina o faʻamatalaga telemetry. O le faiga e maua mai o se taunuuga e pei o se multi-level buffer. I le taimi muamua, o faʻamatalaga e faʻapipiʻi i le itu o le taʻavale o koneteina, ona sosoo ai lea ma le itu faʻafefiloi, ona lafo atu lea i le mea e taʻua o le mixer backends. O le i'uga, afai e fa'aletonu nisi o vaega o le system, e tupu le pa'u ma fa'amulumulu pe a uma ona toe fa'afo'isia le faiga. Fa'afefiloi pito i tua o fa'ai'uga ia mo le lafoina o fa'amatalaga telemetry: statsd, newrelic, ma isi. E mafai ona e tusia lau lava pito i tua, e fai si faigofie, ma o le a matou vaʻai pe faʻapefea ona fai.

E faʻafefea ona taʻavale Istio faʻaaoga Kubernetes i le gaosiga. Vaega 1

I se aotelega, o le polokalame mo le galue i le istio-telemetry e faʻapea.

  1. E auina atu e le Auaunaga 1 se talosaga i le auaunaga 2.
  2. Pe a tuua le auaunaga 1, o le talosaga e afifi i lana lava taʻavale.
  3. Sidecar avefe'au e mata'ituina pe fa'afefea ona alu le talosaga ile tautua 2 ma saunia fa'amatalaga talafeagai.
  4. Ona auina atu lea i le istio-telemetry e faʻaaoga ai se Lipoti talosaga.
  5. O le Istio-telemetry e fuafua pe tatau ona auina atu lenei Lipoti i pito i tua, o fea ma o a faʻamatalaga e tatau ona lafo.
  6. E auina atu e le Istio-telemetry faʻamatalaga Lipoti i le pito i tua pe a manaʻomia.

Sei o tatou vaʻai pe faʻapefea ona faʻapipiʻi Istio i totonu o le polokalama, e aofia ai naʻo vaega autu (Pilot ma le avefeʻau pito).

Muamua, seʻi o tatou vaʻavaʻai i le faʻatulagaga autu (mesh) lea e faitauina e 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

O vaega autu uma e pulea (vaalele fa'atonutonu) o le a tu'u i le namespace istio-system i Kubernetes.

I se tulaga maualalo, matou te manaʻomia le faʻapipiʻiina o Pilot. Mo lenei mea o le a matou faʻaaogaina se faatulagaga faapena.

Ma o le a matou faʻapipiʻiina ma le lima le taʻavale tui o le pusa.

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

Ma ta'avale ta'avale:

       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

Ina ia mafai ona amata manuia mea uma, e tatau ona e fatuina se ServiceAccount, ClusterRole, ClusterRoleBinding, CRD mo Pilot, o faʻamatalaga e mafai ona maua. iinei.

O se taunuuga, o le auaunaga lea tatou te tui ai le taʻavale faʻatasi ma le avefeʻau e tatau ona amata manuia, maua uma mea na maua mai le pailate ma faʻatonuina talosaga.

E taua le malamalama o vaega uma o le vaalele e leai ni fa'aoga ma e mafai ona fa'alava fa'alava e aunoa ma ni fa'afitauli. O faʻamaumauga uma o loʻo teuina i totonu etcd i le tulaga o faʻamatalaga masani o punaoa Kubernetes.

E le gata i lea, Istio (fa'ata'ita'i pea) o lo'o i ai le malosi e tamo'e ai i fafo o le fuifui ma le malosi e matamata ai ma fumble le mauaina o auaunaga i le va o le tele o fuifui Kubernetes. E mafai ona e faitau atili e uiga i lenei mea iinei.

Mo se fa'apipi'i fa'apipi'i tele, ia nofouta i tapula'a nei:

  1. O le Pod CIDR ma le Service CIDR e tatau ona tulaga ese i fuifui uma ma e le tatau ona so'a.
  2. O CIDR Pods uma e tatau ona maua mai so'o se CIDR Pods i le va o fuifui.
  3. O 'au'aunaga uma a Kubernetes API e tatau ona avanoa le tasi i le isi.

O le faʻamatalaga muamua lea e fesoasoani ia te oe e amata ai Istio. Ae ui i lea, o loʻo i ai pea le tele o faʻalavelave. Mo se faʻataʻitaʻiga, faʻataʻitaʻiga o le taʻavaleina o fefaʻatauaiga i fafo (i fafo atu o le fuifui), auala e faʻapipiʻi ai taʻavale, faʻamatalaga, faʻapipiʻi se mea faʻafefiloi ma le tusiaina o se faʻapipiʻi masani i tua, faʻatutuina se masini suʻesuʻe ma lona faʻaogaina e faʻaaoga ai le avefeʻau.
O nei mea uma o le a tatou iloiloina i lomiga o loo mulimuli mai. Fai mai au fesili, o le a ou taumafai e tali.

puna: www.habr.com

Faaopoopo i ai se faamatalaga