Pehea e holo ai ʻo Istio me ka hoʻohana ʻana i nā Kubernetes i ka hana. Mahele 1

Heaha Istio? ʻO kēia ka mea i kapa ʻia ʻo Service mesh, kahi ʻenehana e hoʻohui i kahi papa o abstraction ma luna o ka pūnaewele. Hoʻopili mākou i nā mea āpau a i ʻole ʻāpana o ke kaʻa i loko o ka pūʻulu a hana i kekahi pūʻulu o nā hana me ia. ʻo ka mea hea? No ka laʻana, hana mākou i ka hoʻokele akamai, a i ʻole mākou e hoʻokō i ke ala kaapuni, hiki iā mākou ke hoʻonohonoho i ka "canary deployment", hoʻololi hapa i nā kaʻa i kahi mana hou o ka lawelawe, a i ʻole hiki iā mākou ke kaupalena i nā pilina o waho a mālama i nā huakaʻi āpau mai ka hui a i ka pūnaewele waho. Hiki ke hoʻonohonoho i nā lula kulekele e hoʻomalu i nā huakaʻi ma waena o nā microservices like ʻole. ʻO ka hope, hiki iā mākou ke loaʻa i ka palapala ʻāina pili pūnaewele holoʻokoʻa a hana i ka hōʻiliʻili hui ʻana o nā metric i akaka loa i nā noi.

Hiki iā ʻoe ke heluhelu e pili ana i ke ʻano o ka hana ma palapala kūhelu. He mea hana ikaika loa ʻo Istio e hiki ai iā ʻoe ke hoʻoponopono i nā hana a me nā pilikia. Ma kēia ʻatikala, makemake wau e pane i nā nīnau nui e kū mai i ka wā e hoʻomaka ai me Istio. E kōkua kēia iā ʻoe e hana wikiwiki.

Pehea e holo ai ʻo Istio me ka hoʻohana ʻana i nā Kubernetes i ka hana. Mahele 1

Pehea ia hana

Aia ʻo Istio i ʻelua mau wahi nui - ka mokulele hoʻokele a me ka mokulele data. Aia ka mokulele hoʻomalu i nā mea nui e hōʻoia i ka hana kūpono o ke koena. I ka mana o kēia manawa (1.0) ʻekolu mau mea nui o ka mokulele hoʻokele: Pilot, Mixer, Citadel. ʻAʻole mākou e noʻonoʻo i ka Citadel, pono ia e hana i nā palapala hōʻoia e hōʻoia i ka TLS ma waena o nā lawelawe. E nānā pono kākou i ka mea hana a me ke kumu o ka Pilot and Mixer.

Pehea e holo ai ʻo Istio me ka hoʻohana ʻana i nā Kubernetes i ka hana. Mahele 1

ʻO Pilot ka ʻāpana mana nui e puʻunaue ana i nā ʻike āpau e pili ana i ka mea i loaʻa iā mākou i loko o ka hui - nā lawelawe, ko lākou hopena a me nā lula alahele (e laʻa, nā lula no ka hoʻolaha ʻana o Canary a i ʻole nā ​​lula kaapuni).

ʻO Mixer kahi ʻāpana mokulele hoʻokele koho e hāʻawi i ka hiki ke hōʻiliʻili i nā metrics, logs, a me nā ʻike e pili ana i ka pilina pūnaewele. Nānā pū ʻo ia i ka hoʻokō ʻana i nā lula kulekele a me ka hoʻokō ʻana i nā palena uku.

Hoʻokō ʻia ka mokulele ʻikepili me ka hoʻohana ʻana i nā pahu proxy sidecar. Hoʻohana ʻia ka mana ma ka paʻamau. ʻelele ʻelele. Hiki ke hoʻololi ʻia e kahi hoʻokō ʻē aʻe, e like me nginx (nginmesh).

I mea e hana pono ai ʻo Istio i nā noi, aia kahi ʻōnaehana injection aunoa. Kūpono ka hoʻokō hou loa no nā mana Kubernetes 1.9+ (mutational admission webhook). No nā mana Kubernetes 1.7, 1.8 hiki ke hoʻohana i ka Initializer.

Hoʻopili ʻia nā pahu Sidecar iā Pilot me ka hoʻohana ʻana i ka protocol GRPC, kahi e hiki ai iā ʻoe ke hoʻomaikaʻi i ke kumu hoʻohālike no nā loli i hana ʻia i ka hui. Ua hoʻohana ʻia ʻo GRPC ma Envoy mai ka mana 1.6, ma Istio ua hoʻohana ʻia ia mai ka mana 0.8 a he pilot-agent - kahi mea hoʻopili golang ma luna o ka ʻelele e hoʻonohonoho i nā koho hoʻomaka.

ʻO Pilot a me Mixer nā ʻāpana mokuʻāina ʻole, mālama ʻia nā mokuʻāina āpau i ka hoʻomanaʻo. Hoʻonohonoho ʻia ka hoʻonohonoho no lākou ma ke ʻano o Kubernetes Custom Resources, i mālama ʻia ma etcd.
Loaʻa iā Istio-agent ka helu o ka Pilot a wehe i kahi kahawai GRPC iā ia.

E like me kaʻu i ʻōlelo ai, hoʻokō ʻo Istio i nā hana āpau i maopopo loa i nā noi. E nana kakou pehea. ʻO kēia ka algorithm:

  1. Ke hoʻolālā nei i kahi mana hou o ka lawelawe.
  2. Ma muli o ka hoʻokomo ʻana i ka ipu hao sidecar, ua hoʻohui ʻia ka ipu istio-init a me ka ipu istio-agent (ʻelele) i ka pae o ka hoʻopili ʻana i ka hoʻonohonoho, a i ʻole hiki ke hoʻokomo lima ʻia i loko o ka wehewehe ʻana o ka hui Kubernetes Pod.
  3. ʻO ka pahu istio-init kahi palapala e pili ana i nā lula iptables i ka pod. ʻElua mau koho no ka hoʻonohonoho ʻana i nā kaʻa e hoʻopili ʻia i loko o kahi pahu istio-agent: hoʻohana i nā lula redirect iptables, a i ʻole TPROXY. I ka manawa e kākau ai, ʻo ke ala paʻamau me nā lula redirect. I ka istio-init, hiki ke hoʻonohonoho i nā kaʻa e hoʻopili ʻia a hoʻouna ʻia i ka istio-agent. No ka laʻana, no ka hoʻopaʻa ʻana i nā kaʻa komo a me nā mea i waho, pono ʻoe e hoʻonohonoho i nā ʻāpana -i и -b i ke ano *. Hiki iā ʻoe ke kuhikuhi i nā awa kikoʻī e keakea. I ʻole e ʻae i kahi subnet kikoʻī, hiki iā ʻoe ke kuhikuhi iā ia me ka hoʻohana ʻana i ka hae -x.
  4. Ma hope o ka hoʻokō ʻia ʻana o nā ipu init, hoʻomaka ʻia nā mea nui, me ka luna hoʻokele (ʻelele). Hoʻopili ia i ka Pilot i hoʻonohonoho mua ʻia ma o GRPC a loaʻa ka ʻike e pili ana i nā lawelawe āpau a me nā kulekele hoʻokele i ka hui. Wahi a ka ʻikepili i loaʻa, hoʻonohonoho ʻo ia i nā pūʻulu a hāʻawi pololei iā lākou i ka hopena o kā mākou mau noi ma ka hui Kubernetes. Pono nō hoʻi e hoʻomaopopo i kahi mea koʻikoʻi: hoʻonohonoho ikaika ka ʻelele i nā mea hoʻolohe (IP, port pairs) e hoʻomaka ai e hoʻolohe. No laila, i ka wā e komo ai nā noi i loko o ka pod, e hoʻohuli ʻia me ka hoʻohana ʻana i nā lula iptables redirect i ka sidecar, hiki i ka ʻelele ke hana maikaʻi i kēia mau pilina a hoʻomaopopo i kahi e hoʻololi hou ai i ke kaʻa. Ma kēia pae hoʻi, hoʻouna ʻia ka ʻike i ka Mixer, kahi a mākou e nānā ai ma hope, a hoʻouna ʻia nā span tracing.

