Istio๋กœ Service Mesh๋ฅผ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ๋ชจ๋‹ˆํ„ฐ๋ง & ์ œ์–ด ํ•˜๊ธฐ ๐Ÿ’‚ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋ ค๋ฉด ServiceEntry๋กœ ์ถฉ๋ถ„, ๋งŒ์•ฝ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด Egress Gateway๊นŒ์ง€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์ž!

8 minute read

์–ด๋ฆผ์—†์ง€! Istio๋ฅผ ์“ฐ๋ฉด ์„œ๋น„์Šค ๋ฉ”์‰ฌ๋ฅผ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•œ๋‹ค!!


Egress Gateway๋ž€?

Istio๋กœ ์„œ๋น„์Šค ๋ฉ”์‰ฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด, ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ”๊นฅ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„๋„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค!! ๊ทธ ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ egress-gateway ์ปดํฌ๋„ŒํŠธ์™€ istio์˜ ServiceEntry ๋ฆฌ์†Œ์Šค๋‹ค!

์ผ๋‹จ ๋ฐ๋ชจ๋ถ€ํ„ฐ ํ•ด๋ณด์ฃ !!

์ด๋ฒˆ ์˜ˆ์ œ๋Š” Istio ๊ณต์‹ ๋ฌธ์„œ์˜ โ€œEgress Gatewayโ€ ๋ฌธ์„œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹คํ—˜ํ•ด๋ณด์•˜๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ช‡๋ช‡ ๋ฆฌ์†Œ์Šค์˜ yaml ์ •์˜๋Š” ์ดํ•ด๊ฐ€ ์‰ฝ๋„๋ก ๋ณ€ํ˜•์„ ๊ฐ€ํ–ˆ๋‹ค.

egress-gateway ์ปดํฌ๋„ŒํŠธ ๋„์šฐ๊ธฐ

istioctl์—์„œ "default" Profile๋กœ istio๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด, egress-gateway ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—†๋Š” ์ƒํƒœ์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ง์ ‘ egress-gateway ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„์›Œ์ค˜์•ผ ํ•œ๋‹ค. "demo" Profile๋กœ ์„ค์น˜ ํ–ˆ๋‹ค๋ฉด, egress-gateway๋Š” ์ด๋ฏธ ์žˆ์„ ๊ฒƒ์ด๋‹ค!

$ istioctl install \
    --set "spec.components.egressGateways[0].name=istio-egressgateway" \
    --set "spec.components.egressGateways[0].enabled=true"

ํ…Œ์ŠคํŠธ ์šฉ Pod์„ ๋„์šฐ์ž.

$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/sleep/sleep.yaml

์œ„์˜ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ž ๋งŒ ์ž๋Š” ์ž ๋งŒ๋ณด Pod์ด ํ•˜๋‚˜ ๋œฌ๋‹ค. ์š” Pod์— ์ ‘์†ํ•ด์„œ ์š”์ฒญ๋“ค์„ ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค.

์•„๋ž˜ ์ปค๋งจ๋“œ๋กœ Pod์— ์ ‘์†ํ•˜๊ณ  ๋ฌดํ•œ curl ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์ž.

$ kubectl exec -it deploy/sleep -- sh
~ $ while true; do curl -s -o /dev/null -w "%{http_code}\n" https://edition.cnn.com/politics; done

์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ, http status ์ฝ”๋“œ๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค!!

์ด๋•Œ๋Š” Kiali์—์„œ ํ™•์ธํ•ด๋ด๋„, ์–ด๋–ค ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„๋„ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

ServiceEntry๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ

์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์šฐ๋ฆฌ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” edition.cnn.com์œผ๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๋“ค์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž.

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: cnn
spec:
  hosts:
  - edition.cnn.com
  ports:
  - number: 443
    name: tls
    protocol: TLS
  resolution: DNS
EOF

๊ทธ๋Ÿฌ๊ณ  curl๋กœ ๋ฌดํ•œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉดโ€ฆ

