рд░рд╛рдЬрджреВрддред 1ред рдкрд░рд┐рдЪрдп

рдЕрднрд┐рд╡рд╛рджрди! рдпреЛ рдПрдЙрдЯрд╛ рдЫреЛрдЯреЛ рд▓реЗрдЦ рд╣реЛ рдЬрд╕рд▓реЗ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреНрдЫ: "рд░рд╛рдЬрджреВрдд рдХреЗ рд╣реЛ?", "рдпреЛ рдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫ?" рд░ "рдХрд╣рд╛рдБ рд╕реБрд░реБ рдЧрд░реНрдиреЗ?"ред

рдпреЛ рдХреЗ рд╣реЛ

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

haproxy/nginx/envoy рдХреЛ рддреБрд▓рдирд╛ рддрд╛рд▓рд┐рдХрд╛, рдпрд╕рд▓реЗ рдкреВрд░реНрдг рд╕рддреНрдп рднрдПрдХреЛ рджрд╛рдмреА рдЧрд░реНрджреИрди, рддрд░ рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рддреНрд░ рджрд┐рдиреНрдЫред

nginx
haproxy
рдкрдард╛рдЗрдпреЛ
рдЯреНрд░рд╛рдлрд┐рдХ

github рдорд╛ рддрд╛рд░рд╛рд╣рд░реВ
11.2k/рдорд┐рд░рд░
1.1k/рдорд┐рд░рд░
12.4k
27.6k

рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ
C
C
рд╕реА ++
go

рдПрдкреАрдЖрдИ
рдХреБрдиреИ
рд╕рдХреЗрдЯ рдорд╛рддреНрд░ / рдзрдХреНрдХрд╛
рдбрд╛рдЯрд╛рдкреНрд▓реЗрди/рдкреБрд▓
рдЦреАрдВрдЪреЛ

рд╕рдХреНрд░рд┐рдп рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ
рдХреБрдиреИ
рд╣реЛ
рд╣реЛ
рд╣реЛ

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

J.W.T.
рдмрд╛рд╣реНрдп рдкреНрд▓рдЧрдЗрди
рдХреБрдиреИ
рд╣реЛ
рдХреБрдиреИ

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

рдХрд┐рди

рдпреЛ рдПрдХ рдпреБрд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛ, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдЪреАрдЬрд╣рд░реВ рд╣рд░рд╛рдЗрд░рд╣реЗрдХрд╛ рдЫрдиреН, рдХреЗрд╣реА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЕрд▓реНрдлрд╛рдорд╛ред рддрд░ рдкрдард╛рдЗрдпреЛ, рдпрд╕рдХреЛ рдпреБрд╡рд╛рд╡рд╕реНрдерд╛рдХреЛ рдХрд╛рд░рдг рдкрдирд┐, рджреНрд░реБрдд рд░реВрдкрдорд╛ рд╡рд┐рдХрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рд░ рдкрд╣рд┐рд▓реЗ рдиреИ рдзреЗрд░реИ рд░реЛрдЪрдХ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЫрдиреН: рдЧрддрд┐рд╢реАрд▓ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди, рдзреЗрд░реИ рддрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ, рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рд▓реЗрдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рд░рд▓ рдЗрдиреНрдЯрд░рдлреЗрд╕ред
рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХрд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдпрд╕рдмрд╛рдЯ рдкрдЫреНрдпрд╛рдЙрдБрдЫрдиреН, рддрд░ рдкрд╣рд┐рд▓реЗ рддреНрдпрд╣рд╛рдБ 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 рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрджрдЫред

  • рд╕рдХреНрд░рд┐рдп рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪред

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

рдпреЛ рдорд╛ рдХрд╕рд░реА рд╕рдорд╛рдзрд╛рди рд╣реБрдиреНрдЫ рдкрдард╛рдЗрдпреЛрдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рд▓реЛрдб рдЧрд░реЗрд░, рдкреВрд▓ рдореЛрдбреЗрд▓ рдЕрдиреБрд╕рд╛рд░, рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рдЧрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдкрд░рд┐рд╡рд░реНрддрди рдирднрдПрдХреЛ рднрд╛рдЧрд▓рд╛рдИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдПрдХ рд╢реНрд░реЛрддрд╛, рдЬреБрди рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдорд╣рдБрдЧреЛ рдЫ рд░ рд╡рд┐рд░рд▓реИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрдард╛рдЗрдпреЛ (рдорд╛рдерд┐рдХреЛ рдлрд╛рдЗрд▓рдмрд╛рдЯ) рдирд┐рдореНрди рдирд┐рдХрд╛рдпрд╣рд░реВ рдЫрдиреН:

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

рдпреА рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдерд╛рд╣рд░реВ рд░ рдХреЗрд╣реА рдЕрдиреНрдпрд╣рд░реВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рднрд░реНрди рд╕рдХрд┐рдиреНрдЫ; рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд▓реЗ рд╕реЗрд╡рд╛рдХреЛ рдареЗрдЧрд╛рдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫ рдЬрд╣рд╛рдБрдмрд╛рдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреЗрдЫред рд╕реЗрд╡рд╛ REST рд╡рд╛ gRPC рд╣реБрди рд╕рдХреНрдЫ, gRPC рд░рд╛рдореНрд░реЛ рдЫред

рд╕реЗрд╡рд╛рд╣рд░реВрд▓рд╛рдИ рдХреНрд░рдорд╢рдГ рдирд╛рдо рджрд┐рдЗрдПрдХреЛ рдЫ: LDS, VHDS, RDS, CDS рд░ EDSред рддрдкрд╛рдИрдВ рд╕реНрдерд┐рд░ рд░ рдЧрддрд┐рд╢реАрд▓ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕реНрд░реЛрдд рд╕реНрдерд┐рд░ рдПрдХрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред

рдзреЗрд░реИ рдЬрд╕реЛ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рдЕрдиреНрддрд┐рдо рддреАрди рд╕реЗрд╡рд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫ, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдПрдбреАрдПрд╕ (рдПрдХрддреНрд░рд┐рдд рдЦреЛрдЬ рд╕реЗрд╡рд╛) рднрдирд┐рдиреНрдЫред java рд░ рддреНрдпрд╣рд╛рдБ рдЬрд╛рдиреБрд╣реЛрд╕реН 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 рд╕реНрдерд┐рддрд┐рдорд╛ рдЬрд╛рдиреНрдЫ рд░ рд╕рдмреИ рдЬрдбрд╛рдирд╣рд░реВ рдмрдиреНрдж рднрдПрдкрдЫрд┐ рд╡рд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рднрдПрдкрдЫрд┐ рдореЗрдЯрд┐рдиреЗрдЫред --drain-time-s, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд 10 рдорд┐рдиреЗрдЯред

рдлреЗрд░рд┐ рдЬрд╛рд░реА рд░рд╛рдЦреМрдВрд▓рд╛ред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди