рджреВрдд. 1. рдкрд░рд┐рдЪрдп

рд╢реБрднреЗрдЪреНрдЫрд╛! рд╣рд╛ рдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдЦ рдЖрд╣реЗ рдЬреЛ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрддреЛ: тАЬрджреВрдд рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?тАЭ, тАЬрддреНрдпрд╛рдЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ?тАЭ рдЖрдгрд┐ "рдХреЛрдареЗ рд╕реБрд░реВ рдХрд░рд╛рд╡реЗ?".

рд╣реЗ рдХрд╛рдп рдЖрд╣реЗ?

рджреВрдд рд╣рд╛ C++ рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ L4-L7 рдмреЕрд▓рдиреНрд╕рд░ рдЖрд╣реЗ, рдЬреЛ рдЙрдЪреНрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдгрд┐ рдЙрдкрд▓рдмреНрдзрддреЗрд╡рд░ рдХреЗрдВрджреНрд░рд┐рдд рдЖрд╣реЗ. рдПрдХреАрдХрдбреЗ, рд╣реЗ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░реЗ nginx рдЖрдгрд┐ haproxy рдЪреЗ analogue рдЖрд╣реЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рдпреЗрддреЗ. рджреБрд╕рд░реАрдХрдбреЗ, рд╣реЗ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдХрдбреЗ рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬрд╛рд╡рд╛ рдЖрдгрд┐ рдЧреЛ рдмреЕрд▓рдиреНрд╕рд░реНрд╕рдкреЗрдХреНрд╖рд╛ рд╡рд╛рдИрдЯ рдирд╛рд╣реА, рдЬрд╕реЗ рдХреА рдЭреБрдЙрд▓ рдХрд┐рдВрд╡рд╛ рдЯреНрд░реЕрдлрд┐рдХ.

haproxy/nginx/envoy рдЪреА рддреБрд▓рдирд╛ рд╕рд╛рд░рдгреА, рддреЗ рдкреВрд░реНрдг рд╕рддреНрдп рдЕрд╕рд▓реНрдпрд╛рдЪрд╛ рджрд╛рд╡рд╛ рдХрд░рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рддреНрд░ рджреЗрддреЗ.

nginx
рд╣рд╛рдкреНрд░реЙрдХреНрд╕реА
рджреВрдд
рдЯреНрд░реЕрдлрд┐рдХ

github рд╡рд░ рддрд╛рд░реЗ
11.2k/рдорд┐рд░рд░
1.1k/рдорд┐рд░рд░
12.4k
27.6k

рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ
C
C
C ++
go

API
рдирд╛рд╣реА
рдлрдХреНрдд рд╕реЙрдХреЗрдЯ/рдкреБрд╢
рдбреЗрдЯрд╛рдкреНрд▓реЗрди/рдкреБрд▓
рдЦреЗрдЪрдгреЗ

рд╕рдХреНрд░рд┐рдп рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА
рдирд╛рд╣реА
рд╣реЛрдп
рд╣реЛрдп
рд╣реЛрдп

рдЦреБрд▓реНрдпрд╛ рдЯреНрд░реЗрд╕рд┐рдВрдЧ
рдмрд╛рд╣реНрдп рдкреНрд▓рдЧрдЗрди
рдирд╛рд╣реА
рд╣реЛрдп
рд╣реЛрдп

рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА
рдмрд╛рд╣реНрдп рдкреНрд▓рдЧрдЗрди
рдирд╛рд╣реА
рд╣реЛрдп
рдирд╛рд╣реА

рд╡рд┐рд╕реНрддрд╛рд░
рд▓реБрдЖ/рд╕реА
рд▓реБрдЖ/рд╕реА
рд▓реБрдЖ/рд╕реА++
рдирд╛рд╣реА

рдХрд╛

