[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(4) - Gateway API๋กœ ๋ฐฐํฌํ•˜๊ธฐ

2025. 11. 19. 10:47ยท๐Ÿณ Docker & Kubernetes
728x90

์ด๋ฒˆ์— ์—…๋ฌด๊ณผ์ •์—์„œ ์ผ๋˜ ํˆด๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด์„œ k8s ์›น ๋ฐฐํฌ๋ฅผ ์ž‘๋…„์— ํ–ˆ๋˜ ๊ธฐ์–ต์„ ๋˜์‚ด๋ ค ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด์„œ ํฌ์ŠคํŒ…ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋Š” DB ์„ค์ •์— ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ PV, PVC, configmap ๋“ฑ ๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” kubernetes์˜ ๋„คํŠธ์›Œํ‚น์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ณ , ingress์™€ gateway์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ , ๋‚˜์˜ ์‚ฝ์งˆ(...)์„ ๊ธฐ๋กํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋ชฉํ‘œ

  • GKE(Google Kubernetes Engine)์™€ GCE(Google Compute Engine) ๋“ฑ์„ ํ™œ์šฉํ•œ ํ’€์Šคํƒ ์›น ์„œ๋น„์Šค ๋ฐฐํฌํ•˜๊ธฐ
    1. docker file ๊ตฌ์„ฑํ•˜๊ธฐ
    2. kubectl ํ™œ์šฉํ•˜๊ธฐ
    3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์„ฑ์— ๊ด€ํ•œ ์ดํ•ด ๋ฐ ์ ์šฉ
      • Deployment
      • StatefulSet
      • Persistent Volume
      • Service
      • Gateway 

 

1. Kubernetes ๋„คํŠธ์›Œํฌ

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ๋„คํŠธ์›Œํฌ ์ •๋ฆฌ

Kubernetes Network

medium.com

  • ์œ„ ๊ธ€์„ ์ฐธ๊ณ ํ•ด ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆœ์„œ๋กœ ๋”ฐ์ง€๋ฉด gateway๋ฅผ ์ ์šฉํ•˜๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€ ๋„ˆ๋ฌด ์•ˆ๋ผ์„œ ๋„คํŠธ์›Œํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ํ™•์ธํ–ˆ๋‹ค๊ณ  ๋ณด๋Š” ๊ฒƒ์ด ์˜ณ์€๋ฐ, ๋‚ด๊ฐ€ ์ค‘์ ์ ์œผ๋กœ ๋ณธ ๊ฒƒ์€ ๋‹ค์„ฏ ๊ฐ€์ง€์ด๋‹ค.

A. Docker container ๊ฐ„์˜ ๋„คํŠธ์›Œํ‚น

  • ๋„์ปค์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ container๊ฐ€ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€ ip ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜์˜ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์— ๋ฌถ์—ฌ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑธ ํ†ตํ•ด์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ex) eth0 = 10.100.0.2 ์ผ ๋•Œ, docker network interface = 172.17.0.1 ์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ์ด๋•Œ container 1 = 172.17.0.2  /  container 2 = 172.17.0.3
    • ์ด๋ ‡๊ฒŒ docker network interface์— ๋ฌถ์ธ ์ฑ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ip ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

 B. K8S pod ๋‚ด๋ถ€์˜ ๋„คํŠธ์›Œํ‚น

  • kubernetes์˜ pod๋ฅผ ๋ณด๋ฉด ํ•˜๋‚˜์˜ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์— ๋‘ ๊ฐœ์˜ container๊ฐ€ ๋™์‹œ์— ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค(ip ์ฃผ์†Œ๊ฐ™์Œ).
  • ๋”ฐ๋ผ์„œ pod ๋‚ด๋ถ€์—์„œ๋Š” port ๋ฒˆํ˜ธ๋กœ ์„œ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. 
  • pod์— ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ํŠน์ˆ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ pause ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ด ์ปจํ…Œ์ด๋„ˆ๋Š” pod๋งˆ๋‹ค ์กด์žฌํ•œ๋‹ค.

 

C. Pod ๊ฐ„์˜ ๋„คํŠธ์›Œํ‚น

  • kubernetes์—์„œ kubenet์ด๋ผ๋Š” ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜๊ธด ํ•˜์ง€๋งŒ CNI ์ŠคํŽ™์„ ์ค€์ˆ˜ํ•˜๋Š” ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค.
  • ๊ฐ๊ฐ์˜ pod๋Š” ๊ณ ์œ ํ•œ ip ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋”ฐ๋ผ์„œ kubenet ํ˜น์€ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(ํ”Œ๋Ÿฌ๊ทธ์ธ)์„ ์‚ฌ์šฉํ•ด์„œ ip๋กœ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์•„์˜ˆ Node๊ฐ€ ๋‹ค๋ฅธ pod์˜ ๊ฒฝ์šฐ์—๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ๊ฑฐ์ณ์•ผํ•œ๋‹ค.

 

