[k8s] CNI: Cilium (with k3s)

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

Cilium์€ ๊ทผ๋ž˜์— ๊ฐ€์žฅ ํ•ซํ•œ ์ฟ ๋ฒ„์šฉ ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‹ค. ๋น ๋ฅธ ์„ฑ๋Šฅ๊ณผ ํ›Œ๋ฃกํ•œ ๊ด€์ธก์„ฑ, ๋„คํŠธ์›Œํฌ ๋ถ€๊ฐ€๊ธฐ๋Šฅ๋“ค์„ ์žฅ์ ์œผ๋กœ ๋‚ด์„ธ์šด๋‹ค.

2018๋…„์— ๋‚˜์™”๊ณ , ๋น ๋ฅด๊ฒŒ CNI ํ™˜๊ฒฝ์„ ์žก์•„๋จน๊ณ  ์žˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ๋“ค์„ ์˜ฌ์ธ์›-์˜คํ”ˆ์†Œ์Šค๋กœ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ˜ํ”ˆ์†Œ์Šค๋ผ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‚ฌ์šฉ์ด ๊ฐ•์ œ๋˜๋Š” calico์˜ ๊ฐ•๋ ฅํ•œ ๋Œ€์•ˆ์œผ๋กœ ๋ถ€์ƒํ•˜๊ณ  ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” cilium์˜ ์—ญํ• ๊ณผ ๊ธฐ๋Šฅ. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ• ์ •๋„๋งŒ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.




ํŠน์ง•

๋‹ค๋ฅธ CNI ์Šคํƒ(ํŠนํžˆ calico)๊ณผ ์ฐจ๋ณ„ํ™”๋˜๋Š” ํŠน์ง•๋“ค์„ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


eBPF

์ปค๋„ ๊ธฐ๋Šฅ์ธ eBPF๋ฅผ ํ™œ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ„-๋…ธ๋“œ๊ฐ„ ํ†ต์‹  ๋“ฑ์„ ์•„์ฃผ ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
https://blog.naver.com/sssang97/223412427281


์ž์ฒด ๊ด€์ธก์„ฑ ๋„๊ตฌ

์ž์ฒด ๊ด€์ธก์„ฑ ๋„๊ตฌ์ธ hubble์„ ์ง€์›ํ•œ๋‹ค. ํŒจํ‚ท ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์‰ฝ๋‹ค.


์˜คํ”ˆ์†Œ์Šค

calico์ฒ˜๋Ÿผ ๊ธฐ๋Šฅ์œผ๋กœ ์žฅ๋‚œ์น˜๋Š” ๊ทธ๋Ÿฐ ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๊ณ , ์ค‘์š”ํ•œ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ณ ๊ธ‰๊ธฐ๋Šฅ์„ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฌผ๋ก  ์ด๊ฒƒ๋„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์†”๋ฃจ์…˜์ด ์žˆ๊ธด ํ•œ๋ฐ, ์–ด์ง€๊ฐ„ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค ์˜คํ”ˆ์†Œ์Šค๋กœ ํ’€์–ด๋†จ๋‹ค.




์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์—ญํ• 

  1. CNI์˜ ๊ธฐ๋ณธ ์—ญํ• : Pod์— IP๋ฅผ ๋ถ™์ด๊ณ  ๋ผ์šฐํŒ… ์„ค์ •๊นŒ์ง€ ํ•ด์ค€๋‹ค.
  2. datapath ์ฑ…์ž„: ๋…ธ๋“œ๊ฐ„ ํ†ต์‹ ์„ ์ฑ…์ž„์ง„๋‹ค. (flannel๋ฅผ ๋Œ€์ฒด)
  3. kube-proxy ๋Œ€์ฒด: kube-proxy๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. iptable ๊ด€๋ฆฌ๋ฅผ ์ฑ…์ž„์ง„๋‹ค.
  4. Service LB ์ฑ…์ž„: ๊ธฐ๋ณธ ์„œ๋น„์Šค ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ ๋™์ž‘๊ณผ ๋ถ„์‚ฐ๋„ ์ฑ…์ž„์ง„๋‹ค. (MetalLB๋„ ๋Œ€์ฒด ๊ฐ€๋Šฅ)
  5. NetworkPolicy: NetworkPolicy๋ฅผ ์ด์šฉํ•œ ๋ฐฉํ™”๋ฒฝ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.
  6. Service Mesh: ์ ๋‹นํ•œ ์ˆ˜์ค€์˜ Mesh ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. (istio๋ฅผ ๋ถ€๋ถ„ ๋Œ€์ฒด)
  7. Ingress: ์ž์ฒด Ingress ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  8. Egress: Egress SNAT ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  9. Egress Gateway: Egress NAT ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋šซ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

ํฐ ๋ฉ์–ด๋ฆฌ๊ฐ€ ์ด ์ •๋„๊ณ , ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.




cilium CLI ์„ค์น˜ (์„ ํƒ)

cilium ์ „์šฉ CLI๋ฅผ ์„ค์น˜ํ•˜๋ฉด cilium ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜๋‚˜ ๊ด€๋ฆฌ ๋“ฑ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค๋งŒ ์ด๊ฒŒ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‹ค. ์ด๊ฑฐ ์—†์ด๋„ ์„ค์น˜ํ•˜๊ณ  ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์— cilium์„ ์„ค์น˜ํ•˜๋Š”๊ฑฐ๋ผ๋ฉด ์ด๊ฑด ๋ณ„๋กœ ๋„์›€์ด ์•ˆ๋œ๋‹ค.

bash์—์„œ

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}

fish์—์„œ

set CILIUM_CLI_VERSION (curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
set CLI_ARCH amd64
if test (uname -m) = "aarch64"
    set CLI_ARCH arm64
end

curl -LO https://github.com/cilium/cilium-cli/releases/download/$CILIUM_CLI_VERSION/cilium-linux-$CLI_ARCH.tar.gz
curl -LO https://github.com/cilium/cilium-cli/releases/download/$CILIUM_CLI_VERSION/cilium-linux-$CLI_ARCH.tar.gz.sha256sum

sha256sum --check cilium-linux-$CLI_ARCH.tar.gz.sha256sum
sudo tar -C /usr/local/bin -xzvf cilium-linux-$CLI_ARCH.tar.gz
rm cilium-linux-$CLI_ARCH.tar.gz cilium-linux-$CLI_ARCH.tar.gz.sha256sum

์„ค์น˜ํ•˜๊ณ 


cilium version --client

์ด๋ ‡๊ฒŒ ์‹คํ–‰์ด ๋˜๋ฉด ๋œ๋‹ค.




์‹ ๊ทœ ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜ํ•˜๊ธฐ

๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€, ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ• ๋•Œ CNI๋ฅผ cilium์œผ๋กœ ๋ชป๋ฐ•๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด๊ฒŒ ๊ธฐ์กด CNI๋‚˜ datapath๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋‹จ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ฑ„๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•œ๋‹ค.

k3s์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='--flannel-backend=none --disable-network-policy' sh -

๋จผ์ € ๋‹ค ๋น„ํ™œ์„ฑํ™”ํ•œ์ฑ„๋กœ ๊น”๊ณ 

cilium CLI๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
cilium install 1.20.2

๋‹ค๋งŒ ์ด ๋ฐฉ์‹์€ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ์„ธํŒ…๊ฐ’ ์กฐ์ ˆ๋„ ์ข€ ๋ถˆํŽธํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.




๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์— ๊น”๊ธฐ (k3s)

๊ธฐ์กด k3s ํด๋Ÿฌ์Šคํ„ฐ์— cilium์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ๋‹ค.
์ด๊ฑด ๋‹ค์šดํƒ€์ž„์„ ์ข€ ๊ฐ์ˆ˜ํ•ด์•ผํ•œ๋‹ค.

๋จผ์ € control plane ์—์ด์ „ํŠธ์˜ ์„ค์ •๊ฐ’์„ ๋ฐ”๊พธ๊ณ  systemd๋กœ ์žฌ๋ถ€ํŒ…์„ ํ•ด์ค€๋‹ค.

sudo mkdir -p /etc/rancher/k3s
sudo vim /etc/rancher/k3s/config.yaml

...
flannel-backend: none
disable-network-policy: true
disable-kube-proxy: true

์—์ด์ „ํŠธ ๋…ธ๋“œ๋Š” ๊ฑด๋“ค ํ•„์š” ์—†๋‹ค. ์ปจํŠธ๋กคํ”Œ๋ ˆ์ธ๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.

sudo systemctl restart k3s # ๋งˆ์Šคํ„ฐ๋…ธ๋“œ

์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‹ค๋ฉด CLI๋Š” ์“ธ๋ชจ์—†๊ณ , helm์„ ํ†ตํ•ด์„œ ์„ค์น˜ํ•˜๋Š”๊ฒŒ ์ œ์ผ ํŽธํ•˜๋‹ค.
๋จผ์ € values๋ฅผ ์ค€๋น„ํ•˜๊ณ , ์•ˆ์— IP๋ฅผ ์ฑ„์›Œ๋‘”๋‹ค.

# โ”€โ”€ kube-proxy ๊ต์ฒด โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# Egress Gateway ์ „์ œ์กฐ๊ฑด. BPF ๋กœ Service โ†’ Backend ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์ˆ˜ํ–‰.
kubeProxyReplacement: true

# kube-proxy ๊ฐ€ ์—†์œผ๋ฏ€๋กœ Cilium agent ๊ฐ€ API ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์•Œ์•„์•ผ ํ•จ.
# control-plane์˜ LAN IP + k3s ๊ธฐ๋ณธ ํฌํŠธ.
k8sServiceHost: 192.168.88.202 # ์•Œ์•„์„œ ๋ฐ”๊พธ์‹œ์˜ค
k8sServicePort: 6443

# โ”€โ”€ CNI ๊ต์ฒด ๋ชจ๋“œ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# ์„ค์น˜ ์‹œ ๊ธฐ์กด flannel CNI ์„ค์ • ํŒŒ์ผ (/etc/cni/net.d/*) ์„ Cilium ๊ฒƒ์œผ๋กœ ๊ต์ฒด.
cni:
  exclusive: true

# โ”€โ”€ IPAM โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# "kubernetes" = ๊ฐ ๋…ธ๋“œ์˜ .spec.podCIDR ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ.
# ๊ธฐ์กด ํ• ๋‹น (macmini-1: 10.42.0.0/24, macmini-2: 10.42.1.0/24,
# mini-pc-1: 10.42.2.0/24) ์œ ์ง€.
ipam:
  mode: kubernetes

# โ”€โ”€ BPF โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# masquerade: Pod โ†’ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ SNAT ๋ฅผ iptables ๋Œ€์‹  BPF ๋กœ. Egress GW ํ•„์ˆ˜์กฐ๊ฑด.
# distributedLRU: 1.17+ ํ…œํ”Œ๋ฆฟ์ด nil ์ฒดํฌ ์•ˆ ํ•ด์„œ ๋ช…์‹œ ํ•„์š”. ๊ธฐ๋ณธ off ์œ ์ง€.
bpf:
  masquerade: true
  distributedLRU:
    enabled: false

# โ”€โ”€ Egress Gateway โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ. CiliumEgressGatewayPolicy ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด ์ž‘์—… ์•ˆ ํ•จ.
# ์„ค์น˜ ํ›„ ์„œ๋น„์Šค๋ณ„๋กœ policy + pod label ๋กœ opt-in.
egressGateway:
  enabled: true

# โ”€โ”€ L7 Proxy โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# Hubble L7 ๋ฉ”ํŠธ๋ฆญ/HTTP NetworkPolicy ์šฉ.
l7Proxy: true

# โ”€โ”€ Standalone DNS Proxy โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# 1.17+ ํ…œํ”Œ๋ฆฟ์ด nil ์ฒดํฌ ์•ˆ ํ•ด์„œ ๋ช…์‹œ ํ•„์š”. ๊ธฐ๋ณธ off ์œ ์ง€.
standaloneDnsProxy:
  enabled: false

# โ”€โ”€ Hubble (๊ด€์ธก) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
hubble:
  enabled: true
  relay:
    enabled: true
    # 1.17+ ํ…œํ”Œ๋ฆฟ์ด logOptions.format nil ์ฒดํฌ ์•ˆ ํ•ด์„œ ๋ช…์‹œ ํ•„์š”.
    logOptions:
      format: json
  ui:
    enabled: true
  metrics:
    enabled:
      - dns
      - drop
      - tcp
      - flow
      - port-distribution
      - icmp

๊ทธ๋ฆฌ๊ณ  ์ฆ‰์‹œ ์„ค์น˜ํ•œ๋‹ค.

helm repo add cilium https://helm.cilium.io/
helm repo update
helm install cilium cilium/cilium --namespace kube-system --version 1.20.2 -f values.yaml

๊ทธ๋ฆฌ๊ณ  pod๊ฐ€ ์ž˜ ์Šค์ผ€์ค„๋ง๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋”ธ๋ ค์˜ค๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œ๋ฒ• ๋งŽ๋‹ค.

kubectl get all -A -l app.kubernetes.io/part-of=cilium

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๊ธฐ์กด Pod๋“ค๋„ ์žฌ์‹คํ–‰ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
๊ธฐ์กด Pod๋“ค์€ ๊ตฌ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต(flannel ๋“ฑ)์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋„คํŠธ์›Œํฌ ์•ˆ์ •์„ฑ์ด ํ™•์‹คํžˆ ๊ฒ€์ฆ๋˜๋ฉด, ๊ทธ ๋’ค์— ์žฌ์‹คํ–‰์„ ๊ฐ•์ œ๋กœ ๋•Œ๋ ค์ค€๋‹ค.

for ns in argocd kube-system envoy-gateway-system observability curhouse app arc-systems arc-runners default; do
  echo "=== $ns ==="
  kubectl -n $ns rollout restart deploy,ds,sts 2>/dev/null | grep -v "no resources"
done


ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: ๋„คํŠธ์›Œํฌ ํ™•์ธ

์ž˜ ์„ค์น˜๋˜์—ˆ๋‹ค๋ฉด ์™ธ๋ถ€์ ‘์†๊นŒ์ง€ ๋‹ค ์ž˜ ๋˜์–ด์•ผํ•œ๋‹ค. ๋‹ค์Œ์€ DNS ์ฒดํฌ์šฉ ์Šคํฌ๋ฆฝํŠธ๋‹ค.

kubectl run t --rm -i --restart=Never --image=alpine:3.20 -- sh -c '
  echo "-- cluster DNS --"
  nslookup kubernetes.default.svc.cluster.local 2>&1 | tail -4
  echo "-- external DNS --"
  nslookup github.com 2>&1 | tail -3
  echo "-- external TCP --"
  nc -zvw3 github.com 443 2>&1
'

ํ˜น์€, cilium CLI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค. ์ด๊ฑด ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ๊ฑด์ „์„ฑ์„ ํ™•์ธํ•ด์ค€๋‹ค.
์™ธ๋ถ€ ์ธํ„ฐ๋„ท ํ†ต์‹ , ๋…ธ๋“œ๊ฐ„ ํ†ต์‹ , pod๊ฐ„ ํ†ต์‹ ์„ ํฌํ•จํ•ด์„œ ๊ท€์ฐฎ์€ ๋ชจ๋“  ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฝค ๊ดœ์ฐฎ๋‹ค.

cilium connectivity test --test-concurrency 2

๊ทผ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์˜๊ฒŒ ์ •๋ฆฌํ•ด์ฃผ์ง„ ์•Š๋Š”๋‹ค.



ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: flannel ์ž”์กด ์ œ๊ฑฐ

๊ฐ€๋” flannel์ด๋‚˜ ์˜ˆ์ „ cilium์˜ ๋ถ€์‚ฐ๋ฌผ์ด ๊ตฌ์„ฑ์„ ๋ฐฉํ•ดํ•ด์„œ ๋ป‘๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
๊ทธ๋Ÿด ๋•Œ๋Š” ์ ๋‹นํžˆ ๊ธฐ์กด ์„ธํŒ…์„ ์ง€์›Œ์ค˜์•ผ ํ•œ๋‹ค. ๋‹ค์Œ์€ ์Šคํฌ๋ฆฝํŠธ์„ฑ daemonset์ด๋‹ค.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cilium-cleanup
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: cilium-cleanup
  template:
    metadata:
      labels:
        app: cilium-cleanup
    spec:
      hostNetwork: true
      tolerations:
        - operator: Exists
      containers:
      - name: c
        image: alpine:3.20
        command:
        - sh
        - -c
        - |
          chroot /host sh -c '
            # Cilium ๋””๋ฐ”์ด์Šค
            ip link del cilium_vxlan 2>/dev/null
            ip link del cilium_net 2>/dev/null
            ip link del cilium_host 2>/dev/null
            ip link del cilium_wg0 2>/dev/null
            # flannel ๋””๋ฐ”์ด์Šค
            ip link del flannel.1 2>/dev/null
            ip link del cni0 2>/dev/null
            # cni0 ์— ๋ถ™์–ด์žˆ๋˜ veth ๋“ค
            for v in $(ip -o link show | awk -F: "/@if[0-9]+/ {print \$2}" | awk -F@ "{print \$1}" | grep -E "^(veth|lxc)"); do
              ip link del $v 2>/dev/null
            done
            # ์ƒํƒœ ๋””๋ ‰ํ† ๋ฆฌ + BPF fs + CNI ์„ค์ •
            rm -rf /var/run/cilium /var/lib/cilium
            rm -rf /sys/fs/bpf/tc /sys/fs/bpf/cilium
            rm -f /etc/cni/net.d/*flannel* /etc/cni/net.d/*cilium*
          '
          echo "done on $(hostname)"
          sleep 3600
        securityContext:
          privileged: true                                        Jump to bottom (ctrl+End) โ†“
        volumeMounts:
        - name: host                                              Jump to bottom (ctrl+End) โ†“
          mountPath: /host
      volumes:                                                    Jump to bottom (ctrl+End) โ†“
      - name: host
        hostPath:                                                 Jump to bottom (ctrl+End) โ†“
          path: /



๊ด€์ธก์„ฑ ๋„๊ตฌ: hubble

cilium์€ ๋ผ์šฐํŒ…์„ eBPF ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ๊ทธ ๊ณผ์ •์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ์ดํ„ฐ๋„ ํšจ์œจ์ ์œผ๋กœ ์Œ“์•„์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Pod๊ฐ„ ๋„คํŠธ์›Œํฌ ์ด๋™์„

์„œ๋น„์Šค๋ฅผ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์žˆ๋Š”๋ฐ

์—ฌ๊ธฐ์„œ ์›น UI๋Š” hubble-ui๋ผ๋Š” ๋…€์„์ด๋‹ค.

ํฌํŠธํฌ์›Œ๋”ฉํ•˜๊ฑฐ๋‚˜ ํ„ฐ๋„ ์—ด์–ด์„œ ๋“ค์–ด๊ฐ€๋ฉด

์ด๋ ‡๊ฒŒ ๋œจ๋Š”๋ฐ


๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ณ ๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ ํ•œ๋ˆˆ์— ๊ทธ๋ž˜ํ”„๋กœ ๋ณด์—ฌ์ค€๋‹ค.
์•„๋ž˜์—์„œ๋Š” ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์ด ๋น ๋ฅด๊ฒŒ ์˜ฌ๋ผ์˜จ๋‹ค.

์ข€ ๋””ํ…Œ์ผํ•˜๊ฒŒ ์กฐ์ •ํ•ด์„œ ๋ณด๊ณ ์‹ถ๋‹ค๋ฉด hubble-CLI๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฆด๋ ˆ์ด ์—ด์–ด์„œ ๋ณด๋ฉด ๋œ๋‹ค.
์ž์„ธํ•œ ๊ฒƒ์€ ๋ณ„๋„ ํฌ์ŠคํŠธ์—์„œ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๊ฒ ๋‹ค.



์ฐธ์กฐ
https://cilium.io/
https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/
https://blog.naver.com/sssang97/223412427281

Search