рд╣рд╛ рдПрдХ рддрд░реБрдг рдкреНрд░рдХрд▓реНрдк рдЖрд╣реЗ, рддреЗрдереЗ рдмрд░реНтАНрдпрд╛рдЪ рдЧреЛрд╖реНрдЯреА рдЧрд╣рд╛рд│ рдЖрд╣реЗрдд, рдХрд╛рд╣реА рд╕реБрд░реБрд╡рд╛рддреАрдЪреНрдпрд╛ рдЕрд▓реНрдлрд╛рдордзреНрдпреЗ рдЖрд╣реЗрдд. рдкрд░рдВрддреБ рджреВрдд, рддреНрдпрд╛рдЪреНрдпрд╛ рддрд░реБрдгрдкрдгрд╛рдореБрд│реЗ, рд╡реЗрдЧрд╛рдиреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдзреАрдЪ рдЕрдиреЗрдХ рдордиреЛрд░рдВрдЬрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЖрд╣реЗрдд: рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, рдмрд░реЗрдЪ рддрдпрд╛рд░ рдлрд┐рд▓реНрдЯрд░, рдЖрдкрд▓реЗ рд╕реНрд╡рддрдГрдЪреЗ рдлрд┐рд▓реНрдЯрд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрд╛ рдЗрдВрдЯрд░рдлреЗрд╕.
рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдХреНрд╖реЗрддреНрд░реЗ рдпрд╛рд╡рд░реВрди рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рдкреНрд░рдердо 2 рдЕрдБрдЯреАрдкреЕрдЯрд░реНрди рдЖрд╣реЗрдд:

  • рд╕реНрдерд┐рд░ рдорд╛рдЧреЗ рд╣рдЯрдгреЗ.

рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдпрд╛ рдХреНрд╖рдгреА рдордзреНрдпреЗ рджреВрдд рдХреЕрд╢рд┐рдВрдЧ рд╕рдорд░реНрдерди рдирд╛рд╣реА. рдЧреБрдЧрд▓рд╡рд╛рд▓реЗ рд╣реЗ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗрдд рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛. рд╣реА рдХрд▓реНрдкрдирд╛ рдПрдХрджрд╛рдЪ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА рдЬрд╛рдИрд▓ рджреВрдд RFC рдЕрдиреБрдкрд╛рд▓рдирд╛рдЪреЗ рд╕рд░реНрд╡ рдмрд╛рд░рдХрд╛рд╡реЗ (рдЭреВ рд╣реЗрдбрд░) рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╡рддрд╛рдд. рдкрдг рд╕рдзреНрдпрд╛ рддреЗ рдЕрд▓реНрдлрд╛рд╣реА рдирд╛рд╣реА, рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреА рдЪрд░реНрдЪрд╛ рд╕реБрд░реВ рдЖрд╣реЗ, PR рдЙрдШрдбрд╛ (рдореА PR рд▓реЗрдЦ рд▓рд┐рд╣рд┐рдд рдЕрд╕рддрд╛рдирд╛, PR рдЧреЛрдард▓реЗ, рдкрд░рдВрддреБ рд╣рд╛ рдореБрджреНрджрд╛ рдЕрдЬреВрдирд╣реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ).

рдЖрддреНрддрд╛рд╕рд╛рдареА, рд╕реНрдЯреЕрдЯрд┐рдХреНрд╕рд╕рд╛рдареА nginx рд╡рд╛рдкрд░рд╛.

  • рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди.

рдЖрдкрдг рддреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рджреВрдд рддреЗ рдХрд╢рд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдирд╛рд╣реА. рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреАрд▓ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЙрдШрдб рд╣реЛрдгрд╛рд░ рдирд╛рд╣реАрдд. рдмрд░реЗрдЪ рдХреНрд╖рдг рдЖрд╣реЗрдд:

yaml рдордзреНтАНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛рдирд╛, рддреБрдордЪреА рдЪреВрдХ рд╣реЛрдИрд▓, рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рд╢рд╛рдмреНрджрд┐рдХрддреЗрд╕рд╛рдареА рдлрдЯрдХрд╛рд░рд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛ рдХреА nginx/haproxy рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрдореА рд╕рдВрд░рдЪрд┐рдд рдЕрд╕рд▓реЗ рддрд░реА рддреЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЖрд╣реЗрдд. рддреЛ рдореБрджреНрджрд╛ рдЖрд╣реЗ. Nginx рдЖрдгрд┐ Haproxy рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╣рд╛рддрд╛рдиреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ, рдЖрдгрд┐ рджреВрдд рдХреЛрдбрдордзреВрди рдирд┐рд░реНрдорд┐рддреАрд╕рд╛рдареА. рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ рдкреНрд░реЛрдЯреЛрдмреБрдл, рдкреНрд░реЛрдЯреЛ рдлрд╛рдпрд▓реАрдВрдордзреВрди рддреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреЗ рдЪреВрдХ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдХрдареАрдг рдЖрд╣реЗ.