D. Pod to Service ๋„คํŠธ์›Œํ‚น

  • ์ง€๋‚œ ๋ฒˆ์—๋„ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ์ด pod๋Š” ๊ณ„์† ๋ณ€ํ•˜๊ณ  ๋Œ€์ฒด๋˜๊ธฐ ์‰ฌ์šฐ๋ฏ€๋กœ pod to pod ์—ฐ๊ฒฐ์—๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ์ƒˆ๋กœ ์ƒ์„ฑ๋์„ ๋•Œ ์ด์ „๊ณผ ip๊ฐ€ ๊ฐ™์„ ๊ฒƒ์ด๋ž€ ๋ณด์žฅ๋„ ์—†๊ณ (statefulset์ด ์•„๋‹ˆ๋ผ๋ฉด)
  • ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋กœ reverse proxy ํ˜น์€ loadbalancer๋ฅผ ์˜ฌ๋ ค์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์—์„œ proxy๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด ์„œ๋ฒ„ ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์‚ด์•„์žˆ๋Š” pod๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • pod์™€ ๋™์ผํ•˜๊ฒŒ service๋„ ๊ฐ€์ƒ ip์ธ๋ฐ, pod ๋„คํŠธ์›Œํฌ๋Š” ๊ฐ€์‚ฌ์•„ ์ด๋”๋„ท ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์–ด์„œ ifconfig๊ฐ€ ๋™์ž‘ํ•˜์ง€๋งŒ service์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.(๋‹น์—ฐํ•จ)
  • ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋ณด์ž.

์˜ˆ์‹œ!

  • (๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด) ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ์žˆ๊ณ , ํ•˜๋‚˜์˜ ๊ฒŒ์ดํŠธ์›จ์ด/๋ผ์šฐํ„ฐ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ์„œ๋น„์Šค๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
apiVersion: v1
kind: Service
metadata:
	name: service-test
spec:
	selector:
    	app: server-pod1
    ports:
    	- protocol: TCP
          port: 80
          targetPort: 8080
  • ํ•œ ์ชฝ์˜ ์›Œ์ปค ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ์ชฝ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด์„œ ip๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์„ ํ•œ ๋ฒˆ ํ™•์ธํ•ด๋ณด์ž.
  1.  client pod๊ฐ€ http request๋ฅผ service-test๋ผ๋Š” dns ์ด๋ฆ„์œผ๋กœ ์š”์ฒญํ•œ๋‹ค.
  2. ํด๋Ÿฌ์Šคํ„ฐ dns ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์ด๋ฆ„์„ service ip๋กœ ๋งคํ•‘ํ•ด์ค€๋‹ค.
  3. http client๊ฐ€ dns ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ip๋ฅผ ๋ฐ›์•„ ip ์ฃผ์†Œ๋กœ ์ตœ์ข… ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  • ์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ip ์ฃผ์†Œ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด์ œ ip ์ฃผ์†Œ๋กœ ๋ชฉ์ ์ง€๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์„ ๋ณด์ž.

  • ip ๋„คํŠธ์›Œํฌ๋Š” ์ž์‹ ์˜ host์—์„œ ๋ชฉ์ ์ง€๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ์ƒ์œ„ ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ํŒจํ‚ท์„ ์ „๋‹ฌํ•œ๋‹ค.
  • client pod์—์„œ ์‹œ์ž‘ํ–ˆ๋‹ค๊ณ  ํ•  ๋•Œ, ๋ชฉ์ ์ง€ ์ฃผ์†Œ๊ฐ€ 10.3.241.152๋ผ๋ฉด veth1์— ๋งž์ง€ ์•Š์œผ๋‹ˆ cbr0์œผ๋กœ, cbr0์—์„œ eth0์œผ๋กœ, eth0์—์„œ router๋กœ ๊ฐ„๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ๊ตญ์—๋Š” ๋ชป ์ฐพ๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€? ์‹ถ์€๋ฐ, ์‹ค์ œ๋กœ๋Š” ํŒจํ‚ท ๋ชฉ์ ์ง€ ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด server pod 1์„ ์ฐพ์•„๊ฐ„๋‹ค.
  • ์™œ์ผ๊นŒ???

 

Kube-proxy

  • ์–˜๊ฐ€ ๊ทธ ์ด์œ ๋‹ค. 
  • kubernetes๋Š” netfilter์™€ iptables๋กœ ํŒจํ‚ท ํ๋ฆ„์„ ์ œ์–ดํ•œ๋‹ค.
    • netfilter : ๋ฃฐ ๋ฒ ์ด์Šค ํŒจํ‚ท ์ฒ˜๋ฆฌ ์—”์ง„. ์˜ค๊ณ  ๊ฐ€๋Š” ํŒจํ‚ท์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ทœ์น™์— ๋งž๋Š” ํŒจํ‚ท์ด ์žˆ์œผ๋ฉด ์ •ํ•ด์ง„ action์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • ์ด action ์ค‘์— Destination NAT๋ผ๋Š” ๋ชฉ์ ์ง€ ์ฃผ์†Œ ๋ณ€๊ฒฝ action์ด ์žˆ๋‹ค.
    • iptables : netfilter๋ฅผ ์‚ฌ์šฉํ•ด์„œ chain rule์ด๋ผ๋Š” ๊ทœ์น™์„ ์ง€์ •ํ•˜๊ณ , ํŒจํ‚ท์„ ํฌ์›Œ๋”ฉํ•˜๋„๋ก ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • kubernetes๋Š” ์ด netfilter๋ฅผ proxy ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    1. kube-proxy๊ฐ€ localhost์—์„œ ์„œ๋น„์Šค ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ํฌํŠธ๋ฅผ ์—ฐ๋‹ค.
    2. kube-proxy๊ฐ€ netfilter๋กœ service IP๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท์€ kube-proxy ์ž์‹ ์—๊ฒŒ ์˜ค๊ฒŒ ์„ค์ •ํ•œ๋‹ค.
    3. kube-proxy๋กœ ์˜จ ์š”์ฒญ์„ ์‹ค์ œ server pod์˜ ip:port๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ user space์—์„œ proxyingํ•˜๋Š” ๊ฒƒ์€ ํŒจํ‚ท์„ ๋‹ค์‹œ user์—์„œ ์ปค๋„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

>> iptable์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธฐ!

  • kube-proxy๊ฐ€ proxy ์—ญํ• ์„ ํ•˜์ง€ ์•Š๊ณ  netfilter์—๊ฒŒ ์ „์ฒด๋ฅผ ๋‹ค ๋งก๊ธฐ๊ณ , ๊ทœ์น™ ์ˆ˜์ •๋งŒ ํ•œ๋‹ค.
  • kube-proxy๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ api server์—์„œ ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ํด๋Ÿฌ์Šคํ„ฐ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด์„œ ์‚ด์•„์žˆ๋Š” ์„œ๋ฒ„ pod๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์•Œ๊ฒŒ๋˜๋ฉด iptables๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์„œ ๊ทœ์น™์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
    • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ api์—์„œ health check๋ฅผ ํ•˜๋Š” ๋ฒ• = kubelet

 

E. ์™ธ๋ถ€์™€ Service ๊ฐ„์˜ ๋„คํŠธ์›Œํ‚น

  • ์—ฌํƒœ๊นŒ์ง€๋Š” cluster ๋‚ด๋ถ€ํ†ต์‹ ์ด์—ˆ๋‹ค. 
  • ์™ธ๋ถ€ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ service ํƒ€์ž…์€ ๋‘ ๊ฐœ๋‹ค. 

1. NodePort

  • ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ ip๋กœ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ , cluster ip๋กœ๋„ ์ด ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • nodeport๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ kube proxy๊ฐ€ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์— 30000~32767 ์‚ฌ์ด ํฌํŠธ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  • ์ด ํฌํŠธ๋กœ ์™ธ๋ถ€์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋งคํ•‘๋˜์–ด ์žˆ๋Š” cluster ip๋กœ ์ „๋‹ฌํ•œ๋‹ค.

2. Load Balancer

  • ์™ธ๋ถ€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.
  • ์™ธ๋ถ€ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ํŠธ๋ž˜ํ”ฝ์ด ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ pod๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์ด๊ณ , ํด๋ผ์šฐ๋“œ ์ œ๊ณต ์—…์ฒด ์ชฝ์—์„œ ๋™์ž‘์„ ๊ฒฐ์ •ํ•œ๋‹ค.

 

2. Ingress์™€ Gateway API

A. Ingress

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ HTTP/HTTPS ํŠธ๋ž˜ํ”ฝ์„ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.
  • ๋‹จ์ผ IP ์ฃผ์†Œ๋กœ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•ด์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค.
    • url ๊ฒฝ๋กœ ์„ค์ • / SSL, TLS๋กœ ๋ณด์•ˆ ์„ค์ • / ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋“ฑ์˜ ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ingress api
    • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ingress ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” api๋กœ, ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” yaml ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ingress controller
    • ingress api์™€ ๋ฆฌ์†Œ์Šค์—์„œ ์ •์˜ํ•œ ๊ทœ์น™์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค.
    • ์—ฌ๊ธฐ์„œ ์‹ค์ œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • nginx controller๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋‹ค.
  • ingress controller - ingress๊ฐ€ ํ•˜๋‚˜์˜ ์ง์ด๋‹ค.

 

B. Gateway

  • ์„œ๋น„์Šค ๋„คํŠธ์›Œํ‚น์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ‘œ์ค€.
  • ingress์˜ ํ•œ๊ณ„ ๊ทน๋ณต์„ ์œ„ํ•œ Multi Tenant network routing solution์ด๋‹ค.
    • ingress๋Š” crds(custom resource definition)์„ ์ง์ ‘ ๋‹ค ์ ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ Layer 7 ๋ฆฌ์†Œ์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    • ๋ฉ€ํ‹ฐ ํ…Œ๋„ŒํŠธ ์ง€์› = ํด๋Ÿฌ์Šคํ„ฐ ํ•œ ๊ฐœ์—์„œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
    • TCP, UDP ๊นŒ์ง€ ํ™•์žฅ ์ง€์›
    • ์„ธ๋ถ„ํ™”๋œ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ… ์„ค์ • ๊ฐ€๋Šฅ
  • gateway class์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด
    • gke-l7-regional-external-managed(๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ)
    • gke-l7-regional-external-managed-mc(๋ฆฌ์ „ ์™ธ๋ถ€ ๋ฉ€ํ‹ฐํด๋Ÿฌ์Šคํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ)

์ถœ์ฒ˜ :(https://www.bespinglobal.com/google-cloud-insight/gateway-api/)

  • Ingress์™€ ๋น„๊ตํ•ด๋ณด์•˜์„ ๋•Œ, Ingress๋Š” url routing๊นŒ์ง€ ์ฒ˜๋ฆฌํ•ด์„œ service์™€ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • gateway์˜ ๊ฒฝ์šฐ gateway api์™€ routeing ๋ถ€๋ถ„์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ข€ ๋” ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์ ์ด๋‹ค.

C. GatewayAPI ์™€ HTTPRoute ์„ค์ •

Gateway API

kind: Gateway
apiVersion: gateway.networking.k8s.io/v1
metadata:
  name: http-gateway
  namespace: web
spec:
  gatewayClassName: gke-l7-regional-external-managed 
  listeners:
    - name: http
      protocol: HTTP
      port: 80
      allowedRoutes:
        namespaces:
          from: Same
  • gateway api ์„ค์ •ํŒŒ์ผ์„ ๋ถ„์„ํ•ด๋ณด์ž.
  • ๋จผ์ € apiVersion์ด gateway.networking.k8s.io/v1 ์ด๋‹ค. ์ด์ „๊ณผ๋Š” ๋‹ค๋ฅด๋‹ˆ ๋А๋‚Œ์ด ํŒํŒ ์˜ค๊ฒ ์ง€๋งŒ, ์ด ๋ง์€ gateway api๋Š” ์ถ”๊ฐ€ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋งŒ์ผ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ์‹œ์— ๊ณ ๊ธ‰ ๋„คํŠธ์›Œํ‚น ํƒญ์—์„œ gateway api๋ฅผ ์„ค์ •ํ–ˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ์„ค์น˜๋ฅผ ํ•ด์ฃผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์„ค์น˜๋ฅผ ํ•  ํ•„์š”๋Š” ์—†๋‹ค. 
  • ์„ค์น˜ ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
gcloud container clusters update <YOUR_CLUSTER_NAME> --region=<YOUR_REGION> --gateway-api=standard

  • ์„ค์น˜ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„ค์น˜๋œ gateway class๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 
kubectl get gatewayclass

  • spec.gatewayClassName์— ์ด class ์ค‘ ํ•˜๋‚˜๋ฅผ ์ ๋Š”๋ฐ, ๋‚˜๋Š” ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ gateway api๋ฅผ ์›ํ•˜๋ฏ€๋กœ gke-l7-regional-external-managed ๋ฅผ ์„ ํƒํ–ˆ๋‹ค. ๋ฉ€ํ‹ฐํด๋Ÿฌ์Šคํ„ฐ๋ผ๋ฉด mc ๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.
  • spec.listeners๋Š” ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์ธํ”„๋ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์–ด๋А ํŠธ๋ž˜ํ”ฝ์„ ์–ด๋А ํฌํŠธ์—์„œ ์ˆ˜์‹ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ ๋Š”๋‹ค. ์ง€๊ธˆ ์˜ˆ์ œ์—์„œ๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ํฌํŠธ 80๋ฒˆ์—์„œ ์ˆ˜์‹ ํ•˜๋„๋ก ํ–ˆ๋‹ค. 
    • allowRoutes๋Š” ์–ด๋””๋กœ ๊ฐ€๋Š” ๋ผ์šฐํŒ…์„ ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€ ์ œ์•ฝ์„ ์ค€๋‹ค. ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ ๊ฐ™์€ namespace ์•ˆ์— ์žˆ๋Š” ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•ด๋‘์—ˆ๋‹ค. 
    • ์ด๋Š” ๋’ค์— ๋ผ์šฐํŒ… ๊ทœ์น™์„ ์ง€์ •ํ•˜๋Š” HTTPRoute์—์„œ ์ง€์ •ํ•˜๋Š” ํฌํŠธ๋‚˜ service ์ •๋ณด๊ฐ€ ๋‹ค๋ฅธ ์š”์†Œ์™€ ์ค‘๋ณต๋˜๋”๋ผ๋„ ๊ฐ™์€ namespace ์•ˆ์— ์žˆ๋Š” service์— ๋ผ์šฐํŒ…ํ•˜๋„๋ก ํ•œ๋‹ค.

HTTPRoute

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: web-route
  namespace: web
spec:
  hostnames:
    - bunny-bun.me
  parentRefs:
    - name: http-gateway
      group: gateway.networking.k8s.io
      kind: Gateway
      sectionName: http
  rules:
    - matches:
    	- path:
            type: pathPrefix
            value: /
      backendRefs:
        - port: 80
          name: server-svc
  • HTTPRoute๋„ ๊ฐ™์€ apiVersion์„ ์‚ฌ์šฉํ•œ๋‹ค. 
  • spec.hostnames์—๋Š” dns ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. ๋‚˜๋Š” ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์†Œ bunny-bun.me ๋ฅผ ๋„ฃ์—ˆ๋‹ค.
  • parentRefs์—๋Š” ๋“ฑ๋กํ•œ gateway api๋ฅผ ์ง€์ •ํ•ด์„œ ์ด gateway์˜ ๋ผ์šฐํŒ… ๊ทœ์น™์ž„์„ ๋”ฑ ์ •ํ•ด์ค€๋‹ค. 
    • ๋งž๋Š” ์ด๋ฆ„, group(api version), kind๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๊ณ  sectionName์— ํ”„๋กœํ† ์ฝœ์„ ์ ๋Š”๋‹ค.
  • rules๋Š” gateway๋กœ ๋“ค์–ด์˜จ ์–ด๋–ค ์กฐ๊ฑด์— ๋งž๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์–ด๋А ์„œ๋น„์Šค์™€ ํฌํŠธ๋กœ ๊ฐˆ ๊ฒƒ์ธ์ง€ ๊ทœ์น™์„ ์ •ํ•ด์ค€๋‹ค. 
    • rules.matches.path๋Š” hostname ๋’ค ๊ฒฝ๋กœ๊ฐ€ value์™€ type์œผ๋กœ ์„ค์ •ํ•œ ๊ฒƒ์— ๋งž๋Š” ๊ฒฝ๋กœ๋ฅผ ํ†ต๊ณผ์‹œํ‚จ๋‹ค. ์ด ๊ทœ์น™์— ๋งž์•„์•ผ ์•„๋ž˜ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…๋œ๋‹ค.
    • rules.matches.backendRefs๋Š” ํฌํŠธ ๋ฒˆํ˜ธ์™€ ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. ์ด gateway ๋กœ ๋“ค์–ด์˜จ ํŠธ๋ž˜ํ”ฝ์ด ์–ด๋А ์„œ๋น„์Šค์˜ ์–ด๋–ค ํฌํŠธ๋กœ ๊ฐ€๋Š”์ง€๋ฅผ ์ •ํ•ด์ค€๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ํŠธ๋ž˜ํ”ฝ์„ ํผ์„ผํŠธ ๋‹จ์œ„๋กœ ๋ถ„์‚ฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” weight ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • rules์—์„œ ์—ฌ๋Ÿฌ backendRefs์™€ matches๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด Ingress๋ณด๋‹ค Gateway๊ฐ€ ๋” ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ์ด๋‹ค.
  • matches๋Š” ๋น„๋‹จ ๊ฒฝ๋กœ ๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 
rules:
  - matches:
    - method: POST
      - headers:
        - name: user-type
          value: admin
    backendRefs:
      - name: admin-api-svc
        port: 80
  • ์œ„ ์˜ˆ์‹œ์—์„œ ๋ณด๋ฉด, ์š”์ฒญ์ด POST ์ด๊ณ  header์— user-type=admin ์ผ ๋•Œ, ์ด rule์„ ์ ์šฉํ•˜์—ฌ admin-api-svc์˜ 80๋ฒˆ ํฌํŠธ๋กœ ์ „๋‹ฌํ•˜๋ผ๊ณ  ๋˜์–ด ์žˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์„ธ๋ฐ€ํ•œ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

3. ์ ์šฉ ์ค‘์— ๋งˆ์ฃผํ•œ ์˜ค๋ฅ˜๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์˜ˆ์ „์— K8S๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” nginx ingress controller๋ฅผ ์‚ฌ์šฉํ•ด์„œ ingress๋กœ ๋ฐฐํฌ๋ฅผ ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— GatewayAPI๋กœ๋Š” ์ฒ˜์Œ ๋ผ์šฐํŒ…ํ•ด๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ต‰์žฅํžˆ ๋งŽ์€ ์˜ค๋ฅ˜๋“ค์„ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ทธ ์‚ฝ์งˆ ๊ธฐ๋ก์„ ํ•œ ๋ฒˆ ๊ณต์œ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

a. Fault filter abort

์šฐ์„  ์ฒ˜์Œ Gateway API์™€ HTTPRoute๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ๋งˆ์ฃผํ•œ ์—๋Ÿฌ์ด๋‹ค. hostname์œผ๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  gateway์— ํ• ๋‹น๋œ ์™ธ๋ถ€ ip ์ฃผ์†Œ๋กœ ์ ‘์†ํ–ˆ๋Š”๋ฐ ์›น ํŽ˜์ด์ง€์— ๋”ฑ ์ด๊ฒƒ๋งŒ ๋œจ๊ณ  ์•„๋ฌด ์ •๋ณด๊ฐ’์ด ์—†์—ˆ๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ๊นŒ gateway ์ชฝ์—์„œ ์—ฐ๊ฒฐ๋œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ health check์— ์‹คํŒจํ•˜๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์‹œ๋„ํ•œ ๋ฐฉ๋ฒ• 1

๋•Œ๋ฌธ์— fastapi pod๊ฐ€ ์ฃฝ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ health check๋ฅผ ๋ฐฐํฌํ–ˆ๋‹ค.

apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: fastapi-health-policy
  namespace: web
spec:
  targetRef:
    group: ""
    kind: Service
    name: server-svc
  default:
    config:
      type: HTTP
      httpHealthCheck:
        port: 8080
        requestPath: /
  • targetRef์— health check๋ฅผ ํ•  ์„œ๋น„์Šค๋ฅผ ์ง€์ •ํ•˜๊ณ , default์˜ config ํ•˜์œ„์— health check ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ–ˆ๋‹ค.
  • ์ด ๊ฒฝ์šฐ์—๋Š” HTTP ํŠธ๋ž˜ํ”ฝ์œผ๋กœ 8080 port, ๊ฒฝ๋กœ  / ๋กœ health check๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด ๊ตฌ์„ฑํŒŒ์ผ์„ ์ ์šฉ์‹œํ‚จ ๋’ค์— health check๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

kubectl describe healthcheckpolicy fastapi-health-policy -n web

๊ฐ€์žฅ ์•„๋ž˜ events ์™€ conditions ํ•ญ๋ชฉ์„ ํ™•์ธํ•ด๋ณด๋ฉด, 

Gateway๋Š” ์ž ์‹œ ๋‚ด๋ ธ์œผ๋‹ˆ ์—†๋Š” ๊ฒƒ์ด ๋งž๊ณ , event๋„ normal ์ธ ๊ฒƒ์„ ๋ณด๋ฉด pod ์ž์ฒด์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ด ์‚ด์•„์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

์‹œ๋„ํ•œ ๋ฐฉ๋ฒ• 2 

Gemini์™€ ํ† ๋ก ํ•ด๋ดค์„ ๋•Œ ๋ฐฉํ™”๋ฒฝ ๋ฌธ์ œ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ํ•ด์„œ pod๋กœ ์—ฐ๊ฒฐ๋˜๋Š” 8080 port TCP๋ฅผ ์—ด์–ด์ฃผ์—ˆ์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ตณ์ด ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค...

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 1

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด service type์ด loadbalancer์ด๋ฉด ์•ˆ๋œ๋‹ค. ๋ฐ˜๋“œ์‹œ Cluster IP๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • server service๋ฅผ loadbalancer ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•˜๋ฉด GCP L4 network loadbalancer๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • ์—ฌ๊ธฐ์— gateway๊ฐ€ GCP L7 HTTP(S) loadbalancer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด L4-L7 ์ด์ค‘ํ™”๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
    • ์›๋ž˜ L4-L7 ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค.(HAํ”„๋ก์‹œ ๋“ฑ) ๊ทธ๋Ÿฐ๋ฐ gcp ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค+k8s ์ปจํŠธ๋กค๋Ÿฌ ์„ค๊ณ„๊ฐ€ ๊ฒน์น˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ L7 ๊ฒŒ์ดํŠธ์›จ์ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” pod์— ์ง์ ‘ health check๋ฅผ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ L4 Loadbalancer ๋กœ ์„ค์ •๋œ ์„œ๋น„์Šค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— pod์— ์ง์ ‘ ๋‹ฟ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ L4 Loadbalancer ip๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด health check ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ pod๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ ˆ์ด์–ด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    • L4์™€ L7์˜ health check port ํ˜น์€ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅด๊ฑฐ๋‚˜, L7์ด ์ฐธ์กฐ๋ฅผ ์ž˜๋ชปํ•ด์„œ ์‹ค์ œ pod์˜ ๋ฆฌ์Šค๋‹ ํฌํŠธ์— ๋‹ฟ์ง€ ๋ชปํ•˜๋ฉด unhealthy ์ƒํƒœ๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋ฉด fault filter abort๋ฅผ ๋ฑ‰๋Š”๋‹ค!!
  • +) gke gateway api๋Š” gcp์˜ gateway controller์—์„œ ์•„์˜ˆ cluster ip์—์„œ pod ip๋ฅผ ๋ฝ‘์•„์„œ ์ง์ ‘ L7์— ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค.

b.  An active proxy-only subnetwork is required in the same region and VPC as the forwarding rule.

์ด์ฏค์—์„œ ์˜์‹ฌ๋˜๋Š” ๊ฑธ ๋‹ค ํ•˜๋‚˜์”ฉ ๋ฐ”๊ฟ”๋ณด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋•Œ gateway class๋ฅผ global์—์„œ regional์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์•˜๋‹ค(cluster๊ฐ€ regional์ด๋‹ˆ ์–ด์จŒ๋“  ํ˜น์‹œ๋‚˜ ํ•ด์„œ)

๊ทธ๋žฌ๋”๋‹ˆ ์ƒˆ๋กœ์šด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค!

Gateway: Invalid : error cause: gceSync: generic::invalid_argument: Insert: Invalid value for field 'resource.target': 'regions/us-central1/targetHttpProxies/gkegw1-jst4-web-http-gateway-bqvswgdmrblp'. An active proxy-only subnetwork is required in the same region and VPC as the forwarding rule.

์—๋Ÿฌ๋ฉ”์„ธ์ง€๋Š” ์žˆ๋Š” ๊ฒŒ ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐฑ ๋ฐฐ ๋‚ซ๋‹ค.

์ฝ์–ด๋ณด๋‹ˆ ๊ฐ™์€ region์— ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์ด ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ™์€ Loadbalancer์ธ๋ฐ ์™œ L4 loadbalncer์—์„œ๋Š” ์—†์–ด๋„ ๋์„๊นŒ?

  • L4๋Š” ํ—ค๋” ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋ก์‹œ ์„œ๋ธŒ๋„ท์ด ๋”ฐ๋กœ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ฐ”๋กœ ๋…ธ๋“œ ip๋กœ ์ง์ ‘ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋ฐ˜๋ฉด L7 gateway loadbalancer์˜ ๊ฒฝ์šฐ์—๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ํ”„๋ก์‹œ ๋ฐฐ์น˜๊ณต๊ฐ„์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์„œ๋ธŒ๋„ท ํ”„๋ก์‹œ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค. ํ”„๋ก์‹œ ๋“ฑ๋ก ์ „์— ํ™•์ธํ•ด์•ผํ•  ๊ฒƒ์€, ํ˜„์žฌ cluster๊ฐ€ ์†ํ•œ vpc ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ๊ณผ ๋‹ค๋ฅธ ๋Œ€์—ญ์„ ์„ ํƒํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ network ๋Œ€์—ญ์„ ํ™•์ธํ•ด๋ด์•ผํ•œ๋‹ค. ๋จผ์ € vpc ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ํ™•์ธํ•ด๋ณด์ž.

gcloud container clusters describe <cluster-name> --region <region> --format="value(network)"

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์ด๋ฆ„๋งŒ ๋”ฐ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ ๋Œ€์—ญ์„ ํ™•์ธํ•ด๋ณด์ž.

gcloud compute networks subnets list -- network <network-name>

์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ vpc ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ 10. ๋Œ€์˜€๊ธฐ ๋•Œ๋ฌธ์—, subnet ๋Œ€์—ญ์€ 192.168 ํ˜น์€ 172.16 ๋Œ€์—ญ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

gcloud compute networks subnets create gke-proxy-subnet-<REGION> 
	\ --region=<REGION> 
        \ --network=<NETWORK_NAME> 
        \ --range=192.168.0.0/20 
        \ --purpose=REGIONAL_MANAGED_PROXY 
        \ --role=ACTIVE

์„œ๋ธŒ๋„ท ์ƒ์„ฑ ํ›„์— ๋‹ค์‹œ gateway์™€ httproute๋ฅผ ์˜ฌ๋ ค๋ณด์ž.

c. ๋‹ค์‹œ Fault filter abort

์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ํ–ˆ๋Š”๋ฐ๋„!!!!!!!!!!!! ๋˜ fault filter abort ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ๋ถ€ํ„ฐ health check policy ์žฌํ™•์ธ, pod ํ™•์ธ ๋“ฑ ์˜ค๋งŒ ๊ฒƒ์„ ํ•ด๋ณธ ๊ฒฐ๊ณผ, ์ด์œ ์™€ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€ ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค...

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 