์™€์šฐ!! ์ด์ œ๋Š” edition.cnn.com ์‚ฌ์ดํŠธ๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค!!

ํ•ด๋‹น ์‚ฌ์ดํŠธ์— ์ดˆ๋‹น ๋ช‡๋ฒˆ ์ฟผ๋ฆฌํ•˜๋Š”์ง€๋„ ์•Œ ์ˆ˜ ์žˆ๋Š”๊ฑด ๋ค!!

์ฐธ๊ณ ๋กœ PassthroughCluster๋Š” kubectl exec๋‚˜ port-forward ์ ‘์† ํ–ˆ์„ ๋•Œ ์ €๋ ‡๊ฒŒ ๋œฌ๋‹ค.

Egress Gateway๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์ด ๋‚˜๊ฐ€๋„๋ก ์„ค์ •

๋‹จ์ˆœํžˆ ServiceEntry ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์šด์˜ํ•ด๋„ ์ถฉ๋ถ„ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, egress-gateway ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ”๊นฅ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ์ถœ๊ตฌ(exit point)๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋˜, ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•ด์„œ๋„ DestinationRule์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!!

์ด๋ฅผ ์œ„ํ•ด Gateway, VirtualService ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค์–ด ์ฃผ์ž. (DestinationRule ์ ์šฉ์€ ์ข€ ์žˆ๋‹ค๊ฐ€ ํ•ด๋ณผ๊ฑฐ๋‹ค!)

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-egressgateway
spec:
  selector:
    istio: egressgateway
  servers:
  - port:
      number: 443 # egress gateway์˜ ํฌํŠธ
      name: tls
      protocol: TLS
    hosts:
    - edition.cnn.com
    tls:
      mode: PASSTHROUGH
EOF

* โ€œTLS Pass-throughโ€์— ๋Œ€ํ•ด์„  Istio TLS Network ๊ด€๋ จ ์‚ฌ์ „ ์ง€์‹ ๋ฌธ์„œ์— ๋”ฐ๋กœ ์ •๋ฆฌ ํ–ˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์ž. ์—ฌ๊ธฐ์„œ๋Š” Egress GW๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๋ฉ”์‹œ ๋ฐ”๊นฅ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋”ฐ๋กœ TLS ๋ณตํ˜ธํ™” ์—†์ด ๊ทธ๋Œ€๋กœ ํ†ต๊ณผ ์‹œํ‚จ๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋ฐ›์•„๋“ค์ด์ž.

์ด์ œ 2๊ฐœ์˜ VirtrualService ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๋ฐ

์ฒซ๋ฒˆ์งธ ๊ฒƒ์€ Service Mesh์—์„œ edition.cnn.com์œผ๋กœ ๋ณด๋‚ด๋Š” ํŠธ๋ž˜ํ”ฝ์„ Egress GW๋กœ ๋ณด๋‚ด๋„๋ก ์„ค์ • ํ•˜๊ณ 

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mesh-to-egress-gateway
spec:
  hosts:
  - edition.cnn.com
  gateways:
  - mesh
  tls:
  - match:
    - port: 443
      sniHosts:
      - edition.cnn.com
    route:
    - destination:
        host: istio-egressgateway.istio-system.svc.cluster.local
        port:
          number: 443
EOF

๋‘๋ฒˆ์งธ ๊ฒƒ์€ Egress GW๊ฐ€ Forward ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์–ด๋””๋กœ ๊ฐˆ์ง€๋ฅผ ์„ค์ •ํ•œ๋‹ค.

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: egressgateway-to-external
spec:
  hosts:
  - edition.cnn.com
  gateways:
  - istio-egressgateway
  tls:
  - match:
    - port: 443
      sniHosts:
      - edition.cnn.com
    route:
    - destination:
        host: edition.cnn.com
        port:
          number: 443
EOF

๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉดโ€ฆ

์ด๋ ‡๊ฒŒ ํŠธ๋ž˜ํ”ฝ์ด Egress GW๋ฅผ ํ†ตํ•ด์„œ ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค!!

์™ธ๋ถ€ host์—๋„ DestinationRule ์ ์šฉํ•˜๊ธฐ

์‹ค์Šต์—์„œ ์“ฐ๊ณ  ์žˆ๋Š” edition.cnn.com์€ Service Mesh ๋‚ด๋ถ€์˜ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ž˜ DestinationRule์„ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” edition.cnn.com์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ Egress GW์˜ Envoy Proxy๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— DestinationRule์„ Egress GW์— ๊ฑธ์–ด์ค€๋‹ค๋ฉด, edition.cnn.com์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํŒฉ์—๋„ DR ๊ทœ์น™๋“ค์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋‹จ ๋ฐ”๋กœ Egress GW์— ์ ์šฉ๋œ DestinationRule๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž!!

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: egressgateway-for-cnn
spec:
  host: istio-egressgateway.istio-system.svc.cluster.local
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
EOF

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, Egress GW๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์— DestinationRule์ด ์ ์šฉ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘˜ ์ด์ƒ์˜ ํ„ฐ๋ฏธ๋„์—์„œ Egress GW๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด maxConnections์— ์ •์˜ํ•œ ์ˆซ์ž ๋งŒํผ์˜ Connection๋งŒ ์œ ์ง€๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” Drop ๋œ๋‹ค!!!

์ฆ‰, ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๊ฑฐ๋‹ค!!


Out-bound ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ์ •์ฑ… ์„ค์ •ํ•˜๊ธฐ

https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/#envoy-passthrough-to-external-services

istio๊ฐ€ ์ ์šฉ๋œ pod๋“ค์˜ ๋ชจ๋“  in/out ํŠธ๋ž˜ํ”ฝ์€ ํ•ด๋‹น Pod์˜ envoy sidecar๋ฅผ ํ†ตํ•ด ์ œ์–ด๋œ๋‹ค. istio๋Š” unknown host/service๋กœ ํ–ฅํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์˜ ๊ฒฝ์šฐ, ๊ทธ๋ƒฅ ํ˜๋ ค๋ณด๋‚ด๋Š”(Passthrough)๊ฒŒ ๊ธฐ๋ณธ ๋™์ž‘์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋•Œ์— ๋”ฐ๋ผ์„œ๋Š”(์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ•ํ•œ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค๋ฉด) ์ด๋Ÿฐ unknown ๋ชฉ์ ์ง€๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

Istio์—์„œ๋Š” ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์— 3๊ฐ€์ง€ ์ •์ฑ…์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค.

  1. mesh ๋‚ด์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ชฉ์ ์ง€๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋‘ ํ—ˆ์šฉํ•˜๊ธฐ
  2. ServiceEntry๋ฅผ ๊ตฌ์„ฑํ•œ ์™ธ๋ถ€ ๋ชฉ์ ์ง€๋งŒ ํ—ˆ์šฉํ•˜๊ธฐ
  3. ํŠน์ • IP ๋Œ€์—ญ์œผ๋กœ ๊ฐ€๋Š” ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ๋งŒ ํ—ˆ์šฉํ•˜๊ธฐ

isito ํด๋Ÿฌ์Šคํ„ฐ์˜ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ์˜ต์…˜

istio ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, IstioOperator์˜ meshConfig.outboundTrafficPolicy.mode ์˜ต์…˜์„ ์กฐ์ •ํ•ด์„œ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ „๋ฉด ํ—ˆ์šฉํ• ์ง€, ๋“ฑ๋กํ•œ ๊ฒƒ๋งŒ ํ—ˆ์šฉํ• ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ALLOW_ANY (default)
  • REGISTRY_ONLY

ALLOW_ANY๋Š” ์ „๋ฉด ํ—ˆ์šฉ์ด๋ฏ€๋กœ ์ด๋ฏธ ์•Œ ๊ฒƒ์ด๊ณ , ์•„๋ž˜ ์ปค๋งจ๋“œ๋กœ REGISTRY_ONLY๋กœ ์˜ต์…˜์„ ๋ฐ”๊พผ ํ›„, ์‹คํ—˜ํ•ด๋ณด์ž.

$ istioctl install \
  --set "spec.components.egressGateways[0].name=istio-egressgateway" \
  --set "spec.components.egressGateways[0].enabled=true" \
  --set meshConfig.outboundTrafficPolicy.mode=REGISTRY_ONLY

์•ž์—์„œ edition.cnn.com ์ฃผ์†Œ์— ๋Œ€ํ•ด์„œ๋Š” ์‹คํ—˜์„ ํ•ด๋ดค์œผ๋‹ˆ, ์ด๋ฒˆ์—๋Š” google.com์„ ๋“ฑ๋กํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ping์„ ๋‚ ๋ ค๋ณด์ž.

$ kubectl exec -it deploy/sleep -- sh
~ $ while true; do curl -s -o /dev/null https://google.com; done

Kiali๋กœ ํ™•์ธํ•˜๋ณด๋ฉด, BlackHoleCluster๋ผ๋Š” ์ด์ƒํ•œ ๊ณณ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋ชจ์•„์ ธ๋ฒ„๋ฆฐ๋‹ค!

์•„๋ž˜์™€ ๊ฐ™์ด ๋‹จ์ผ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, Connection reset by peer๋ผ๋Š” ์ด์ƒํ•œ ์—๋Ÿฌ๋„ ๋ฑ‰๋Š”๋‹ค.

์ด๋Ÿฐ ํ˜„์ƒ์€ google.com์„ ๋“ฑ๋กํ•ด์ฃผ์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ ๊ฑฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ServiceEntry๋กœ ๋“ฑ๋กํ•˜๊ณ  ๋‚˜๋ฉด, ๋”์ด์ƒ ํ•ด๋‹น ์—๋Ÿฌ๋Š” ๋œจ์ง€ ์•Š๋Š”๋‹ค!!

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: google
spec:
  hosts:
  - google.com
  ports:
  - number: 443
    name: tls
    protocol: TLS
  resolution: DNS
EOF

์•”ํŠผ ๋“ฑ๋ก๋œ ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ๋กœ๋งŒ ํŠธ๋ž˜ํ”ฝ์„ ํ˜๋ ค์•ผ ํ•œ๋‹ค๋ฉด, REGISTRY_ONLY ์˜ต์…˜์œผ๋กœ ์„ค์ •ํ•˜์ž!!


๋งบ์Œ๋ง

ํ•˜์•„โ€ฆ ์ •๋ง ServiceEntry์˜ ์ปจ์…‰ ์ž์ฒด๋Š” ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ Istio๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•œ๋‹ค๋Š” ๊ฑด๋ฐ, Egress Gateway๋ฅผ ๊ฐ™์ด ์“ฐ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ดํ•ด ํ•˜๋Š”๊ฒŒ ์ •๋ง ์–ด๋ ค์›Œ ์กŒ๋‹ค. ๋ถ„๋ช… ๋‚˜๋Š” Udemy ๊ฐ•์ขŒ๋ฅผ ๋‹ค ๋“ฃ๊ณ , ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” ๊ฑด๋ฐโ€ฆ

๋•๋ถ„์— VS, DR, Gateway๊นŒ์ง€ ๋‹ค์‹œ ๊ผผ๊ผผํžˆ ๊ณต๋ถ€ํ–ˆ๊ณ , ์ด์ œ๋Š” ์ด ์…‹์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ๊ฑด์ง€ ์ดํ•ด ํ•˜๊ธฐ ์‹œ์ž‘ ํ–ˆ๋‹ค!!

์ด์   Istio ๊ณต์‹ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๋“ค ์ข€ ์ฝ์–ด๋ณด๊ณ , ๋ฌธ์„œ ์ข€ ๊ผผ๊ผผํžˆ ์ฝ์–ด๋ณด๋ฉด์„œ ์‹œํ—˜ ์ค€๋น„๋ฅผ ๊ณ„์† ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์‹œํ—˜๊นŒ์ง€ ์ด์ œ D-16โ€ฆ ํ™”์ดํŒ…โ€ฆ! ๐ŸฅŠ