рдХреЕрдирд░реА, b/g рдЙрдкрдпреЛрдЬрди рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА рд╕рд╛рдорд╛рдиреНрдпрдкрдгреЗ рдХреЗрд╡рд│ рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдореА рдЕрд╕реЗ рдореНрд╣рдгрдд рдирд╛рд╣реА рдХреА рд╣реЗ рд╕реНрдерд┐рд░рдкрдгреЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА, рдЖрдкрдг рд╕рд░реНрд╡рдЬрдг рддреЗ рдХрд░рддреЛ. рдкрд░рдВрддреБ рдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдмреЕрд▓рдиреНрд╕рд░рдордзреНрдпреЗ, рдХреНрд░реЕрдЪ рдШрд╛рд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рджреВрдд рдпрд╛рд╕рд╣

рдЬреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рджреВрдд рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдЖрд╣реЗ:

  • рдЬрдЯрд┐рд▓ рдЖрдгрд┐ рдбрд╛рдпрдиреЕрдорд┐рдХ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рд░рд╣рджрд╛рд░реАрдЪреЗ рд╕рдВрддреБрд▓рди. рдпрд╛рдд рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдореЗрд╢рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдлрдХреНрдд рдПрдХрдЪ рдЕрд╕реЗрд▓ рдЕрд╕реЗ рдирд╛рд╣реА.
  • рд╡рд┐рддрд░рд┐рдд рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЬрдЯрд┐рд▓ рдЕрдзрд┐рдХреГрддрддрд╛ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреА рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рджреВрдд рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдХрд┐рдВрд╡рд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗрд▓реЗ, рдкрд░рдВрддреБ nginx/haproxy рдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд▓реБрдЖ рдЖрдгрд┐ рд╕рдВрд╢рдпрд╛рд╕реНрдкрдж рдкреНрд▓рдЧрдЗрдиреНрд╕рдиреЗ рд╡реЗрдврд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рджреЛрдиреНрд╣реА, рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЙрдЪреНрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд.

рдпрд╛ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ

рджреВрдд рдХреЗрд╡рд│ рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рдореНрд╣рдгреВрди рдмрд╛рдпрдирд░реАрдордзреНрдпреЗ рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ. рдкрдг рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рд░рдЪрдирд╛ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдд рд░рд╕ рдЖрд╣реЗ.

envoy.yaml рд╕реНрдЯреЕрдЯрд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                route:
                  host_rewrite: www.google.com
                  cluster: service_google
          http_filters:
          - name: envoy.router
  clusters:
  - name: service_google
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    # Comment out the following line to test on v6 networks
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: service_google
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: www.google.com
                port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext
        sni: www.google.com

рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рдЖрдкрдг рдХреЛрдгрддреНрдпрд╛ рд╕рдорд╕реНрдпреЗрд╡рд░ рдЙрдкрд╛рдп рд╢реЛрдзрдд рдЖрд╣реЛрдд? рддреБрдореНрд╣реА рд▓реЛрдб рдЕрдВрддрд░реНрдЧрдд рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд░реАрд▓реЛрдб рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА; "рд▓рд╣рд╛рди" рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рддреАрд▓:

  • рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рдорд╛рдгреАрдХрд░рдг.

рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЛрдареЗ рдЕрд╕реВ рд╢рдХрддреЗ, рддреЗ рдЦреВрдк рдореЛрдареЗ рдЕрд╕реВ рд╢рдХрддреЗ, рдЬрд░ рдЖрдкрдг рд╣реЗ рд╕рд░реНрд╡ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдУрд╡реНрд╣рд░рд▓реЛрдб рдХреЗрд▓реЗ рддрд░ рдХреБрдареЗрддрд░реА рддреНрд░реБрдЯреАрдЪреА рд╢рдХреНрдпрддрд╛ рд╡рд╛рдврддреЗ.

  • рджреАрд░реНрдШрдХрд╛рд▓реАрди рдХрдиреЗрдХреНрд╢рди.

рдирд╡реАрди рд╢реНрд░реЛрддрд╛ рд╕реБрд░реВ рдХрд░рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдЬреБрдиреНрдпрд╛рд╡рд░ рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрдиреЗрдХреНрд╢рдирдЪреА рдХрд╛рд│рдЬреА рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ; рдЬрд░ рдмрджрд▓ рд╡рд╛рд░рдВрд╡рд╛рд░ рд╣реЛрдд рдЕрд╕рддреАрд▓ рдЖрдгрд┐ рджреАрд░реНрдШрдХрд╛рд▓реАрди рдХрдиреЗрдХреНрд╢рди рдЕрд╕рддреАрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддрдбрдЬреЛрдб рд╢реЛрдзрд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рд╣реЕрд▓реЛ, kubernetes nginx рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рдд рдЖрд╣реЗ.

  • рд╕рдХреНрд░рд┐рдп рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА.

рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕рдХреНрд░рд┐рдп рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣рд╛рд▓рд╛ рд░рд╣рджрд╛рд░реА рдкрд╛рдард╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреНрдпрд╛ рд╕рд░реНрд╡ рдирд╡реАрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рддрдкрд╛рд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рднрд░рдкреВрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЕрд╕рд▓реНрдпрд╛рд╕, рдпрд╛рд╕ рд╡реЗрд│ рд▓рд╛рдЧрддреЛ. рд╣реЕрдкреНрд░реЙрдХреНрд╕реА.

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

рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рджреВрдд (рд╡рд░реАрд▓ рдлрд╛рдЗрд▓рдордзреВрди) рдЦрд╛рд▓реАрд▓ рд╕рдВрд╕реНрдерд╛ рдЖрд╣реЗрдд:

  • рд╢реНрд░реЛрддрд╛ тАФ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдпрдкреА/рдкреЛрд░реНрдЯрд╡рд░ рд▓рдЯрдХрдгрд╛рд░рд╛ рд╢реНрд░реЛрддрд╛
  • рдЖрднрд╛рд╕реА рд╣реЛрд╕реНрдЯ - рдбреЛрдореЗрди рдирд╛рд╡рд╛рдиреЗ рдЖрднрд╛рд╕реА рд╣реЛрд╕реНрдЯ
  • рдорд╛рд░реНрдЧ - рд╕рдВрддреБрд▓рд┐рдд рдирд┐рдпрдо
  • рдХреНрд▓рд╕реНрдЯрд░ тАФ рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рдЕрдкрд╕реНрдЯреНрд░реАрдореНрд╕рдЪрд╛ рд╕рдореВрд╣
  • рдЕрдВрддреНрдпрдмрд┐рдВрджреВ тАФ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЙрджрд╛рд╣рд░рдг рдкрддреНрддрд╛

рдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЖрдгрд┐ рдЗрддрд░ рдХрд╛рд╣реА рдбрд╛рдпрдиреЕрдорд┐рдХ рдкрджреНрдзрддреАрдиреЗ рднрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд; рдпрд╛рд╕рд╛рдареА, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗрд╡реЗрдЪрд╛ рдкрддреНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рдЬрд┐рдереВрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рд╕реЗрд╡рд╛ REST рдХрд┐рдВрд╡рд╛ gRPC рдЕрд╕реВ рд╢рдХрддреЗ, gRPC рд╢реНрд░реЗрдпрд╕реНрдХрд░ рдЖрд╣реЗ.

рд╕реЗрд╡рд╛рдВрдЪреА рдЕрдиреБрдХреНрд░рдореЗ рдирд╛рд╡реЗ рдЖрд╣реЗрдд: LDS, VHDS, RDS, CDS рдЖрдгрд┐ EDS. рддреБрдореНрд╣реА рд╕реНрдерд┐рд░ рдЖрдгрд┐ рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдПрдХрддреНрд░ рдХрд░реВ рд╢рдХрддрд╛, рдпрд╛ рдорд░реНрдпрд╛рджреЗрд╕рд╣ рдбрд╛рдпрдиреЕрдорд┐рдХ рд╕рдВрд╕рд╛рдзрди рд╕реНрдерд┐рд░ рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.

рдмрд░реНрдпрд╛рдЪ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА, рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рддреАрди рд╕реЗрд╡рд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ, рддреНрдпрд╛рдВрдирд╛ рдПрдбреАрдПрд╕ (рдПрдХрддреНрд░рд┐рдд рд╢реЛрдз рд╕реЗрд╡рд╛) рдореНрд╣рдгрддрд╛рдд. рдЬрд╛рд╡рд╛ рдЖрдгрд┐ рддрд┐рдереЗ рдЬрд╛ gRPC рдбреЗрдЯрд╛рдкреНрд▓реЗрдирдЪреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рд╕реНрд░реЛрддрд╛рддреАрд▓ рд╡рд╕реНрддреВ рднрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.

рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЦрд╛рд▓реАрд▓ рдлреЙрд░реНрдо рдШреЗрддреЗ:

envoy.yaml рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

dynamic_resources:
  ads_config:
    api_type: GRPC
    grpc_services:
      envoy_grpc:
        cluster_name: xds_clr
  cds_config:
    ads: {}
static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: ingress_http
          rds:
            route_config_name: local_route
            config_source:
              ads: {}
          http_filters:
          - name: envoy.router
  clusters:
  - name: xds_clr
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: xds_clr
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: xds
                port_value: 6565

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╡рд░ рджреВрдд рдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣, рддреЗ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрдирд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдИрд▓ рдЖрдгрд┐ RDS, CDS рдЖрдгрд┐ EDS рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрд▓. рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рд╣реЛрддреЗ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ рдпреЗрдереЗ.

рдереЛрдбрдХреНрдпрд╛рдд, рджреВрдд рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдЪрд╛ рдкреНрд░рдХрд╛рд░, рдиреЛрдбрдЪреА рдЖрд╡реГрддреНрддреА рдЖрдгрд┐ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рджрд░реНрд╢рд╡рд┐рдгрд╛рд░реА рд╡рд┐рдирдВрддреА рдкрд╛рдард╡рддреЗ. рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд, рддреНрдпрд╛рд▓рд╛ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдЖрдгрд┐ рдЖрд╡реГрддреНрддреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ; рдЬрд░ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрдирд╡рд░реАрд▓ рдЖрд╡реГрддреНрддреА рдмрджрд▓рд▓реА рдирд╕реЗрд▓ рддрд░ рддреА рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдд рдирд╛рд╣реА.
4 рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд:

  • рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╕рд╛рдареА рдПрдХ gRPC рдкреНрд░рд╡рд╛рд╣, рд╕рдВрд╕рд╛рдзрдирд╛рдЪреА рд╕рдВрдкреВрд░реНрдг рд╕реНрдерд┐рддреА рдкрд╛рдард╡рд┐рд▓реА рдЬрд╛рддреЗ.
  • рд╡реЗрдЧрд│реЗ рдкреНрд░рд╡рд╛рд╣, рдкреВрд░реНрдг рд╕реНрдерд┐рддреА.
  • рдПрдХ рдкреНрд░рд╡рд╛рд╣, рд╡рд╛рдвреАрд╡ рд╕реНрдерд┐рддреА.
  • рд╡реЗрдЧрд│реЗ рдкреНрд░рд╡рд╛рд╣, рд╡рд╛рдвреАрд╡ рдЕрд╡рд╕реНрдерд╛.

рд╡рд╛рдвреАрд╡ xDS рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрди рдЖрдгрд┐ рджрд░рдореНрдпрд╛рди рд░рд╣рджрд╛рд░реА рдХрдореА рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рджреВрдд, рд╣реЗ рдореЛрдареНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рдкрд░рдВрддреБ рд╣реЗ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рдХрд░рддреЗ; рд╡рд┐рдирдВрддреАрдордзреНрдпреЗ рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕рджрд╕реНрдпрддрд╛ рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА рд╕реВрдЪреА рдЖрд╣реЗ.