ʻO ka hopena, loaʻa iā mākou kahi pūnaewele holoʻokoʻa o nā kikowaena proxy ʻelele hiki iā mākou ke hoʻonohonoho mai kahi wahi (Pilot). ʻO nā noi komo a me waho e hele ma o ka ʻelele. Eia kekahi, ʻo ke kaʻa TCP wale nō i hoʻopaʻa ʻia. 'O ia ho'i, ua ho'oholo 'ia ka IP service Kubernetes me ka ho'ohana 'ana i kube-dns ma luna o UDP me ka ho'ololi 'ole. A laila, ma hope o ka hoʻoholo ʻana, hoʻopaʻa ʻia ka noi i waho a hoʻoponopono ʻia e ka ʻelele, ka mea i hoʻoholo i ka hopena o ka noi e hoʻouna ʻia (a ʻaʻole hoʻouna ʻia, i ka hihia o nā kulekele komo a i ʻole ka mea hoʻokele kaapuni o ka algorithm).

Ua ʻike mākou iā Pilot, i kēia manawa pono mākou e hoʻomaopopo i ka hana ʻana o Mixer a me ke kumu e pono ai. Hiki iā ʻoe ke heluhelu i ka palapala kūhelu no ia maanei.

ʻO ka Mixer i kona ʻano o kēia manawa he ʻelua mau ʻāpana: istio-telemetry, istio-policy (ma mua o ka mana 0.8 he mea hoʻokahi istio-mixer). ʻO lāua ʻelua he hui hui, nona kēlā me kēia kuleana no kāna hana ponoʻī. Loaʻa iā Istio telemetry ka ʻike e pili ana i ka mea e hele ai a me nā ʻāpana mai nā pahu sidecar Report ma o GRPC. ʻAe ʻo Istio-policy i nā noi e hōʻoia i ka hoʻokō ʻana i nā lula kulekele. ʻO ka ʻoiaʻiʻo, ʻaʻole i hoʻokō ʻia nā loiloi Poilicy no kēlā me kēia noi, akā hūnā ʻia ma ka mea kūʻai aku (ma ka sidecar) no kekahi manawa. Hoʻouna ʻia nā loiloi hōʻike ma ke ʻano he noi pūʻulu. E ʻike kākou pehea e hoʻonohonoho ai a he aha nā ʻāpana e hoʻouna ʻia ma hope iki.

Manaʻo ʻia ʻo Mixer kahi mea i loaʻa loa e hōʻoia i ka hana pau ʻole i ka hui a me ka hoʻoili ʻana i ka ʻikepili telemetry. Loaʻa ka ʻōnaehana ma muli o kahi buffer multi-level. I ka hoʻomaka, hoʻopaʻa ʻia ka ʻikepili ma ka ʻaoʻao sidecar o nā ipu, a laila ma ka ʻaoʻao mixer, a laila hoʻouna ʻia i ka mea i kapa ʻia ʻo mixer backends. ʻO ka hopena, inā hāʻule kekahi o nā ʻāpana ʻōnaehana, ulu ka buffer a holoi ʻia ma hope o ka hoʻihoʻi ʻana o ka ʻōnaehana. ʻO nā backend mixer nā wahi hope no ka hoʻouna ʻana i ka ʻikepili telemetry: statsd, newrelic, etc. Hiki iā ʻoe ke kākau i kāu hope iho, maʻalahi loa, a e ʻike mākou pehea e hana ai.

Pehea e holo ai ʻo Istio me ka hoʻohana ʻana i nā Kubernetes i ka hana. Mahele 1

No ka hōʻuluʻuluʻana,ʻo ka papahana no ka hanaʻana me ka istio-telemetry penei.

  1. Hoʻouna ʻo Service 1 i kahi noi i ka lawelawe 2.
  2. I ka haʻalele ʻana i ka lawelawe 1, ua uhi ʻia ka noi i kāna kaʻa ʻaoʻao ponoʻī.
  3. Nānā ka ʻelele Sidecar i ka hele ʻana o ka noi i ka lawelawe 2 a hoʻomākaukau i ka ʻike e pono ai.
  4. A laila hoʻouna iā ia i istio-telemetry me ka hoʻohana ʻana i kahi noi hōʻike.
  5. Hoʻoholo ʻo Istio-telemetry inā pono e hoʻouna ʻia kēia Hōʻike i nā ʻaoʻao hope, kahi a me nā ʻikepili e hoʻouna ʻia.
  6. Hoʻouna ʻo Istio-telemetry i ka ʻikepili hōʻike i ke kua hope inā pono.

I kēia manawa e ʻike kākou pehea e kau ai iā Istio i loko o ka ʻōnaehana, aia wale nō nā mea nui (Pilot a me ka ʻelele sidecar).

ʻO ka mea mua, e nānā i ka hoʻonohonoho nui (mesh) a Pilot e heluhelu ai:

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

E loaʻa nā ʻāpana hoʻomalu nui (ka hoʻokele mokulele) i ka namespace istio-system ma Kubernetes.

Ma ka liʻiliʻi loa, pono mākou e kau i ka Pilot. No kēia mea mākou e hoʻohana ai ʻo ia hoʻonohonoho.

A e hoʻonohonoho lima mākou i ka sidecar injecting o ka ipu.

Init ipu:

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

A me 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

I mea e hoʻomaka maikaʻi ai nā mea a pau, pono ʻoe e hana i kahi ServiceAccount, ClusterRole, ClusterRoleBinding, CRD no Pilot, nā wehewehe e hiki ke loaʻa. maanei.

ʻO ka hopena, pono e hoʻomaka maikaʻi ka lawelawe a mākou e hoʻokomo ai i ka sidecar me ka ʻelele, e loaʻa i nā ʻike āpau mai ka mea hoʻokele a me ke kaʻina hana.

He mea nui e hoʻomaopopo ʻo nā mea hoʻokele mokulele āpau he mau palapala stateless a hiki ke hoʻonui ʻia me ka pilikia ʻole. Mālama ʻia nā ʻikepili a pau ma etcd ma ke ʻano o nā wehewehe kikoʻī o nā kumuwaiwai Kubernetes.

Eia kekahi, hiki iā Istio (hoʻokolohua mau) ke holo ma waho o ka pūʻulu a me ka hiki ke nānā a fumble i ka ʻike lawelawe ma waena o nā hui Kubernetes. Hiki iā ʻoe ke heluhelu hou aku e pili ana i kēia maanei.

No ka hoʻokomo ʻana i nā pūʻulu lehulehu, e makaʻala i kēia mau palena:

  1. Pono ʻokoʻa ka Pod CIDR a me Service CIDR ma nā pūʻulu āpau a ʻaʻole pono e uhi.
  2. Pono e loaʻa nā CIDR Pod a pau mai nā Pod CIDR ma waena o nā pūʻulu.
  3. Pono nā kikowaena API Kubernetes āpau e hiki ke loaʻa i kekahi i kekahi.

ʻO kēia ka ʻike mua e kōkua iā ʻoe e hoʻomaka me Istio. Eia nō naʻe, nui nā pōʻino. No ka laʻana, nā hiʻohiʻona o ka hoʻokele ʻana i nā kaʻa waho (ma waho o ka pūʻulu), hoʻokokoke i ka hoʻopau ʻana i nā sidecars, profiling, hoʻonohonoho i kahi mixer a kākau i kahi backend mixer maʻamau, hoʻonohonoho i kahi ʻano tracing a me kāna hana me ka ʻelele.
ʻO kēia mau mea a pau mākou e noʻonoʻo ai ma nā puke ma hope. E nīnau i kāu mau nīnau, e hoʻāʻo wau e uhi iā lākou.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka