Ki jan yo kouri Istio lè l sèvi avèk Kubernetes nan pwodiksyon. Pati 1

Ki sa ki Istio? Sa a se sa yo rele may sèvis la, yon teknoloji ki ajoute yon kouch abstraksyon sou rezo a. Nou entèsepte tout oswa yon pati nan trafik la nan gwoup la epi fè yon seri operasyon ak li. Kiyes nan yo? Pou egzanp, nou fè routage entelijan, oswa nou aplike apwòch disjoncteurs la, nou ka òganize "deplwaman Canary", pasyèlman chanje trafik nan yon nouvo vèsyon nan sèvis la, oswa nou ka limite entèraksyon ekstèn ak kontwole tout vwayaj soti nan gwoup la nan la. rezo ekstèn. Li posib pou mete règ politik pou kontwole vwayaj ant diferan mikwosèvis. Finalman, nou ka jwenn tout kat jeyografik rezo entèraksyon an epi fè koleksyon inifye metrik konplètman transparan pou aplikasyon yo.

Ou ka li sou mekanis nan travay nan dokiman ofisyèl yo. Istio se yon zouti vrèman pwisan ki pèmèt ou rezoud anpil travay ak pwoblèm. Nan atik sa a, mwen ta renmen reponn kesyon prensipal yo ki anjeneral parèt lè w kòmanse ak Istio. Sa a pral ede w fè fas ak li pi vit.

Ki jan yo kouri Istio lè l sèvi avèk Kubernetes nan pwodiksyon. Pati 1

Prensip de operasyon

Istio konsiste de de zòn prensipal - avyon an kontwòl ak avyon an done. Avyon kontwòl la gen eleman prensipal yo ki asire operasyon ki kòrèk la nan rès la. Nan vèsyon aktyèl la (1.0) avyon kontwòl la gen twa eleman prensipal: Pilòt, Mixer, Sitadèl. Nou p ap konsidere Sitadèl, li nesesè pou jenere sètifika pou asire TLS mityèl ant sèvis yo. Ann pran yon gade pi pre nan aparèy la ak objektif Pilot ak Mixer.

Ki jan yo kouri Istio lè l sèvi avèk Kubernetes nan pwodiksyon. Pati 1

Pilòt se eleman prensipal kontwòl ki distribye tout enfòmasyon sou sa nou genyen nan gwoup la - sèvis, pwen final yo ak règ routage (pa egzanp, règ pou deplwaman Canary oswa règ disjoncteurs).

Mixer se yon eleman avyon kontwòl opsyonèl ki bay kapasite pou kolekte mezi, mòso bwa, ak nenpòt enfòmasyon sou entèraksyon rezo a. Li kontwole tou konfòmite ak règleman Règleman yo ak konfòmite ak limit pousantaj.

Avyon done a aplike lè l sèvi avèk veso proxy sidecar. Pwisan yo itilize pa default. anvwaye prokurasyon. Li ka ranplase pa yon lòt aplikasyon, tankou nginx (nginmesh).

Nan lòd pou Istio travay konplètman transparan nan aplikasyon yo, gen yon sistèm piki otomatik. Dènye aplikasyon an apwopriye pou Kubernetes 1.9+ vèsyon (webhook admisyon mutational). Pou vèsyon Kubernetes 1.7, 1.8 li posib pou itilize Initializer la.

Kontenè Sidecar yo konekte ak Pilot lè l sèvi avèk pwotokòl GRPC, ki pèmèt ou optimize modèl pouse a pou chanjman ki fèt nan gwoup la. GRPC yo te itilize nan Envoy depi vèsyon 1.6, nan Istio li te itilize depi vèsyon 0.8 epi li se yon pilòt-ajan - yon vlope golang sou Envoy ki configured opsyon lansman.

Pilòt ak Mixer yo se eleman konplètman apatrid, tout eta yo kenbe nan memwa. Konfigirasyon an pou yo mete sou fòm Kubernetes Custom Resources, ki estoke nan elatriye.
Istio-agent jwenn adrès Pilòt la epi ouvè yon kouran GRPC pou li.

Kòm mwen te di, Istio aplike tout fonksyonalite konplètman transparan nan aplikasyon yo. Ann wè ki jan. Algorithm la se sa a:

  1. Deplwaye yon nouvo vèsyon sèvis la.
  2. Tou depan de apwòch la enjekte veso sidecar, veso istio-init la ak veso istio-ajan (envoy) yo ajoute nan etap nan aplike konfigirasyon an, oswa yo ka deja mete manyèlman nan deskripsyon an nan antite Kubernetes Pod la.
  3. Veso istio-init la se yon script ki aplike règ iptables yo nan gous la. Gen de opsyon pou konfigirasyon trafik yo dwe vlope nan yon veso ajan istio: itilize règ redireksyon iptables, oswa TPROXY. Nan moman sa a nan ekri a, apwòch la default se ak règ redireksyon. Nan istio-init, li posib pou konfigirasyon ki trafik yo ta dwe entèsepte epi voye bay istio-agent. Pou egzanp, yo nan lòd yo entèsepte tout fèk ap rantre ak tout trafik sortan, ou bezwen mete paramèt yo -i и -b nan sans *. Ou ka presize pò espesifik pou entèsepte. Pou pa entèsepte yon subnet espesifik, ou ka presize li lè l sèvi avèk drapo a -x.
  4. Apre kontenè init yo egzekite, prensipal yo lanse, ki gen ladan pilòt-ajan (anvwaye). Li konekte ak Pilòt ki deja deplwaye atravè GRPC epi li resevwa enfòmasyon sou tout sèvis ki egziste deja ak règleman routage nan gwoup la. Dapre done yo resevwa, li konfigirasyon grap yo epi asiyen yo dirèkteman nan pwen final aplikasyon nou yo nan gwoup Kubernetes la. Li nesesè tou sonje yon pwen enpòtan: anvwaye konfigirasyon oditè dinamikman (IP, pè pò) ke li kòmanse koute. Se poutèt sa, lè demann antre nan gous la, yo redireksyon lè l sèvi avèk règ yo iptables redireksyon nan sidecar la, Envoy ka deja trete koneksyon sa yo ak konprann ki kote plis proxy trafik la. Epitou nan etap sa a, yo voye enfòmasyon nan Mixer la, ke nou pral gade pita, epi yo voye trase span.

Kòm yon rezilta, nou jwenn yon rezo antye nan serveurs prokurasyon anvwaye ke nou ka konfigirasyon soti nan yon pwen (Pilòt). Tout demann entrant ak sortant ale nan anvwaye. Anplis, se sèlman TCP trafik entèsepte. Sa vle di ke IP sèvis Kubernetes rezoud lè l sèvi avèk kube-dns sou UDP san yo pa chanje. Lè sa a, apre rezolisyon an, demann sòtan an entèsepte ak trete pa anvwaye, ki deja deside nan ki pwen final demann lan ta dwe voye (oswa pa voye, nan ka a nan règleman aksè oswa disjoncteur nan algorithm la).

Nou kalkile Pilot, kounye a nou bezwen konprann ki jan Mixer travay ak poukisa li nesesè. Ou ka li dokiman ofisyèl la pou li isit la.

Mixer nan fòm li ye kounye a konsiste de de eleman: istio-telemetry, istio-politik (anvan vèsyon 0.8 li te yon sèl eleman istio-mixer). Tou de nan yo se mixer, chak nan yo ki responsab pou travay pwòp li yo. Istio telemetry resevwa enfòmasyon sou ki moun ki ale ki kote ak ki paramèt ki soti nan veso rapò sidecar atravè GRPC. Istio-policy aksepte demann Tcheke pou verifye ke règleman Règleman yo satisfè. Chèk Poilicy yo, nan kou, pa te pote soti pou chak demann, men yo kachèt sou kliyan an (nan sidecar la) pou yon sèten tan. Chèk rapò yo voye kòm demann pakèt. Ann wè ki jan yo konfigirasyon ak ki paramèt yo ta dwe voye yon ti kras pita.

