Ahoana ny fampandehanana Istio mampiasa Kubernetes amin'ny famokarana. Fizarana 1

Inona no Istio? Ity no antsoina hoe Service mesh, teknolojia izay manampy sosona abstraction amin'ny tambajotra. Manakana ny fifamoivoizana rehetra na ampahany amin'ny cluster izahay ary manao hetsika maromaro miaraka aminy. Iza amin'ireo? Ohatra, manao routing marani-tsaina izahay, na mampihatra ny fomba fiatoana fitetezam-paritra, afaka mandamina ny "fametrahana canary", mamadika ampahany amin'ny fifamoivoizana amin'ny dikan-teny vaovao amin'ny serivisy, na afaka mametra ny fifandraisana ivelany sy mifehy ny dia rehetra manomboka amin'ny cluster mankany amin'ny serivisy. tambajotra ivelany. Azo atao ny mametraka fitsipika momba ny politika hifehezana ny dia eo amin'ny serivisy micro samihafa. Farany, azontsika atao ny mahazo ny sarintanin'ny fifaneraserana amin'ny tambajotra manontolo ary manao ny fitambaran'ny metrika ho mangarahara tanteraka amin'ny fampiharana.

Azonao atao ny mamaky momba ny mekanisma amin'ny asa antontan-taratasy ofisialy. Istio dia fitaovana mahery vaika ahafahanao mamaha asa sy olana maro. Amin'ity lahatsoratra ity dia tiako ny hamaly ireo fanontaniana lehibe izay matetika mipoitra rehefa manomboka amin'ny Istio. Hanampy anao hiatrika izany haingana kokoa izany.

Ahoana ny fampandehanana Istio mampiasa Kubernetes amin'ny famokarana. Fizarana 1

Ahoana no fiasan'izy

Istio dia misy faritra roa lehibe - ny fiaramanidina fanaraha-maso sy ny fiaramanidina data. Ny fiaramanidina fanaraha-maso dia misy ireo singa fototra izay miantoka ny fiasan'ny ambiny. Amin'ny dikan-teny ankehitriny (1.0) ny fiaramanidina fanaraha-maso dia manana singa telo lehibe: Pilot, Mixer, Citadel. Tsy hihevitra ny Citadel izahay, ilaina ny mamorona taratasy fanamarinana mba hiantohana ny TLS eo amin'ny serivisy. Andeha hojerentsika akaiky ny fitaovana sy ny tanjon'ny Pilot sy Mixer.

Ahoana ny fampandehanana Istio mampiasa Kubernetes amin'ny famokarana. Fizarana 1

Pilot no singa fanaraha-maso lehibe izay mizara ny fampahalalana rehetra momba ny zavatra ananantsika ao amin'ny cluster - serivisy, ny fiafaran'izy ireo ary ny fitsipiky ny lalana (ohatra, ny fitsipika momba ny fametrahana Canary na ny fitsipiky ny fiatoana faritra).

Mixer dia singa fiaramanidina fanaraha-maso azo atao izay manome fahafahana manangona metrika, logs ary fampahalalana momba ny fifandraisana amin'ny tambajotra. Manara-maso ny fanarahana ny fitsipika politika sy ny fanarahana ny fetran'ny sarany ihany koa izy.

Ny fiaramanidina data dia ampiharina amin'ny alΓ lan'ny kaontenera proxy sidecar. Powerful dia ampiasaina amin'ny alΓ lan'ny default. iraka proxy. Azo soloina fampiharana hafa, toy ny nginx (nginmesh).

Mba ahafahan'i Istio miasa mangarahara tanteraka amin'ny fampiharana dia misy ny rafitra tsindrona mandeha ho azy. Ny fampiharana farany dia mety amin'ny Kubernetes 1.9+ version (mutational admission webhook). Ho an'ny Kubernetes version 1.7, 1.8 dia azo atao ny mampiasa ny Initializer.

Ny kaontenera Sidecar dia mifandray amin'ny Pilot amin'ny alΓ lan'ny protocol GRPC, izay ahafahanao manatsara ny modely fanosehana amin'ny fanovana mitranga ao amin'ny cluster. Ny GRPC dia nampiasaina tamin'ny Envoy nanomboka tamin'ny version 1.6, ao amin'ny Istio dia efa nampiasaina hatramin'ny version 0.8 ary mpanamory fiaramanidina - fonosana golang amin'ny iraka izay manitsy ny safidy fandefasana.

Pilot sy Mixer dia singa tsy misy fanjakana tanteraka, tazonina ao anaty fitadidiana ny fanjakana rehetra. Ny fanamafisana ho azy ireo dia napetraka amin'ny endrika Kubernetes Custom Resources, izay voatahiry ao amin'ny etcd.
Istio-agent dia mahazo ny adiresin'ny Pilot ary manokatra stream GRPC ho azy.

