[Envoy] ์‹œ์ž‘

[์›๋ณธ ๋งํฌ]

envoy๋Š” nginx์™€ ๋น„์Šทํ•œ ํฌ์ง€์…˜์— ์žˆ๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์‹œ์Šคํ…œ์ด๋‹ค.

2016๋…„์— ๋‚˜์™”๋‹ค. ๋ฉ”์ด์ €ํ•œ ํ”„๋ก์‹œ ์‹œ์Šคํ…œ๋“ค ์ค‘์—๋Š” ๊ฐ€์žฅ ์ Š์€ ๋…€์„์ด๋‹ค.

์ฃผ๋œ ์‚ฌ์šฉ์ฒ˜๋Š” ์—ญ์‹œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

๋ณด๋‹ˆ๊นŒ GCP์—์„œ ์ œ๊ณตํ•˜๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋„ envoy๋กœ ๋งŒ๋“ ๊ฑฐ๋”๋ผ.
ํ”„๋กœ๋•์…˜์—๋„ ์˜์™ธ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํŽธ์ด๋‹ค.

์žฅ์ ์€ ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์ด๋‹ค.

MSA์— ๋Œ€ํ•œ ์ง€์›๋„ ๋น ๋ฆฟํ•ด์„œ, grpc, protobuf์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•œ๋‹ค.

์„ฑ๋Šฅ๋งŒ ๋‘๊ณ ๋ณด๋ฉด envoy๊ฐ€ nginx๋ณด๋‹ค 2๋ฐฐ ์ •๋„๋Š” ๋น ๋ฅด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ˆœ์ˆ˜ํ•œ ์˜คํ”ˆ์†Œ์Šค๋ž€ ์ ๋„ ํŠน๊ธฐํ• ๋งŒํ•œ ๋ถ€๋ถ„์ด๋‹ค. ๊ฒฝ์Ÿ์ž์ธ nginx์™€ HAProxy๋„ ์˜คํ”ˆ์†Œ์Šค์ด๊ธด ํ•˜์ง€๋งŒ, ๊ธฐ์—…์ฒด๊ฐ€ ๋ณด์œ -๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์˜คํ”ˆ์†Œ์Šค ๋ฒ„์ „๊ณผ ์ƒ์—…์šฉ ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ ์ฐจ๋ณ„์ด ์กด์žฌํ•œ๋‹ค.
๊ทธ๋Ÿฐ ๋ถ€๋ถ„์—์„œ envoy๋Š” ๋งค์šฐ ๋…๋ฆฝ์ ์ด๊ณ  ๊นจ๋—ํ•œ ํŽธ์ด๋‹ค.




์„ค์น˜

์ž์„ธํ•œ ๊ฒƒ์€ ์„ค์น˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
https://www.envoyproxy.io/docs/envoy/latest/start/install




์„ค์น˜ ๋ฐ ์‹คํ–‰

์šฐ๋ถ„ํˆฌ์—์„œ๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

sudo apt update
sudo apt install apt-transport-https gnupg2 curl lsb-release
curl -sL 'https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key' | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg
Verify the keyring - this should yield "OK"
echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list
sudo apt update
sudo apt install -y getenvoy-envoy

์„ค์น˜๊ฐ€ ์ž˜ ๋๋‹ค๋ฉด cli๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

docker๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ์™€์„œ ์“ฐ๋ฉด ๋œ๋‹ค.
latest ํƒœ๊ทธ๊ฐ€ ์—†์–ด์„œ ํ•ญ์ƒ ๋ฒ„์ „์„ ๋ช…์‹œํ•ด์•ผ ํ•˜๊ณ , nginx์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ธฐ๋ณธ๋™์ž‘์ด ์—†์–ด์„œ ์„ค์ •ํŒŒ์ผ์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋ญ๊ฐ€ ๋”ฐ๋กœ ๋™์ž‘ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

docker pull envoyproxy/envoy:v1.26-latest
docker run envoyproxy/envoy:v1.26-latest




ํ”„๋ก์‹ฑํ•ด๋ณด๊ธฐ

๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ํ”„๋ก์‹ฑํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž.
์ผ๋‹จ ๋กœ์ปฌ 12345 ํฌํŠธ์— ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„๋ฅผ ๋„์›Œ๋†จ๋‹ค.

์ €๊ฑธ ํ”„๋ก์‹ฑํ•˜๊ฒŒ ํ•˜๊ฒ ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ yaml์„ ์งœ์ค€๋‹ค.

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: some_service }
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
  - name: some_service
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: some_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 0.0.0.0
                port_value: 12345

๋ฆฌ์Šค๋„ˆ๋Š” ์™ธ๋ถ€์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜์—ญ์„ ์ •์˜ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 0.0.0.0:80๋กœ ํ•ด์„œ 80 http๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ‘์—์„œ ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ–ˆ๋‹ค.

๋ฆฌ์Šค๋„ˆ๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋ฐฑ์—”๋“œ์ธ ์…ˆ์ด๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ๋กœ์ปฌ์— ๋– ์žˆ๋Š” 12345 ํฌํŠธ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.

์ €๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด๋†“๊ณ  cli๋กœ ์‹คํ–‰์„ ํ•ด์ฃผ๋ฉด ์„ค์ •ํŒŒ์ผ์ด ์ง€์ •๋จ๊ณผ ๋™์‹œ์— ์žฌ์‹คํ–‰์ด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ž˜ ๋  ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://tech.cloudmt.co.kr/2023/03/16/230316/
https://www.google.com/search?q=nginx+vs+envoy&oq=nginx+vs+en&aqs=chrome.0.0i512j69i57j0i30l4j0i8i30l4.7255j0j7&client=ms-android-samsung-ss&sourceid=chrome-mobile&ie=UTF-8
https://bcho.tistory.com/m/1253
https://www.envoyproxy.io/docs/envoy/latest/start/quick-start/run-envoy