hostname์„ ์„ค์ •ํ•œ ๊ฒฝ์šฐ dns ์ œ๊ณต ์—…์ฒด์—์„œ ip address๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผํ•˜๋Š”๋ฐ, ip address๊ฐ€ ํ‹€๋ฆฐ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๊ฒƒ์€ gateway loadbalancer์˜ ip๋กœ ์ ‘์†ํ•ด๋„ ๊ฐ™์€ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • L7 ์„œ๋น„์Šค๋Š” ๋ผ์ดํŒ…์„ ์œ„ํ•ด HTTP/1.1 ํ”„๋กœํ† ์ฝœ์˜ Host ํ—ค๋”์— ์˜์กดํ•œ๋‹ค. ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ๋กœ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ํ˜ธ์ŠคํŒ…ํ•  ๋•Œ ์–ด๋–ค ๋„๋ฉ”์ธ์„ ์š”์ฒญํ–ˆ๋Š”์ง€ ๊ตฌ๋ถ„ํ•˜๋„๋ก ํ•œ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ IP๋กœ ์ง์ ‘ ์ ‘์†ํ•˜๋ฉด host ํ—ค๋”์— ๋„๋ฉ”์ธ ๋Œ€์‹  ip ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , gateway api์— hostname ๊ทœ์น™์ด ์žˆ๋‹ค๋ฉด host ํ—ค๋”๊ฐ€ ip์ธ ๊ฒฝ์šฐ ๊ทœ์น™์— ๋งค์นญ๋˜์ง€ ์•Š์•„ ์ฒ˜๋ฆฌ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.
  • hostname์„ ์ œ๊ฑฐํ•˜๋ฉด ์™€์ผ๋“œ์นด๋“œ(*) ์ฒ˜๋ฆฌ๋˜์–ด ๊ทœ์น™์ด ์ ์šฉ๋œ๋‹ค.