рдЖрдордЪреЗ рдЙрджрд╛рд╣рд░рдг ADS рд╡рд╛рдкрд░рддреЗ - RDS, CDS, EDS рдЖрдгрд┐ рдиреЙрди-рдЗрдиреНрдХреНрд░рд┐рдореЗрдВрдЯрд▓ рдореЛрдбрд╕рд╛рдареА рдПрдХ рдкреНрд░рд╡рд╛рд╣. рд╡рд╛рдвреАрд╡ рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ api_type: DELTA_GRPC

рд╡рд┐рдирдВрддреАрдордзреНрдпреЗ рдиреЛрдб рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╛рдареА рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрдирд▓рд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реА рд╕рдВрд╕рд╛рдзрдиреЗ рдкрд╛рдард╡реВ рд╢рдХрддреЛ рджреВрдд, рд╕реЗрд╡рд╛ рдЬрд╛рд│реА рдмрд╛рдВрдзрдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.

рд╣рд▓рдХреА рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреЗ

рд╡рд░ рджреВрдд рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╡рд░ рдХрд┐рдВрд╡рд╛ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрдирдХрдбреВрди рдирд╡реАрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛рдирд╛, рд░рд┐рд╕реЛрд░реНрд╕ рд╡реЙрд░реНрдордЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╣реЗ рд▓рд┐рд╕рдирд░ рд╡реЙрд░реНрдордЕрдк рдЖрдгрд┐ рдХреНрд▓рд╕реНрдЯрд░ рд╡реЙрд░реНрдордЕрдкрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. рдЖрд░рдбреАрдПрд╕/рдПрд▓рдбреАрдПрд╕рдордзреНрдпреЗ рдмрджрд▓ рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдкрд╣рд┐рд▓рд╛ рд▓реЙрдиреНрдЪ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рджреБрд╕рд░рд╛ рд╕реАрдбреАрдПрд╕/рдИрдбреАрдПрд╕рдордзреНрдпреЗ рдмрджрд▓ рд╣реЛрддреЛ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдХреЗрд╡рд│ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдмрджрд▓рд▓реНрдпрд╛рд╕, рдРрдХрдгрд╛рд░рд╛ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА.

рд╡реЙрд░реНрдо-рдЕрдк рдкреНрд░рдХреНрд░рд┐рдпреЗрджрд░рдореНрдпрд╛рди, рдЯрд╛рдЗрдордЖрдЙрдЯ рджрд░рдореНрдпрд╛рди рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрдирдХрдбреВрди рдЕрд╡рд▓рдВрдмреВрди рд╕рдВрд╕рд╛рдзрдиреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрд╣реЗрдд. рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЭрд╛рд▓реНрдпрд╛рд╕, рдкреНрд░рд╛рд░рдВрдн рдпрд╢рд╕реНрд╡реА рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рдирд╡реАрди рд╢реНрд░реЛрддрд╛ рдкреЛрд░реНрдЯрд╡рд░ рдРрдХрдгреНрдпрд╛рд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.
рдЖрд░рдВрднрд┐рдХ рдСрд░реНрдбрд░: EDS, CDS, рд╕рдХреНрд░рд┐рдп рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА, RDS, LDS. рд╕рдХреНрд░рд┐рдп рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА рд╕рдХреНрд╖рдо рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рдПрдХрд╛ рдпрд╢рд╕реНрд╡реА рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреАрдирдВрддрд░рдЪ рд╡рд╛рд╣рддреВрдХ рд╡рд░рдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рдЬрд╛рдИрд▓.

рдЬрд░ рд╢реНрд░реЛрддрд╛ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рдЬреБрдирд╛ рдбреНрд░реЗрди рд╕реНрдерд┐рддреАрдд рдЬрд╛рдИрд▓ рдЖрдгрд┐ рд╕рд░реНрд╡ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдХрд┐рдВрд╡рд╛ рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рд╣рдЯрд╡рд┐рд▓рд╛ рдЬрд╛рдИрд▓. --drain-time-s, рдбреАрдлреЙрд▓реНрдЯ 10 рдорд┐рдирд┐рдЯреЗ.

рдЪрд╛рд▓реВ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