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

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

рдпрд╣ рдХреНрдпрд╛ рд╣реИ

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

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

nginx
haproxy
рднреЗрдЬрд╛
рдЯреНрд░реИрдлрд╝рд┐рдХ

рдЬреАрдердм рдкрд░ рд╕рд┐рддрд╛рд░реЗ
11.2k/рдорд┐рд░рд░
1.1k/рдорд┐рд░рд░
12.4k
27.6k

рдЗрд╕рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реБрдЖ
C
C
рд╕реА + +
go

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

рд╕рдХреНрд░рд┐рдп рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ
рдирд╣реАрдВ
рд╣рд╛рдВ
рд╣рд╛рдВ
рд╣рд╛рдВ

рдЕрдиреБрд░реЗрдЦрдг рдЦреЛрд▓реЗрдВ
рдмрд╛рд╣рд░реА рдкреНрд▓рдЧрдЗрди
рдирд╣реАрдВ
рд╣рд╛рдВ
рд╣рд╛рдВ

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

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

рдХреНрдпрд╛ рдХреЗ рд▓рд┐рдП

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

  • рд╕реНрдереИрддрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐.

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

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП nginx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

  • рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕.

рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рднреЗрдЬрд╛ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдВрдЧреА. рдРрд╕реЗ рдХрдИ рдХреНрд╖рдг рд╣реИрдВ:

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

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

рд╡реЗ рдХрд╛рд░реНрдп рдЬрд┐рдирдХреЗ рд▓рд┐рдП рджреВрдд рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ:

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

рджреЛрдиреЛрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

╨Ъ╨░╨║ ╤Н╤В╨╛ ╤А╨░╨▒╨╛╤В╨░╨╡╤В

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

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

рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рдиреНрдпрд╛рд╕

рд╣рдо рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ? рдЖрдк рд▓реЛрдб рдХреЗ рддрд╣рдд рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ; "рдЫреЛрдЯреА" рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреА:

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

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

  • рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдмрдВрдз.

рдирдП рд╢реНрд░реЛрддрд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛; рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╛рд░-рдмрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдордЭреМрддреЗ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреАред рдирдорд╕реНрддреЗ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдиреЗ nginx рдкрд░ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИред

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

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

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

рд╡рд┐рдиреНрдпрд╛рд╕ рднреЗрдЬрд╛ (рдЙрдкрд░реЛрдХреНрдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ) рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВ:

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

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

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

рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд┐рдо рддреАрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЙрдиреНрд╣реЗрдВ ADS (рдПрдЧреНрд░реАрдЧреЗрдЯреЗрдб рдбрд┐рд╕реНрдХрд╡рд░реА рд╕рд░реНрд╡рд┐рд╕) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╛рд╡рд╛ рдФрд░ рд╡рд╣рд╛рдВ рдЬреАрдЖрд░рдкреАрд╕реА рдбреЗрдЯрд╛рдкреНрд▓реЗрди рдХрд╛ рдПрдХ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рдореНрди рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:

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

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

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рднреЗрдЬрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдкреНрд░рдХрд╛рд░, рдиреЛрдб рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЗрд╕реЗ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдФрд░ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ; рдпрджрд┐ рдирд┐рдпрдВрддреНрд░рдг-рддрд▓ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
4 рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ gRPC рд╕реНрдЯреНрд░реАрдо, рд╕рдВрд╕рд╛рдзрди рдХреА рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред
  • рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рд╛рдПрдБ, рдкреВрд░реА рд╕реНрдерд┐рддрд┐ред
  • рдПрдХ рдзрд╛рд░рд╛, рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕реНрдерд┐рддрд┐.
  • рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рд╛рдПрдБ, рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕реНрдерд┐рддрд┐ред

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

рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдПрдбреАрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЖрд░рдбреАрдПрд╕, рд╕реАрдбреАрдПрд╕, рдИрдбреАрдПрд╕ рдФрд░ рдЧреИрд░-рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдореЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реАрдоред рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ api_type: DELTA_GRPC

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

рдЬреЛрд╢ рдореЗрдВ рдЖрдирд╛

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

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

рдпрджрд┐ рд╢реНрд░реЛрддрд╛ рдХреЛ рдкреБрдирдГ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдкреБрд░рд╛рдирд╛ DRAIN рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдиреЗ рдпрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ --drain-time-s, рдбрд┐рдлрд╝реЙрд▓реНрдЯ 10 рдорд┐рдирдЯред

рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