๋•Œ๋ฌธ์— hostname์„ httpRoute์—์„œ ์ œ๊ฑฐํ•œ ๋’ค์—๋Š” ์ •์ƒ์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ง์ธ ์ฆ‰์Šจ, dns ์ œ๊ณต์—…์ฒด ์ชฝ์—์„œ ๋ฐ˜์˜ํ•œ host์˜ ip ์ฃผ์†Œ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ˜์˜๋  ๋•Œ๊นŒ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

3. ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

3๊ฐœ์˜ ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ์›น ์„œ๋น„์Šค๋ฅผ gcloud gke๋กœ ์˜ฌ๋ ค๋ณด๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์‚ฌ์‹ค ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์ด๋‚˜ ๋„คํŠธ์›Œํฌ์— ๊ด€ํ•œ ์ง€์‹์ด ์กฐ๊ธˆ ๋ถ€์กฑํ•œ ํŽธ์ด๋ผ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์œ„์— ์˜ฌ๋ ค๋ณด๊ณ  autopilot๊ณผ standard cluster๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํžˆ ์šด์˜ํ•ด๋ณด๋Š” ์ •๋„๋กœ ํ–ˆ์œผ๋‚˜, ์ด ๊ณผ์ •์—์„œ kubernetes์˜ deployment, statefulset, persistant volume, service(load balancer, cluster ip), health check policy, configmap, secret, gateway api์™€ httproute, VPC ๋„คํŠธ์›Œํฌ๊นŒ์ง€ ์‹œ์Šคํ…œ ์ „๋ฐ˜์—์„œ ํ•„์š”๋กœํ•˜๋Š” ์š”์†Œ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉฐ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ๋˜์—ˆ๋‹ค.

์ถ”ํ›„ ๊ฐœ์ธ ์›น ํŽ˜์ด์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•œ๋‹ค๋ฉด ํ•œ ๋ฒˆ ๋” ์˜ฌ๋ ค๋ณผ ์ƒ๊ฐ์ด ์žˆ์ง€๋งŒ... ์šด์˜๋น„์šฉ์ด ์ƒ๋‹นํžˆ ๋น„์‹ธ์„œ ๊นŠ์ƒํ•ด๋ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค๐Ÿฅฒ

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿณ Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(3) - DB ์›Œํฌ๋กœ๋“œ ์„ค์ •ํ•˜๊ธฐ  (0) 2025.11.13
[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(2) - ๋ฐฑ์—”๋“œ ์›Œํฌ๋กœ๋“œ ๊ตฌ์„ฑํŒŒ์ผ ๋งŒ๋“ค๊ธฐ  (0) 2025.11.12
[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(1) - Dockerfile ๊ตฌ์„ฑ, Docker compose๋กœ ํ™•์ธํ•˜๊ธฐ  (0) 2025.11.11
[Docker + ELK] Docker ELK๋ฅผ ์‚ฌ์šฉํ•ด์„œ PostgreSQL DB ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ  (1) 2023.12.21
[Docker] Docker ์ž…๋ฌธ - Docker Image, Container, ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ moniwiki ๋ฐฐํฌ ์˜ˆ์ œ๊นŒ์ง€  (1) 2023.04.27
'๐Ÿณ Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(3) - DB ์›Œํฌ๋กœ๋“œ ์„ค์ •ํ•˜๊ธฐ
  • [Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(2) - ๋ฐฑ์—”๋“œ ์›Œํฌ๋กœ๋“œ ๊ตฌ์„ฑํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
  • [Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(1) - Dockerfile ๊ตฌ์„ฑ, Docker compose๋กœ ํ™•์ธํ•˜๊ธฐ
  • [Docker + ELK] Docker ELK๋ฅผ ์‚ฌ์šฉํ•ด์„œ PostgreSQL DB ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (109)
      • ๐Ÿฌ ML & Data (55)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (17)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿณ Docker & Kubernetes (7)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐ŸŒ Networking (0)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (10)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(4) - Gateway API๋กœ ๋ฐฐํฌํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”