Mixer a sipoze yon eleman trè disponib ki asire travay san enteripsyon sou asanble a ak pwosesis done telemetrik. Se sistèm nan jwenn kòm yon rezilta kòm yon tanpon milti-nivo. Okòmansman, done yo tampon sou bò sidecar nan resipyan, Lè sa a, sou bò mixer, ak Lè sa a, voye bay backends yo sa yo rele mixer. Kòm yon rezilta, si nenpòt nan konpozan sistèm yo echwe, tanpon an ap grandi epi li vide apre sistèm nan retabli. Backends mixer yo se pwen final pou voye done telemetrik: statsd, newrelic, elatriye. Ou ka ekri backend pwòp ou a, li se byen senp, epi nou pral wè ki jan fè li.

Ki jan yo kouri Istio lè l sèvi avèk Kubernetes nan pwodiksyon. Pati 1

Pou rezime, konplo a pou travay ak istio-telemetrie se jan sa a.

  1. Sèvis 1 voye yon demann nan sèvis 2.
  2. Lè w ap kite sèvis 1, demann lan vlope nan pwòp sidecar li.
  3. Sidecar anvwaye kontwole kijan demann lan ale nan sèvis 2 epi prepare enfòmasyon ki nesesè yo.
  4. Lè sa a, voye li bay istio-telemetry lè l sèvi avèk yon demann Rapò.
  5. Istio-telemetry detèmine si yo ta dwe voye Rapò sa a nan backend yo, nan ki ak ki done yo ta dwe voye.
  6. Istio-telemetry voye done Rapò nan backend la si sa nesesè.

Koulye a, kite a wè ki jan yo deplwaye Istio nan sistèm nan, ki gen ladan sèlman nan eleman prensipal yo (pilòt ak anvwaye sidecar).

Premyèman, ann gade konfigirasyon prensipal la (may) ke Pilòt li:

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

Tout eleman kontwòl prensipal yo (avyon kontwòl) yo pral lokalize nan namespace istio-system nan Kubernetes.

Omwen, nou sèlman bezwen deplwaye Pilot. Pou sa nou itilize yon konfigirasyon konsa.

Epi nou pral manyèlman configured sidecar a enjekte nan veso a.

Init veso:

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

Ak 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

Pou tout bagay kòmanse avèk siksè, ou bezwen kreye yon ServiceAccount, ClusterRole, ClusterRoleBinding, CRD pou Pilot, deskripsyon yo ka jwenn. isit la.

Kòm yon rezilta, sèvis nan kote nou enjekte sidecar ak anvwaye ta dwe kòmanse avèk siksè, resevwa tout dekouvèt nan men pilòt la ak demann pwosesis.

Li enpòtan pou w konprann ke tout konpozan avyon kontwòl yo se aplikasyon apatrid epi yo ka echèl orizontal san pwoblèm. Tout done yo estoke nan etcd nan fòm deskripsyon koutim resous Kubernetes yo.

Epitou, Istio (toujou eksperimantal) gen kapasite nan kouri deyò gwoup la ak kapasite nan gade ak dekouvèt sèvis fout ant plizyè grap Kubernetes. Ou ka li plis sou sa isit la.

Pou yon enstalasyon milti grap, ou dwe konnen limit sa yo:

  1. Pod CIDR ak Service CIDR dwe inik nan tout gwoup epi yo pa dwe sipèpoze.
  2. Tout CIDR Pods dwe aksesib nan nenpòt CIDR Pods ant gwoup yo.
  3. Tout sèvè API Kubernetes yo dwe aksesib youn ak lòt.

Sa a se premye enfòmasyon pou ede w kòmanse ak Istio. Sepandan, toujou gen anpil pyèj. Pou egzanp, karakteristik routage trafik ekstèn (deyò gwoup la), apwòch debogaj sidecars, profilage, mete kanpe yon mixer ak ekri yon backend mixer koutim, mete kanpe yon mekanis trase ak operasyon li yo lè l sèvi avèk anvwaye.
Tout sa nou pral konsidere nan piblikasyon sa yo. Poze kesyon ou yo, mwen pral eseye kouvri yo.

Sous: www.habr.com

Add nouvo kòmantè