Ssoon

[9์ฃผ์ฐจ] Ambient Mode : Ztunnel ํŠธ๋ž˜ํ”ฝ ๋ฆฌ๋””๋ ‰์…˜ ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[9์ฃผ์ฐจ] Ambient Mode : Ztunnel ํŠธ๋ž˜ํ”ฝ ๋ฆฌ๋””๋ ‰์…˜

๊ตฌ๊ตฌ๋‹ฌ์Šค 2025. 6. 3. 19:11

๐Ÿš€ ztunnel Traffic Redirection ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

  • Istio์˜ ambient mesh์—์„œ ztunnel์€ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. 

๐Ÿ› ๏ธ Traffic Redirection์ด๋ž€?

  • Ambient mesh์—์„œ traffic redirection์€ pod๋กœ ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ztunnel proxy๋กœ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ztunnel์€ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„ ์•”ํ˜ธํ™”ํ•˜๊ณ  ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋˜๋ฉฐ, ztunnel์„ ์šฐํšŒํ•˜๋ฉด ์ •์ฑ…๋„ ์šฐํšŒ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด ๊ณผ์ •์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Traffic redirection์€
pod ํŠธ๋ž˜ํ”ฝ์„ ztunnel๋กœ ๋ณด๋‚ด ์•”ํ˜ธํ™”์™€ ์ •์ฑ… ์ ์šฉ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ In-Pod Traffic Redirection ๋ชจ๋ธ

  • Ambient mesh์—์„œ๋Š” pod ๋‚ด๋ถ€์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„๋Š” ๋ฐฉ์‹์œผ๋กœ redirection์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ istio-cni node agent์™€ ztunnel proxy๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์˜ ์žฅ์ ์€ ๊ธฐ์กด Kubernetes CNI ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์ถฉ๋Œ ์—†์ด ๋™์ž‘ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ Pod๊ฐ€ Mesh์— ์ถ”๊ฐ€๋˜๋Š” ๊ณผ์ •

  • istio-cni๊ฐ€ pod ์ƒ์„ฑ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , pod๊ฐ€ ambient mesh์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • istio-cni๊ฐ€ pod์˜ ๋„คํŠธ์›Œํฌ namespace์— ๋“ค์–ด๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ztunnel์ด pod์˜ ๋„คํŠธ์›Œํฌ namespace์—์„œ ํฌํŠธ(15008, 15006, 15001)๋ฅผ ์—ด๊ณ  ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค
  • Istio Ambient Mesh์—์„œ ์ƒˆ๋กœ์šด Pod๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ, Istio CNI์™€ ztunnel์ด ์–ด๋–ป๊ฒŒ ๊ทธ Pod์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š”์ง€๋ฅผ ์„ค๋ช…

https://istio.io/latest/docs/ambient/architecture/traffic-redirection/

๐Ÿš€ Pod๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ธฐ๋ฉด ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ์š”?

  1. istio-cni๊ฐ€ ์ƒˆ Pod๋ฅผ ๊ฐ์ง€ํ•ด์š”
    ๐Ÿ‘‰ “์˜ค! Ambient Mesh ๋ผ๋ฒจ์ด ๋ถ™์€ Pod๊ฐ€ ์ƒ๊ฒผ๋„ค?”
  2. ๋„คํŠธ์›Œํฌ ์กฐ์ • ์ž‘์—… ์‹œ์ž‘!
    • istio-cni๊ฐ€ ํ•ด๋‹น Pod์˜ ๋„คํŠธ์›Œํฌ ๊ณต๊ฐ„์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ:
      ๐Ÿ‘‰ “iptables๋กœ ํŠธ๋ž˜ํ”ฝ์„ ztunnel๋กœ ๋ณด๋‚ด๊ฒŒ ์„ค์ •ํ•ด์ค„๊ฒŒ์š”!”
  3. ztunnel์—๊ฒŒ ์•Œ๋ฆผ
    • istio-cni๊ฐ€ ztunnel์—๊ฒŒ ์•Œ๋ ค์ค˜์š”:
      ๐Ÿ‘‰ “์ด Pod์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ค€๋น„ ํ•ด์ค˜!”
  4. ztunnel์ด ์ค€๋น„ ์™„๋ฃŒ
    • ztunnel์€ ๊ทธ Pod ์•ˆ์— ๋“ค์–ด๊ฐ€์„œ “๋ฆฌ์Šค๋‹ ์†Œ์ผ“”์„ ๋งŒ๋“ค์–ด์š”.
      ๐Ÿ‘‰ “์ด์ œ ์ด Pod์˜ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ ๋‚ด๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด!”

istio-cni์™€ ztunnel์ด ํ˜‘๋ ฅํ•˜์—ฌ pod ํŠธ๋ž˜ํ”ฝ์„ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„

  • Pod ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์€ ztunnel์„ ๊ฑฐ์ณ mTLS๋กœ ์•”ํ˜ธํ™”๋œ HBONE ํ„ฐ๋„์„ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด pod๋Š” ๋ณด์•ˆ ์ •์ฑ…์„ ์ ์šฉ๋ฐ›์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋ฅผ ์ „ํ˜€ ์ธ์ง€ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
  • Istio Ambient Mesh์—์„œ ztunnel์ด ํŠธ๋ž˜ํ”ฝ์„ ์–ด๋–ป๊ฒŒ ๊ฐ€๋กœ์ฑ„๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์„ค๋ช…

https://istio.io/latest/docs/ambient/architecture/traffic-redirection/

๐ŸŸฉ 1. ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ (Inbound) - ์˜ˆ: ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ์•ฑ์„ ํ˜ธ์ถœํ•  ๋•Œ

๋Œ€์ƒ: Destination Workload Pod

  1. ์™ธ๋ถ€์—์„œ Pod๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์€ ๋จผ์ € 15008 ํฌํŠธ๋ฅผ ํƒ€๊ณ  ztunnel๋กœ ๋„์ฐฉํ•ด์š”.
  2. iptables๊ฐ€ ์ด ํŠธ๋ž˜ํ”ฝ์„ ztunnel ๋‚ด๋ถ€๋กœ ๋ณด๋‚ด์„œ "๋””์ฝ”๋”ฉ/์ •์ฑ… ํ™•์ธ" ๋“ฑ์„ ํ•˜๊ฒŒ ํ•ด์š”.
  3. ztunnel์€ ํŠธ๋ž˜ํ”ฝ์„ ์ง„์งœ ์•ฑ์ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ (์˜ˆ: 80๋ฒˆ ํฌํŠธ)๋กœ ๋ณด๋‚ด์š”.

โžก๏ธ ์š”์•ฝ: ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์€ ๋จผ์ € ztunnel์„ ๊ฑฐ์ณ์„œ ์•ฑ์œผ๋กœ ์ „๋‹ฌ๋จ


๐ŸŸฆ 2. ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ (Outbound) - ์˜ˆ: ๋‚ด ์•ฑ์ด ์™ธ๋ถ€๋กœ ํ˜ธ์ถœํ•  ๋•Œ

๋Œ€์ƒ: Source Workload Pod

  1. ์•ฑ์—์„œ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์ƒ๊ธฐ๋ฉด, iptables๊ฐ€ ๊ทธ๊ฑธ 15001 ztunnel ํฌํŠธ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•ด์š”.
  2. ztunnel์€ ๊ทธ ํŠธ๋ž˜ํ”ฝ์— ์•”ํ˜ธํ™”(encap) ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ•˜๊ณ ,
  3. ์™ธ๋ถ€(์˜ˆ: 5151 ํฌํŠธ๋กœ ํ†ต์‹ ํ•˜๋Š” ์„œ๋น„์Šค)๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

โžก๏ธ ์š”์•ฝ: ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ztunnel์„ ๊ฑฐ์ณ์•ผ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Œ

ํŠธ๋ž˜ํ”ฝ์€ ztunnel์„ ํ†ตํ•ด mTLS๋กœ ์•”ํ˜ธํ™”๋˜์–ด ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ•ต๏ธ‍โ™‚๏ธ Traffic Redirection ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•

  • Traffic redirection์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ztunnel ๋กœ๊ทธ ํ™•์ธ

  • ztunnel ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋ฉด pod๊ฐ€ mesh์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€, ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
kubectl logs ds/ztunnel -n istio-system  | grep inpod
Found 3 pods, using pod/ztunnel-hl94n
inpod_enabled: true
inpod_uds: /var/run/ztunnel/ztunnel.sock
inpod_port_reuse: true
inpod_mark: 1337
2024-02-21T22:01:49.916037Z  INFO ztunnel::inpod::workloadmanager: handling new stream
2024-02-21T22:01:49.919944Z  INFO ztunnel::inpod::statemanager: pod WorkloadUid("1e054806-e667-4109-a5af-08b3e6ba0c42") received netns, starting proxy
2024-02-21T22:01:49.925997Z  INFO ztunnel::inpod::statemanager: pod received snapshot sent
2024-02-21T22:03:49.074281Z  INFO ztunnel::inpod::statemanager: pod delete request, draining proxy
2024-02-21T22:04:58.446444Z  INFO ztunnel::inpod::statemanager: pod WorkloadUid("1e054806-e667-4109-a5af-08b3e6ba0c42") received netns, starting proxy
  • ๋กœ๊ทธ์—์„œ inpod_enabled: true์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋ฉด ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด ํ™œ์„ฑํ™”๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ztunnel ๋กœ๊ทธ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†Œ์ผ“ ์ƒํƒœ ํ™•์ธ

  • ํฌํŠธ 15001, 15006, 15008์ด ์—ด๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
kubectl debug $(kubectl get pod -l app=curl -n ambient-demo -o jsonpath='{.items[0].metadata.name}') -it -n ambient-demo  --image nicolaka/netshoot  -- ss -ntlp
Defaulting debug container name to debugger-nhd4d.
State  Recv-Q Send-Q Local Address:Port  Peer Address:PortProcess
LISTEN 0      128        127.0.0.1:15080      0.0.0.0:*
LISTEN 0      128                *:15006            *:*
LISTEN 0      128                *:15001            *:*
LISTEN 0      128                *:15008            *:*
  • ์ถœ๋ ฅ์—์„œ ํ•ด๋‹น ํฌํŠธ๊ฐ€ LISTEN ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.

์†Œ์ผ“ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด ztunnel ํฌํŠธ๊ฐ€ ์—ด๋ ค ์žˆ๋Š”์ง€ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

iptables ๊ทœ์น™ ํ™•์ธ

  • Pod ๋‚ด๋ถ€์˜ iptables ๊ทœ์น™์„ ํ™•์ธํ•ด ํŠธ๋ž˜ํ”ฝ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์„ค์ •์„ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.
$ kubectl debug $(kubectl get pod -l app=curl -n ambient-demo -o jsonpath='{.items[0].metadata.name}') -it --image gcr.io/istio-release/base --profile=netadmin -n ambient-demo -- iptables-save
Defaulting debug container name to debugger-m44qc.
# Generated by iptables-save
*mangle
:PREROUTING ACCEPT [320:53261]
:INPUT ACCEPT [23753:267657744]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [23352:134432712]
:POSTROUTING ACCEPT [23352:134432712]
:ISTIO_OUTPUT - [0:0]
:ISTIO_PRERT - [0:0]
-A PREROUTING -j ISTIO_PRERT
-A OUTPUT -j ISTIO_OUTPUT
-A ISTIO_OUTPUT -m connmark --mark 0x111/0xfff -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A ISTIO_PRERT -m mark --mark 0x539/0xfff -j CONNMARK --set-xmark 0x111/0xfff
-A ISTIO_PRERT -s 169.254.7.127/32 -p tcp -m tcp -j ACCEPT
-A ISTIO_PRERT ! -d 127.0.0.1/32 -i lo -p tcp -j ACCEPT
-A ISTIO_PRERT -p tcp -m tcp --dport 15008 -m mark ! --mark 0x539/0xfff -j TPROXY --on-port 15008 --on-ip 0.0.0.0 --tproxy-mark 0x111/0xfff
-A ISTIO_PRERT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ISTIO_PRERT ! -d 127.0.0.1/32 -p tcp -m mark ! --mark 0x539/0xfff -j TPROXY --on-port 15006 --on-ip 0.0.0.0 --tproxy-mark 0x111/0xfff
COMMIT
# Completed
# Generated by iptables-save
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [175:13694]
:POSTROUTING ACCEPT [205:15494]
:ISTIO_OUTPUT - [0:0]
-A OUTPUT -j ISTIO_OUTPUT
-A ISTIO_OUTPUT -d 169.254.7.127/32 -p tcp -m tcp -j ACCEPT
-A ISTIO_OUTPUT -p tcp -m mark --mark 0x111/0xfff -j ACCEPT
-A ISTIO_OUTPUT ! -d 127.0.0.1/32 -o lo -j ACCEPT
-A ISTIO_OUTPUT ! -d 127.0.0.1/32 -p tcp -m mark ! --mark 0x539/0xfff -j REDIRECT --to-ports 15001
COMMIT
  • ์ถœ๋ ฅ์—์„œ ํŠธ๋ž˜ํ”ฝ์ด ํฌํŠธ 15008(HBONE), 15006(plaintext), 15001(egress)๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

iptables ๊ทœ์น™์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ํ•ต์‹ฌ ์š”์•ฝ

  • Traffic redirection์€ pod ํŠธ๋ž˜ํ”ฝ์„ ztunnel๋กœ ๋ณด๋‚ด ์•”ํ˜ธํ™”์™€ ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • istio-cni์™€ ztunnel์ด ํ˜‘๋ ฅํ•˜์—ฌ pod์˜ ๋„คํŠธ์›Œํฌ namespace์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ์€ ztunnel์„ ๊ฑฐ์ณ mTLS๋กœ ์•”ํ˜ธํ™”๋œ HBONE ํ„ฐ๋„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋””๋ฒ„๊น…์€ ztunnel ๋กœ๊ทธ, ์†Œ์ผ“ ์ƒํƒœ, iptables ๊ทœ์น™ ํ™•์ธ์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
Comments