рдЗрд╕реНрддрд┐рдпреЛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдХрдмреЗрдЬрд╝


рдЗрд╕реНрддрд┐рдпреЛ рд╕реЗрд╡рд╛ рдЬрд╛рд▓


рд╣рдо рдирд╛рдорд▓реА рдореЗрдВ рдЕрдм рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЗрд╕реНрддрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд╣ рддреЛ рдмрд╕ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╣рдорд╛рд░реА рдмрдбрд╝реА рдЧрд┐рд░рд╛рд╡рдЯ рдереА, рд╣рдо рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рдЬреЗрдЯрд┐рдпрд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдХреЛ рд▓реЗ рдЧрдП рдФрд░ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рд╣рдорд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ рдирд┐рд╡реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред


рдореБрдЭреЗ рдиреБрдХрд╕рд╛рди рдЙрдард╛рдирд╛ рдкрдбрд╝рд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕рдХрд╛ рджреВрд░-рджреВрд░ рддрдХ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЗрд╕реНрддрд┐рдпреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдордиреЗ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реАрдЦрд╛ред рдХрднреА-рдХрднреА рд╣рдо рддрдХрдиреАрдХреА рд╡рд┐рдХрд▓реЛрдВ рдореЗрдВ рднрдЯрдХреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВред рдЖрдЧреЗ рдФрд░ рднреА рдкрдж рд╣реЛрдВрдЧреЗред


рдЗрд╕реНрддрд┐рдпреЛ рдХреНрдпрд╛ рд╣реИ?


рдЗрд╕реНрддрд┐рдпреЛ рдПрдХ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ L7 рдкреНрд░реЙрдХреНрд╕реА (HTTP рдФрд░ gRPC) рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреЙрдбреНрд╕ рдореЗрдВ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд╕рд╛рдЗрдбрдХрд╛рд░ Envoy рдХрдВрдЯреЗрдирд░ рд╣реИрдВ рдЬреЛ Istio Pilot API (рдФрд░ gRPC рд╕реЗрд╡рд╛) рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧ рдпрд╛рддрд╛рдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рд╣реБрдб рдХреЗ рддрд╣рдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдПрд▓ 7 рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде, рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕, рдирд┐рд╢рд╛рди, рд░рд┐рдЯреНрд░реА рд▓реЙрдЬрд┐рдХ, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░, рд▓реЛрдб рд╕рдВрддреБрд▓рди рдФрд░ рдХреИрдирд░реА рддреИрдирд╛рддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдЗрдП рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕


Kubernetes рдореЗрдВ, рд╣рдо рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдпрд╛ StatefulSet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмрд┐рдирд╛ "рд╡реЗрдирд┐рд▓рд╛" рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдм рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдиреЛрдб рдкрд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреЙрдбреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╢реБрд░реВ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЬрдм рдПрдХ рдЕрдВрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рд╕рдлрд▓ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЕрдВрдбрд░ рдмрдирд╛рддрд╛ рд╣реИред


рдПрдкреАрдЖрдИ рдЬреАрд╡рдирдЪрдХреНрд░ рдЪрд░рдг:



рдардВрдбреА рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдмрдВрдЬрдИ рдмрд╛рджрд▓ рдХрд╛ рд╢реБрдХреНрд░рд┐рдпрд╛ред


рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╡реЗрд╢ webhooks рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреВрдмрд░реНрдиреЗрдЯреНрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рд╕реНрд░реЛрдд, рдЖрджрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕реНрддрд┐рдпреЛ рдЕрдкрдирд╛ рдЬрд╛рджреВ рдХрд░рддреА рд╣реИред


рдкреНрд░рд╡реЗрд╢ webhooks рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛


рдЬрдм рдПрдХ рд╕рдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( kubectl рдпрд╛ Deployment рдорд╛рдзреНрдпрдо рд╕реЗ), рддреЛ рдпрд╣ рдЗрд╕ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗрдмрд╣реВрдХ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрдбрд╝реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред


Istio рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, istio-sidecar-рдЗрдВрдЬреЗрдХреНрдЯрд░ webhooks рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:


 $ kubectl get mutatingwebhookconfiguration NAME AGE istio-sidecar-injector 87d 

рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕:


 apiVersion: admissionregistration.k8s.io/v1beta1 kind: MutatingWebhookConfiguration metadata: labels: app: istio-sidecar-injector chart: sidecarInjectorWebhook-1.0.4 heritage: Tiller name: istio-sidecar-injector webhooks: - clientConfig: caBundle: redacted service: name: istio-sidecar-injector namespace: istio-system path: /inject failurePolicy: Fail name: sidecar-injector.istio.io namespaceSelector: matchLabels: istio-injection: enabled rules: - apiGroups: - "" apiVersions: - v1 operations: - CREATE resources: - pods 

рдЗрд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреЛ рд╕рднреА рдЪреВрд▓реНрд╣рд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ istio-sidecar-injector рдореЗрдВ istio-system рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ istio-injection=enabled рдЕрдЧрд░ рдирд╛рдорд╕реНрдерд╛рди istio-injection=enabled ред рдЗрдВрдЬреЗрдХреНрдЯрд░ рдореЗрдВ рдкреЙрдбрд╕реНрдкреАрдХ рдореЗрдВ рджреЛ рдФрд░ рдХрдВрдЯреЗрдирд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдкреНрд░реЙрдХреНрд╕реА рдирд┐рдпрдореЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдФрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реАред рд╕рд╛рдЗрдбрдХрд╛рд░ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдЗрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ istio-sidecar-injector рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд╛рдЗрдбрдХреИрд░рд┐рдВрдЧ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рд┐рджрдХрд░ рдлрд▓реА


рд╕рд┐рдбрдХрд░ рд╣рдорд╛рд░реЗ рдЬрд╛рджреВрдЧрд░ рдЗрд╕реНрддрд┐рдпреЛ рдХреА рдЪрд╛рд▓ рд╣реИрдВред рдЗрд╕реНрддрд┐рдпреЛ рдиреЗ рдЗрддрдиреА рдЪрддреБрд░рд╛рдИ рд╕реЗ рд╕рдм рдХреБрдЫ рдХреНрд░реИрдВрдХ рдХрд┐рдпрд╛ рдХрд┐ рдмрд╛рд╣рд░ рд╕реЗ рдпрд╣ рд╕рд┐рд░реНрдл рдЬрд╛рджреВ рд╣реИ, рдпрджрд┐ рдЖрдк рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред


Init рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рдХрдВрдЯреЗрдирд░


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдПрдХ рдмрд╛рд░ рдХреЗ рдЗрдирдЗрдЯ рдХрдВрдЯреЗрдирд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЦреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдкреВрд▓ рд╕рдВрд╕рд╛рдзрди, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред


рдЗрд╕реНрддрд┐рдпреЛ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реНрдЯрд┐рдпреЛ iptables рдирд┐рдпрдо рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реАрдзреЗ рджреВрдд рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЙрд╕рдХреЗ рдЧрдВрддрд╡реНрдп рддрдХ рдкрд╣реБрдБрдЪрд╛рддрд╛ рд╣реИред рдЯреНрд░реИрдлрд╝рд┐рдХ рдПрдХ рдЫреЛрдЯрд╛ рдЪрдХреНрдХрд░ рд▓рдЧрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ, рдХреНрд╡реЗрд░реА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдиреАрддрд┐ рдкреНрд░рд╡рд░реНрддрди рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рд╣реИрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, Istio рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ Istio iptables рдирд┐рдпрдо рдмрдирд╛рддрд╛ рд╣реИред


@jimmysongio рдиреЗ iptables рдирд┐рдпрдореЛрдВ рдФрд░ Envoy рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдмреАрдЪ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрдиреЗрдХреНрд╢рди рдЖрд░реЗрдЦ рдмрдирд╛рдпрд╛:



рджреВрдд - рджреВрдд рдпрд╛рддрд╛рдпрд╛рдд


Envoy рдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдЖрдорддреМрд░ рдкрд░ Envoy рдХреЗ рдЕрдВрджрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЖрд░реЗрдЦ рдореЗрдВред рдЗрд╕реНрддрд┐рдпреЛ рдкреНрд░реЙрдХреНрд╕реА рдПрдХ рдФрд░ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬреЛ рд╕рднреА рдлрд▓реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЗрд╕реНрддрд┐рдпреЛ рд╕рд╛рдЗрдбрдХрд╛рд░ рдЗрдВрдЬреЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ, рджреВрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЪреВрд▓реНрд╣рд╛ рд╕реЗ рдХреБрдЫ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ (рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдЖрдкрдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ)ред


Envoy рдкреНрд░рдХреНрд░рд┐рдпрд╛ Envoy v2 API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреА рд╣реИ, рдЬреЛ Istio рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред


рджреВрдд рдФрд░ рдкрд╛рдпрд▓рдЯ


рдХрд┐рд╕реА рд╕рдореВрд╣ рдореЗрдВ рдлрд▓реА рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрдд рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдбрд╛рдЯрд╛ рдкреНрд▓реЗрди рд╣реИ рдФрд░ рдЗрд╕реЗ рдЧрд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреНрд░реЛрд▓ рдкреНрд▓реЗрди рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдПрдирд╡реЛрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдЬрдмрд╛рди рдпрд╛ рд╕реЗрд╡рд╛ рдкреЛрд░реНрдЯ рдХреЛ рдЬреАрдЖрд░рдкреАрд╕реА рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред Istio, рдЕрдкрдиреА рдкрд╛рдпрд▓рдЯ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, gRPC рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рджреВрдд рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд webhook рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрдХ рд╕рд╛рдЗрдбрдХрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рдореЗрдВ рдпрд╛рддрд╛рдпрд╛рдд рдХреЗ рд╕рднреА рдирд┐рдпрдо рд╣реИрдВ рдЬреЛ рджреВрдд рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рд╣реИред



рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп "рдХреЗ рддрд╣рдд <-> рдкрд╛рдпрд▓рдЯ"


рдкрд╛рдпрд▓рдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд┐рддрд┐ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЕрджреНрдпрддрдиреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреЙрдбреНрд╕, рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдкрд╛рдпрд▓рдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдПрдирд╡реЙрдп рд╕рд╛рдЗрдбрдХрд╛рд░ рдХреЛ рд╕рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рдПрдиреНрд╡реЙрдп рдХреЗ рдмреАрдЪ рдХрд╛ рдкреБрд▓ рд╣реИред



рдкрд╛рдпрд▓рдЯ рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рддрдХ


рдЬрдм рдкреЙрдбреНрд╕, рд╕рд░реНрд╡рд┐рд╕реЗрдЬ, рдпрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рдпрд▓рдЯ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдХрдиреЗрдХреНрдЯреЗрдб рдПрдирд╡реЙрдп рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднреЗрдЬрддрд╛ рд╣реИред


рдХреНрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?


Istio Pilot рд╕реЗ Envoy рдХреЛ рдХреНрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ?


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Kubernetes рдЖрдкрдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдореБрджреНрджреЛрдВ рдХреЛ рдПрдХ sevice (рд╕реЗрд╡рд╛) рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ endpoint рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреА рд╕реВрдЪреА рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЦреЛрд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ:


 kubectl get endpoints 

рдпрд╣ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдЖрдИрдкреА рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ рдФрд░ рдЙрдирдХреЗ рдкрддреЗ (рдЖрдорддреМрд░ рдкрд░ рдпреЗ рдПрдХ рддреИрдирд╛рддреА рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдлрд▓реА рд╣реИрдВ)ред Envoy рдХреЛ рд░реВрдЯ рдбреЗрдЯрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Istio рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рд╕реЗрд╡рд╛рдПрдБ, рд╢реНрд░реЛрддрд╛ рдФрд░ рдорд╛рд░реНрдЧ