Araka ny nolazaiko, Istio dia mampihatra ny fiasa rehetra mangarahara tanteraka amin'ny fampiharana. Andeha hojerentsika hoe ahoana. Ny algorithm dia:

  1. Mametraka kinova vaovaon'ny serivisy.
  2. Miankina amin'ny fomba fanindronana kaontenera sidecar, ny kaontenera istio-init sy ny fitoeran-jiro istio-agent (iraka) dia ampiana amin'ny dingan'ny fampiharana ny fanamafisana, na efa azo ampidirina amin'ny tanana ao amin'ny famaritana ny orinasa Kubernetes Pod.
  3. Ny container istio-init dia script izay mampihatra ny fitsipika iptables amin'ny pod. Misy safidy roa hanefena ny fifamoivoizana mba hofonosina ao anaty fitoeran-javatra istio-agent: mampiasa fitsipika redirect iptables, na TPROXY. Amin'ny fotoana anoratana, ny fomba fanao mahazatra dia amin'ny fitsipika redirect. Ao amin'ny istio-init, azo atao ny manitsy izay fifamoivoizana tokony hosakanana ary alefa any amin'ny istio-agent. Ohatra, mba hisakanana ny fifamoivoizana miditra sy mivoaka rehetra dia mila mametraka ny masontsivana ianao -i ΠΈ -b amin'ny dikany *. Azonao atao ny mamaritra ny seranana manokana hanakanana. Mba tsy hanakanana subnet manokana dia azonao atao ny mamaritra izany amin'ny alΓ lan'ny saina -x.
  4. Aorian'ny famonoana ireo kaontenera init dia atomboka ny lehibe indrindra, anisan'izany ny mpanamory-agent (iraka). Izy io dia mifandray amin'ny Pilot efa napetraka amin'ny alΓ lan'ny GRPC ary mahazo fampahalalana momba ny serivisy rehetra misy sy ny politikan'ny lalana ao amin'ny cluster. Araka ny angon-drakitra voaray dia amboarina ireo cluster ary apetrany mivantana any amin'ny faran'ny fampiharana ataontsika ao amin'ny cluster Kubernetes. Ilaina ihany koa ny manamarika teboka manan-danja iray: ny iraka dia manitsy ny mpihaino (IP, port pairs) izay manomboka mihaino azy. Noho izany, rehefa miditra ao amin'ny pod ny fangatahana, dia averina amin'ny alΓ lan'ny fitsipika iptables redirect ao amin'ny sidecar, ny iraka dia efa afaka mandamina tsara ireo fifandraisana ireo ary mahafantatra hoe aiza no hisolo tena ny fifamoivoizana. Amin'ity dingana ity ihany koa dia alefa any amin'ny Mixer ny fampahalalana, izay hojerentsika any aoriana, ary alefa ny tracing span.

Vokatr'izany dia mahazo tambajotra iray manontolo ny mpizara proxy iraka izay azontsika amboarina avy amin'ny teboka iray (Pilot). Ny fangatahana miditra sy mivoaka rehetra dia mandeha amin'ny alΓ lan'ny iraka. Ambonin'izany, ny fifamoivoizana TCP ihany no voasakana. Midika izany fa ny serivisy Kubernetes IP dia voavaha amin'ny fampiasana kube-dns amin'ny UDP nefa tsy miova. Avy eo, aorian'ny fanapahan-kevitra, ny fangatahana mivoaka dia voasakana sy karakarain'ny iraka, izay efa manapa-kevitra hoe aiza no tokony handefasana ny fangatahana (na tsy alefa, raha misy ny politikam-pidirana na ny fisintahana ny algorithm).

Nahafantatra an'i Pilot izahay, izao dia mila mahatakatra ny fomba fiasan'ny Mixer sy ny antony ilΓ na azy. Azonao atao ny mamaky ny antontan-taratasy ofisialy momba izany eto.

Ny Mixer amin'ny endriny ankehitriny dia misy singa roa: istio-telemetry, istio-politika (talohan'ny version 0.8 dia singa iray istio-mixer). Izy ireo dia mixer, izay samy tompon'andraikitra amin'ny asany manokana. Istio telemetry dia mahazo vaovao momba izay mandeha aiza sy amin'ny inona avy amin'ny masontsivana avy amin'ny sidecar Report container amin'ny GRPC. Istio-policy dia manaiky ny fangatahana Check mba hanamarina fa afa-po ny fitsipiky ny politika. Ny fisavana politika dia mazava ho azy fa tsy natao ho an'ny fangatahana rehetra, fa voatahiry ao amin'ny mpanjifa (ao amin'ny sidecar) mandritra ny fotoana iray. Ny fisavana tatitra dia alefa toy ny fangatahana batch. Andeha hojerentsika ny fomba fanamboarana sy ny masontsivana tokony halefa taty aoriana kely.

Ny Mixer dia heverina ho singa tena azo ampiasaina izay miantoka ny asa tsy tapaka amin'ny fanangonana sy ny fanodinana ny angona telemetry. Ny rafitra dia azo vokatry ny buffer multi-level. Amin'ny voalohany, ny angon-drakitra dia apetraka eo amin'ny sisin'ny kaontenera, avy eo amin'ny lafiny mixer, ary avy eo alefa any amin'ny antsoina hoe backend mixer. Vokatr'izany, raha tsy mahomby ny singa iray amin'ny rafitra, dia mitombo ny buffer ary mipoitra rehefa avy naverina tamin'ny laoniny ny rafitra. Ny backend mixer dia teboka farany handefasana angon-drakitra telemetry: statsd, newrelic, sns. Azonao atao ny manoratra ny backend anao manokana, tena tsotra, ary ho hitantsika ny fomba hanaovana izany.

Ahoana ny fampandehanana Istio mampiasa Kubernetes amin'ny famokarana. Fizarana 1

Raha fintinina, ny tetika miasa amin'ny istio-telemetry dia toy izao manaraka izao.

  1. Ny serivisy 1 dia mandefa fangatahana amin'ny serivisy 2.
  2. Rehefa miala amin'ny serivisy 1, ny fangatahana dia fonosina amin'ny fiara misy azy manokana.
  3. Ny iraky ny Sidecar dia manara-maso ny fandehan'ny fangatahana amin'ny serivisy 2 ary manomana ny fampahalalana ilaina.
  4. Avy eo dia alefaso any amin'ny istio-telemetry amin'ny alΓ lan'ny fangatahana Report.
  5. Istio-telemetry dia mamaritra raha tokony halefa any amin'ny backends ity Tatitra ity, izay angon-drakitra tokony halefa.
  6. Istio-telemetry dia mandefa tatitra any amin'ny backend raha ilaina.

Andeha hojerentsika ny fomba fametrahana Istio ao amin'ny rafitra, tsy misy afa-tsy ny singa fototra (Pilot sy iraka sidecar).

Voalohany, andeha hojerentsika ny rafitra fototra (mesh) izay novakian'i 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

Ny singa fanaraha-maso lehibe rehetra (fiaramanidina fanaraha-maso) dia ho hita ao amin'ny namespace istio-system ao amin'ny Kubernetes.

Farafaharatsiny, mila mametraka Pilot fotsiny isika. Ho an'ity dia ampiasainay fanamboarana toy izany.

Ary hamboarinay amin'ny tanana ny sidecar manindrona ny kaontenera.

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

Ary 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

Mba hanombohan'ny zava-drehetra amim-pahombiazana dia mila mamorona ServiceAccount, ClusterRole, ClusterRoleBinding, CRD ho an'ny Pilot ianao, ny famaritana izay azo jerena. eto.

Vokatr'izany dia tokony hanomboka amim-pahombiazana ny serivisy izay itsindrohanay sidecar miaraka amin'ny iraka, handray ny zavatra hita rehetra avy amin'ny mpanamory sy ny fangatahana.

Zava-dehibe ny mahatakatra fa ny singa rehetra amin'ny fiaramanidina fanaraha-maso dia fampiharana tsy misy fanjakana ary azo atao mitsivalana tsy misy olana. Ny angon-drakitra rehetra dia voatahiry ao amin'ny etcd amin'ny endrika famaritana manokana momba ny loharano Kubernetes.

Ary koa, Istio (mbola andrana) dia manana fahafahana mihazakazaka ivelan'ny cluster ary afaka mijery sy manjavozavo ny fitadiavana serivisy eo anelanelan'ny cluster Kubernetes maromaro. Afaka mamaky bebe kokoa momba izany ianao eto.

Ho an'ny fametrahana multicluster, tandremo ireto fetra manaraka ireto:

  1. Ny Pod CIDR sy ny Service CIDR dia tsy maintsy miavaka amin'ny cluster rehetra ary tsy tokony hifanindry.
  2. Ny CIDR Pods rehetra dia tsy maintsy azo idirana avy amin'ny CIDR Pods eo anelanelan'ny cluster.
  3. Ny mpizara Kubernetes API rehetra dia tsy maintsy azo idirana.

Ity no fampahalalana voalohany hanampy anao hanomboka amin'ny Istio. Na izany aza, mbola maro ny fandrika. Ohatra, ny endri-javatra amin'ny fampandehanana ny fifamoivoizana ivelany (eo ivelan'ny cluster), ny fomba debug ny sidecars, ny profiling, ny fametrahana mixer ary ny fanoratana ny backend mixer mahazatra, ny fametrahana mekanika fanaraha-maso sy ny asany amin'ny alΓ lan'ny iraka.
Izany rehetra izany dia hodinihintsika ao amin’ny boky manaraka. Anontanio ny fanontanianao, hiezaka aho hamaly azy ireo.

Source: www.habr.com

Add a comment