Giunsa pagpadagan ang Istio gamit ang Kubernetes sa produksiyon. Bahin 1

Unsa Istio? Kini ang gitawag nga Service mesh, usa ka teknolohiya nga nagdugang usa ka layer sa abstraction sa network. Among gi-intercept ang tanan o bahin sa trapiko sa cluster ug naghimo sa usa ka piho nga hugpong sa mga operasyon uban niini. Hain nga usa? Pananglitan, naghimo kami og maalamon nga pag-ruta, o nag-implementar og circuit breaker approach, mahimo natong organisahon ang "canary deployment", partially switching traffic ngadto sa bag-ong bersyon sa serbisyo, o mahimo natong limitahan ang external interactions ug kontrolon ang tanang biyahe gikan sa cluster ngadto sa external. network. Posible nga magbutang mga lagda sa palisiya aron makontrol ang mga pagbiyahe tali sa lainlaing mga microservice. Sa katapusan, makuha namon ang tibuuk nga mapa sa interaksyon sa network ug himuon nga hingpit nga transparent sa mga aplikasyon ang hiniusa nga koleksyon sa sukatan.

Mahimo nimo mabasa ang bahin sa mekanismo sa pagtrabaho sa opisyal nga dokumentasyon. Ang Istio usa ka tinuod nga gamhanan nga himan nga makasulbad sa daghang mga buluhaton ug mga problema. Niini nga artikulo gusto nakong tubagon ang mga nag-unang mga pangutana nga kasagarang motungha sa pagsugod sa pagtrabaho kauban si Istio. Makatabang kini kanimo sa pag-atubang niini nga mas paspas.

Giunsa pagpadagan ang Istio gamit ang Kubernetes sa produksiyon. Bahin 1

Kon sa unsang paagi kini nga mga buhat

Ang Istio naglangkob sa duha ka nag-unang mga sona - control plane ug data plane. Ang control plane naglangkob sa mga nag-unang sangkap nga nagsiguro sa husto nga operasyon sa uban. Sa kasamtangan nga bersyon (1.0), ang control plane adunay tulo ka nag-unang sangkap: Pilot, Mixer, Citadel. Dili namo tagdon ang Citadel; gikinahanglan ang pagmugna og mga sertipiko aron maseguro ang operasyon sa mutual TLS tali sa mga serbisyo. Atong tan-awon pag-ayo ang disenyo ug katuyoan sa Pilot ug Mixer.

Giunsa pagpadagan ang Istio gamit ang Kubernetes sa produksiyon. Bahin 1

Ang piloto mao ang nag-unang sangkap sa pagkontrol nga nag-apod-apod sa tanan nga kasayuran bahin sa kung unsa ang naa sa cluster - mga serbisyo, ilang mga endpoint ug mga lagda sa ruta (pananglitan, mga lagda alang sa pag-deploy sa Canary o mga lagda sa circuit breaker).

Ang mixer usa ka opsyonal nga control plane component nga naghatag ug abilidad sa pagkolekta sa metrics, logs ug bisan unsang impormasyon mahitungod sa network interaction. Gibantayan usab niya ang pagsunod sa mga lagda sa Patakaran ug pagsunod sa mga limitasyon sa rate.

Ang data plane gipatuman gamit ang sidecar proxy nga mga sudlanan. Ang default gamhanan envoy proxy server. Mahimo kini mapulihan sa lain nga pagpatuman, pananglitan nginx (nginmesh).

Aron ang Istio molihok nga hingpit nga transparent alang sa mga aplikasyon, adunay usa ka awtomatikong sistema sa pag-injection. Ang pinakabag-o nga pagpatuman angay alang sa Kubernetes nga bersyon 1.9+ (mutational admission webhook). Para sa Kubernetes nga bersyon 1.7, 1.8 posible nga gamiton ang Initializer.

Ang mga sudlanan sa sidecar nagkonektar sa Pilot gamit ang GRPC protocol, nga nagtugot kanimo sa pag-optimize sa modelo alang sa pagduso sa mga pagbag-o nga nahitabo sa cluster. Ang GRPC nagsugod nga gigamit sa Envoy sukad sa bersyon 1.6, sa Istio kini gigamit sukad sa bersyon 0.8 ug usa ka pilot-agent - usa ka golang wrapper sa envoy nga nag-configure sa mga parameter sa paglansad.

Ang Pilot ug Mixer hingpit nga walay estado nga mga sangkap, ang tanan nga estado gitipigan sa panumduman. Ang configuration alang kanila gitakda sa porma sa Kubernetes Custom Resources, nga gitipigan sa etcd.
Ang Istio-agent nakadawat sa Pilot address ug nagbukas sa GRPC stream niini.

Sama sa akong giingon, gipatuman ni Istio ang tanan nga pagpaandar nga hingpit nga transparent sa mga aplikasyon. Atong hisgotan kon sa unsang paagi. Ang algorithm sama niini:

  1. Mag-deploy kami og bag-ong bersyon sa serbisyo.
  2. Depende sa pamaagi sa pag-inject sa sidecar nga sudlanan, ang istio-init nga sudlanan ug istio-agent nga sudlanan (envoy) idugang sa yugto sa pag-apply sa configuration, o mahimo na sila nga mano-mano nga isulod sa Pod nga paghulagway sa Kubernetes nga entidad.
  3. Ang istio-init nga sudlanan usa ka script nga magamit ang mga lagda sa iptables sa pod. Adunay duha ka kapilian sa pag-set up sa traffic wrapping sa istio-agent nga sudlanan: gamita ang iptables redirect rules, o TPROXY. Sa panahon sa pagsulat, ang default nga pamaagi mao ang mga lagda sa pag-redirect. Gitugotan ka sa Istio-init nga ma-configure kung unsang klase sa trapiko ang kinahanglan ma-intercept ug ipadala sa istio-agent. Pananglitan, aron mabalda ang tanan nga umaabot ug tanan nga paggawas nga trapiko, kinahanglan nimo nga itakda ang mga parameter -i и -b ngadto sa kahulogan *. Mahimo nimong itakda ang piho nga mga pantalan aron ma-intercept. Aron dili ma-intercept ang usa ka piho nga subnet, mahimo nimong ipiho kini gamit ang bandila -x.
  4. Human mapatuman ang init nga mga sudlanan, ang mga nag-unang gilusad, lakip ang pilot-agent (envoy). Nagkonektar kini sa na-deploy na nga Pilot pinaagi sa GRPC ug nakadawat og impormasyon bahin sa tanang kasamtangang serbisyo ug mga polisiya sa pagruta sa cluster. Sumala sa datos nga nadawat, iyang gi-configure ang mga cluster ug gi-assign kini direkta sa mga endpoint sa among mga aplikasyon sa Kubernetes cluster. Kinahanglan usab nga timan-an ang usa ka hinungdanon nga punto: ang envoy dinamikong nag-configure sa mga tigpaminaw (IP, mga pares sa pantalan) nga nagsugod kini sa pagpaminaw. Busa, kung ang mga hangyo mosulod sa pod ug ma-redirect gamit ang pag-redirect sa mga lagda sa iptables ngadto sa sidecar, ang envoy mahimo nang malampuson nga maproseso kini nga mga koneksyon ug masabtan kung diin ang trapiko kinahanglan nga i-proxy sa sunod. Usab niini nga yugto, ang impormasyon gipadala ngadto sa Mixer, nga atong tan-awon sa ulahi, ug ang pagsubay sa mga span gipadala.

Ingon usa ka sangputanan, nakakuha kami usa ka tibuuk nga network sa mga envoy proxy server, nga mahimo namon nga ma-configure gikan sa usa ka punto (Pilot). Ang tanan nga inbound ug outbound nga mga hangyo gipaagi sa envoy. Dugang pa, ang trapiko sa TCP ra ang na-intercept. Kini nagpasabot nga ang Kubernetes service IP nasulbad gamit ang kube-dns sa UDP nga walay pagbag-o. Pagkahuman, pagkahuman sa resolusyon, ang nanggawas nga hangyo gi-intercept ug giproseso sa envoy, nga nagdesisyon kung asa nga punto ang hangyo ipadala (o dili ipadala, kung adunay mga palisiya sa pag-access o ang algorithm sa circuit breaker na-trigger).

Gihan-ay na namo ang Pilot, karon kinahanglan namong masabtan kung giunsa ang paglihok sa Mixer ug nganong gikinahanglan kini. Mahimo nimong basahon ang opisyal nga dokumentasyon niini dinhi.

Ang mixer sa kasamtangan nga porma naglangkob sa duha ka mga sangkap: istio-telemetry, istio-policy (sa wala pa ang bersyon 0.8 kini usa ka sangkap nga istio-mixer). Ang duha kanila mga mixer, nga ang matag usa responsable alang sa kaugalingon nga buluhaton. Ang Istio telemetry nakadawat og impormasyon pinaagi sa GRPC gikan sa sidecar I-report ang mga sudlanan bahin sa kung kinsa ang moadto kung asa ug unsa ang mga parameter. Gidawat sa Istio-policy ang mga hangyo sa Pagsusi aron masusi kung natuman ba ang mga lagda sa Polisiya. Ang mga pagsusi sa palisiya, siyempre, wala gihimo alang sa matag hangyo, apan gi-cache sa kliyente (sa sidecar) sa usa ka piho nga oras. Ang mga pagsusi sa taho gipadala pinaagi sa mga hangyo sa batch. Atong tan-awon kung giunsa kini i-configure ug eksakto kung unsang mga parameter ang kinahanglan ipadala sa ulahi.

Ang mixer gituyo nga mahimong usa ka labi ka magamit nga sangkap nga nagsiguro sa hapsay nga operasyon sa pagkolekta ug pagproseso sa data sa telemetry. Ang sistema matapos ingon usa ka multi-level buffer. Sa sinugdan, ang data gibuffer sa sidecar nga bahin sa mga sudlanan, dayon sa mixer nga bahin ug dayon gipadala ngadto sa gitawag nga mixer backends. Ingon usa ka sangputanan, kung adunay bisan unsang mga sangkap sa sistema nga mapakyas, ang buffer motubo ug ma-flush pagkahuman sa pag-ayo sa sistema. Ang mga backend sa mixer mao ang mga endpoint alang sa pagpadala sa data sa telemetry: statsd, newrelic, ug uban pa. Mahimo nimong isulat ang imong kaugalingon nga backend, kini yano ra, ug among tan-awon kung giunsa kini buhaton.

Giunsa pagpadagan ang Istio gamit ang Kubernetes sa produksiyon. Bahin 1

Sa pag-summarize, ang laraw alang sa pagtrabaho sa istio-telemetry mao ang mosunod.

  1. Ang Serbisyo 1 nagpadala ug hangyo sa serbisyo 2.
  2. Kung mobiya sa serbisyo 1, ang hangyo giputos sa kaugalingon nga sidecar.
  3. Sidecar envoy nagmonitor kung giunsa ang hangyo moadto sa serbisyo 2 ug giandam ang kinahanglan nga kasayuran.
  4. Dayon ipadala kini sa istio-telemetry gamit ang Report request.
  5. Ang Istio-telemetry nagtino kung kini nga Report kinahanglan ipadala sa mga backend, kung asa ug unsa nga datos ang kinahanglan ipadala.
  6. Ang Istio-telemetry nagpadala sa datos sa Report sa backend kung gikinahanglan.

Karon atong tan-awon kon sa unsang paagi sa pag-deploy Istio sa sistema, nga naglangkob lamang sa mga nag-unang mga sangkap (Pilot ug sidecar envoy).

Una, atong tan-awon ang main configuration (mesh) nga gibasa sa 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

Atong ibutang ang tanang main control component sa namespace istio-system sa Kubernetes.

Sa labing gamay, kinahanglan ra naton nga i-deploy ang Pilot. Alang niini atong gamiton uban niini nga configuration.

Ug mano-mano namong i-configure ang injecting sidecar sa sudlanan.

Init nga sudlanan:

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

Ug 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

Aron malampuson nga magsugod ang tanan, kinahanglan nimo nga maghimo usa ka ServiceAccount, ClusterRole, ClusterRoleBinding, CRD para sa Pilot, ang mga paghulagway nga makit-an. dinhi.

Ingon usa ka sangputanan, ang serbisyo diin kami nag-inject sa usa ka sidecar nga adunay envoy kinahanglan nga malampuson nga maglansad, makadawat sa tanan nga nadiskobrehan gikan sa piloto ug mga hangyo sa proseso.

Importante nga masabtan nga ang tanan nga control plane component kay stateless nga mga aplikasyon ug mahimong horizontally scaled nga walay problema. Ang tanan nga datos gitipigan sa etcd sa porma sa naandan nga paghubit sa mga kapanguhaan sa Kubernetes.

Ang Istio usab (eksperimento pa) adunay katakus sa pagdagan sa gawas sa usa ka cluster ug ang abilidad sa pagtan-aw ug pagpaambit sa pagdiskubre sa serbisyo tali sa daghang mga cluster sa Kubernetes. Makabasa ka ug dugang bahin niini dinhi.

Para sa multi-cluster installation, tagda ang mosunod nga mga limitasyon:

  1. Ang Pod CIDR ug Service CIDR kinahanglang talagsaon sa tanang cluster ug kinahanglang dili magsapaw.
  2. Ang tanang Pod CIDRs kinahanglang maabot gikan sa bisan unsang Pod CIDRs tali sa mga cluster.
  3. Ang tanan nga mga server sa Kubernetes API kinahanglan nga magamit sa usag usa.

Kini usa ka sukaranan nga pasiuna aron matabangan ka nga makasugod sa Istio. Bisan pa, adunay daghang mga lit-ag. Pananglitan, ang mga bahin sa pag-ruta sa gawas nga trapiko (sa gawas sa cluster), mga pamaagi sa pag-debug sa mga sidecar, pag-profile, pag-set up sa usa ka mixer ug pagsulat sa usa ka custom nga mixer backend, pag-set up sa mekanismo sa pagsubay ug sa operasyon niini gamit ang envoy.
Binagbinagon naton ini tanan sa masunod nga mga publikasyon. Pangutan-a ang imong mga pangutana, sulayan nako nga klarohon kini.

Source: www.habr.com

Idugang sa usa ka comment