рдЬрдм рдЖрдк рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢реЙрд░реНрдЯрдХрдЯ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдЙрдкрдпреБрдХреНрдд рдкреЙрдбреНрд╕ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдЖрдк рд╕реЗрд╡рд╛ рдХреЗ IP рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ Kubernetes рдЗрд╕ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб


 curl my-service.default.svc.cluster.local:3000 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ default рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ my-service рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╡рд░реНрдЪреБрдЕрд▓ IP рдХреЛ рдвреВрдВрдвреЗрдЧрд╛, рдФрд░ рдпрд╣ IP рд╕рд░реНрд╡рд┐рд╕ рд▓реЗрдмрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЙрдк рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред


рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рджреВрдд рдЗрд╕ рддрд░реНрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕реНрддрд┐рдпреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдирд╡реЙрдп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирд╡реЙрдп рдХреА рд╕реНрдорд╛рд░реНрдЯ рд░реВрдЯрд┐рдВрдЧ рдФрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЖрдИрдкреА рдХреЛ рд╕рдореАрдк рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдирд╡реЙрдп рд╕реАрдзреЗ рдЖрдИрдкреА рдЪреВрд▓реНрд╣рд╛ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реНрддрд┐рдпреЛ рдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдирд╡реЙрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдпрд╛ ред


Kubernetes, Istio рдФрд░ Envoy рд╢рдмреНрдж рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ, рдФрд░ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдЦрд╛рддреЗ рд╣реИрдВред


рд╕реЗрд╡рд╛рдПрдВ


Kubernetes рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ Envoy рдореЗрдВ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддреА рд╣реИред Envoy рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ IP (рдпрд╛ рд╣реЛрд╕реНрдЯрдирд╛рдо)ред Istio sidecar-pod рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕рдореВрд╣реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, istioctl proxy-config cluster < > рдЪрд▓рд╛рдПрдБред рдпрд╣ рдХрдорд╛рдВрдб рдЪреВрд▓реНрд╣рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 $ istioctl proxy-config cluster taxparams-6777cf899c-wwhr7 -n applications SERVICE FQDN PORT SUBSET DIRECTION TYPE BlackHoleCluster - - - STATIC accounts-grpc-gw.applications.svc.cluster.local 80 - outbound EDS accounts-grpc-public.applications.svc.cluster.local 50051 - outbound EDS addressvalidator.applications.svc.cluster.local 50051 - outbound EDS 

рд╕рднреА рд╕рдорд╛рди рд╕реЗрд╡рд╛рдПрдБ рдЗрд╕ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реИрдВ:


 $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) accounts-grpc-gw ClusterIP 10.3.0.91 <none> 80/TCP accounts-grpc-public ClusterIP 10.3.0.202 <none> 50051/TCP addressvalidator ClusterIP 10.3.0.56 <none> 50051/TCP 

Istio рдХреИрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдкреЛрд░реНрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ name рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд╛ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред


 $ kubectl get service accounts-grpc-public -o yaml apiVersion: v1 kind: Service metadata: name: accounts-grpc-public spec: ports: - name: grpc port: 50051 protocol: TCP targetPort: 50051 

рдЕрдЧрд░ рд╡рд╣рд╛рдБ grpc рдпрд╛ grpc- рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рддреЛ Istio рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП HTTP2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред рд╣рдореЗрдВ рдХрдбрд╝рд╡рд╛ рдЕрдиреБрднрд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдИрдЖрдИрдПрд╕рдУ рдкреЛрд░реНрдЯ рдирд╛рдо рднреНрд░рд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ http рдпрд╛ grpc рдЙрдкрд╕рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ ...


рдпрджрд┐ рдЖрдк Envoy рдореЗрдВ kubectl рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреЛрд░реНрдЯ рдлрд╝реЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЦрд╛рддреЗ-рдЬреАрдкреАрд╕реА-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдкрд╛рдпрд▓рдЯ рджреНрд╡рд╛рд░рд╛ Envoy рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ HTTP2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реА рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ:


 $ kubectl -n applications port-forward otherpod-dc56885ff-dqc6t 15000:15000 & $ curl http://localhost:15000/config_dump | yq r - ... - cluster: circuit_breakers: thresholds: - {} connect_timeout: 1s eds_cluster_config: eds_config: ads: {} service_name: outbound|50051||accounts-grpc-public.applications.svc.cluster.local http2_protocol_options: max_concurrent_streams: 1073741824 name: outbound|50051||accounts-grpc-public.applications.svc.cluster.local type: EDS ... 

рдкреЛрд░реНрдЯ 15000 рдПрдирд╡реЙрдп рдПрдбрдорд┐рди рдкреЗрдЬ рд╣реИ , рдЬреЛ рд╣рд░ рд╕рд╛рдЗрдб рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред


рд╢реНрд░реЛрддрд╛рдУрдВ


рд╢реНрд░реЛрддрд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВред рдкрддрд╛ рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдпрд╣рд╛рдБ рд╣реИ:


 $ kubectl get ep addressvalidator -o yaml apiVersion: v1 kind: Endpoints metadata: name: addressvalidator subsets: - addresses: - ip: 10.2.26.243 nodeName: ip-10-205-35-230.ec2.internal targetRef: kind: Pod name: addressvalidator-64885ccb76-87l4d namespace: applications ports: - name: grpc port: 50051 protocol: TCP 

рдЗрд╕рд▓рд┐рдП, рдкрддрд╛ рд╕рддреНрдпрд╛рдкрди рдЪреВрд▓реНрд╣рд╛ рдкреЛрд░реНрдЯ 50051 рдкрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рд╣реИ:


 $ kubectl -n applications port-forward addressvalidator-64885ccb76-87l4d 15000:15000 & $ curl http://localhost:15000/config_dump | yq r - ... dynamic_active_listeners: - version_info: 2019-01-13T18:39:43Z/651 listener: name: 10.2.26.243_50051 address: socket_address: address: 10.2.26.243 port_value: 50051 filter_chains: - filter_chain_match: transport_protocol: raw_buffer ... 

рдорд╛рд░реНрдЧреЛрдВ


рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ, рдорд╛рдирдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрдирдЧреНрд░реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рд░ рдФрд░ рдХреБрд╢рд▓ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди VirtualService - VirtualService ред рд╡рд░реНрдЪреБрдЕрд▓реНрд╕ рд╕рд░реНрд╡рд┐рд╕ рдЧреЗрдЯрд╡реЗ рдХреЛ рдмрд╛рдВрдзрдХрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдмрд░реНрди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрдирдЧреНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред


рдЕрд░реНрдерд╛рддреН, рд╣рдо рд╕рднреА рдЖрдВрддрд░рд┐рдХ GRPC рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рд▓рд┐рдП Istio Ingress-Gateway рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: grpc-gateway spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http2 number: 80 protocol: HTTP2 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-gateway spec: gateways: - grpc-gateway hosts: - '*' http: - match: - uri: prefix: /namely.address_validator.AddressValidator retries: attempts: 3 perTryTimeout: 2s route: - destination: host: addressvalidator port: number: 50051 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭреЗрдВрдЧреЗред рдпрд╣ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реНрддрд┐рдпреЛ-рдЗрдирдЧреНрд░реЗрдЧреЗрдЯрд╡реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдЬреЛ рдХрд┐ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдХрд┐ istio: ingressgateway рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ istio: ingressgateway рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, IngressGateway HTTP 80 рдкрд░ рдкреЛрд░реНрдЯ 80 рд╕реЗ рдЕрдзрд┐рдХ рд╕рднреА рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИред VirtualService рдЗрд╕ рдЧреЗрдЯрд╡реЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, /namely.address_validator.AddressValidator рдЙрдкрд╕рд░реНрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рджреЛ рд╕реЗрдХреЗрдгреНрдб рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ рдирд┐рдпрдо рдХреЗ addressvalidator рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ addressvalidator рдорд╛рдзреНрдпрдо рд╕реЗ addressvalidator рдЧреБрдЬрд░рддрд╛ рд╣реИред


рдпрджрд┐ рд╣рдо Istio-IngressGateway рдкреЙрдб рдкреЛрд░реНрдЯ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Envoy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ VirtualService:


 $ kubectl -n istio-system port-forward istio-ingressgateway-7477597868-rldb5 15000 ... - match: prefix: /namely.address_validator.AddressValidator route: cluster: outbound|50051||addressvalidator.applications.svc.cluster.local timeout: 0s retry_policy: retry_on: 5xx,connect-failure,refused-stream num_retries: 3 per_try_timeout: 2s max_grpc_timeout: 0s decorator: operation: addressvalidator.applications.svc.cluster.local:50051/namely.address_validator.AddressValidator* ... 

рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╕рдордп рд╣рдордиреЗ рдЬреЛ рдЧреБрдЧрд▓реА рдХреА рдереА


рддреНрд░реБрдЯрд┐ 503 рдпрд╛ 404 рд╣реЛрддреА рд╣реИ


рдХрд╛рд░рдг рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдпреЗ рд╣реИрдВ:


  • Sidecar рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╛рдпрд▓рдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдкрд╛рдпрд▓рдЯ рдЪрд▓ рд░рд╣рд╛ рд╣реИ)ред
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗрд╡рд╛ рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рдЕрдорд╛рдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред
  • VirtualService / Envoy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЧрд▓рдд рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд▓рд┐рдЦрддрд╛ рд╣реИред рдХрд┐рдирд╛рд░реЗ рд╕реЗрд╡рд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрдд рд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Jaeger рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

Istio рдкреНрд░реЙрдХреНрд╕реА рд▓реЙрдЧреНрд╕ рдореЗрдВ NR / UH / UF рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?


  • рдПрдирдЖрд░ - рдХреЛрдИ рд░реВрдЯ рдирд╣реАрдВред
  • UH - рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЕрд╕реНрд╡рд╕реНрде (рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЕрдкрд╕реНрдЯреНрд░реАрдо)ред
  • рдпреВрдПрдл - рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╡рд┐рдлрд▓рддрд╛ (рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╡рд┐рдлрд▓рддрд╛)ред

Envoy рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдФрд░ рдкрдврд╝реЗрдВред


Istio рдХреЗ рд╕рд╛рде рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


  • Istio рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП NodeAffinity рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХреНрд╕реЗрд╕ рдЬрд╝реЛрди рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЪреВрд▓реНрд╣рд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗрдВред
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рдкреЙрдб рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреВрд▓реНрд╣рд╛ рд▓реЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реЛрдЧрд╛ред

рдХреНрд░реЛрдирдЬреЛрдм рдЕрдВрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?


рдЬрдм рдореБрдЦреНрдп рдХрд╛рд░реНрдпрднрд╛рд░ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд░реЛрдиреЛрдЬрд░ рдореЗрдВ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХреЛ рдПрдиреЛрдЯреЗрд╢рди sidecar.istio.io/inject рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ sidecar.istio.io/inject: тАЬfalseтАЭ рдкреЙрдбрд╕реНрдкреАрдХ рдХреЗ рд▓рд┐рдПред


рдЗрд╕реНрдЯрд┐рдпреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ?


рд╣рдо рд╕реНрдкрд┐рдиреЗрдВрдХрд░ рдХреЛ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдирд╡реАрдирддрдо рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рд▓реЗрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ helm template -f values.yml рд╣реИрдВ, helm template -f values.yml рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред helm template -f values.yml рдкрд░ рдлрд╛рдЗрд▓ рдХреЛ kubectl apply -f - рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ kubectl apply -f - ред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реАрдЖрд░рдбреА рдпрд╛ рдПрдкреАрдЖрдИ рдХреЛ рдЧрд▓рддреА рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред


рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдмреА рдЯреЗрдмрд▓реНрд╕ рдФрд░ рдорд╛рдЗрдХрд▓ рд╣рдорд░рд╛ рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi441616/


All Articles