์ธ๊ทธ๋ ˆ์Šค(Ingress)

FEATURE STATE: Kubernetes v1.19 [stable]

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ ‘๊ทผ์„ ๊ด€๋ฆฌํ•˜๋Š” API ์˜ค๋ธŒ์ ํŠธ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ HTTP๋ฅผ ๊ด€๋ฆฌํ•จ.

์ธ๊ทธ๋ ˆ์Šค๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ, SSL ์ข…๋ฃŒ, ๋ช…์นญ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ…์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฉ์–ด

์ด ๊ฐ€์ด๋“œ๋Š” ์šฉ์–ด์˜ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•œ๋‹ค.

  • ๋…ธ๋“œ(Node): ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ผ๋ถ€์ด๋ฉฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์†ํ•œ ์›Œ์ปค ๋จธ์‹ .
  • ํด๋Ÿฌ์Šคํ„ฐ(Cluster): ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆํ™” ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ ์ง‘ํ•ฉ. ์ด ์˜ˆ์‹œ์™€ ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜์ ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ์— ์†ํ•œ ๋…ธ๋“œ๋Š” ํผ๋ธ”๋ฆญ ์ธํ„ฐ๋„ท์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์—์ง€ ๋ผ์šฐํ„ฐ(Edge router): ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฉํ™”๋ฒฝ ์ •์ฑ…์„ ์ ์šฉํ•˜๋Š” ๋ผ์šฐํ„ฐ. ์ด๊ฒƒ์€ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž ๋˜๋Š” ๋ฌผ๋ฆฌ์  ํ•˜๋“œ์›จ์–ด์˜ ์ผ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ(Cluster network): ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„คํŠธ์›Œํ‚น ๋ชจ๋ธ์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ํ†ต์‹ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์  ๋งํฌ ์ง‘ํ•ฉ.
  • ์„œ๋น„์Šค: ๋ ˆ์ด๋ธ” ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ๋“œ ์ง‘ํ•ฉ์„ ์‹๋ณ„ํ•˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค. ๋‹ฌ๋ฆฌ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์„œ๋น„์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ๋งŒ ๋ผ์šฐํŒ… ๊ฐ€๋Šฅํ•œ ๊ฐ€์ƒ IP๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค๋ž€?

์ธ๊ทธ๋ ˆ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ HTTP์™€ HTTPS ๊ฒฝ๋กœ๋ฅผ ๋…ธ์ถœํ•œ๋‹ค. ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…์€ ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค์— ์ •์˜๋œ ๊ทœ์น™์— ์˜ํ•ด ์ปจํŠธ๋กค๋œ๋‹ค.

๋‹ค์Œ์€ ์ธ๊ทธ๋ ˆ์Šค๊ฐ€ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ๋ณด๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์ด๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ
์ธ๊ทธ๋ ˆ์Šค-๋งค๋‹ˆ์ง€๋“œ
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
๋ผ์šฐํŒ… ๊ทœ์น™
์ธ๊ทธ๋ ˆ์Šค
ํŒŒ๋“œ
์„œ๋น„์Šค
ํŒŒ๋“œ
ํด๋ผ์ด์–ธํŠธ

์ธ๊ทธ๋ ˆ์Šค๋Š” ์™ธ๋ถ€์—์„œ ์„œ๋น„์Šค๋กœ ์ ‘์†์ด ๊ฐ€๋Šฅํ•œ URL, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์Šค ํŠธ๋ž˜ํ”ฝ, SSL / TLS ์ข…๋ฃŒ ๊ทธ๋ฆฌ๊ณ  ์ด๋ฆ„-๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ…์„ ์ œ๊ณตํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•  ์ฑ…์ž„์ด ์žˆ์œผ๋ฉฐ, ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋„๋ก ์—์ง€ ๋ผ์šฐํ„ฐ ๋˜๋Š” ์ถ”๊ฐ€ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค๋Š” ์ž„์˜์˜ ํฌํŠธ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. HTTP์™€ HTTPS ์ด์™ธ์˜ ์„œ๋น„์Šค๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜๋ ค๋ฉด ๋ณดํ†ต Service.Type=NodePort ๋˜๋Š” Service.Type=LoadBalancer ์œ ํ˜•์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ „์ œ ์กฐ๊ฑด๋“ค

์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žˆ์–ด์•ผ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋งŒ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ํšจ๊ณผ๊ฐ€ ์—†๋‹ค.

ingress-nginx์™€ ๊ฐ™์€ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ฐฐํฌํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ, ๋ชจ๋“  ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ฐธ์กฐ ์‚ฌ์–‘์ด ๋งž์•„์•ผ ํ•œ๋‹ค. ์‹ค์ œ๋กœ, ๋‹ค์–‘ํ•œ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค

์ตœ์†Œํ•œ์˜ ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค ์˜ˆ์ œ:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

๋‹ค๋ฅธ ๋ชจ๋“  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ๊ทธ๋ ˆ์Šค์—๋Š” apiVersion, kind, ๊ทธ๋ฆฌ๊ณ  metadata ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ์˜ค๋ธŒ์ ํŠธ์˜ ์ด๋ฆ„์€ ์œ ํšจํ•œ DNS ์„œ๋ธŒ๋„๋ฉ”์ธ ์ด๋ฆ„์ด์–ด์•ผ ํ•œ๋‹ค. ์„ค์ • ํŒŒ์ผ์˜ ์ž‘์„ฑ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๋‚ด์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌํ•˜๊ธฐ, ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑํ•˜๊ธฐ, ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค๋Š” ์ข…์ข… ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด์„œ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์— ๋”ฐ๋ผ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ, ๊ทธ ์˜ˆ์‹œ๋Š” ์žฌ์ž‘์„ฑ-ํƒ€๊ฒŸ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค. ์ง€์›๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™•์ธํ•˜๋ ค๋ฉด ์„ ํƒํ•œ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์˜ ์„ค๋ช…์„œ๋ฅผ ๊ฒ€ํ† ํ•œ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค ์‚ฌ์–‘ ์—๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋˜๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์žˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€, ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ทœ์น™ ๋ชฉ๋ก์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋Š” HTTP(S) ํŠธ๋ž˜ํ”ฝ์„ ์ง€์‹œํ•˜๋Š” ๊ทœ์น™๋งŒ ์ง€์›ํ•œ๋‹ค.

ingressClassName์„ ์ƒ๋žตํ•˜๋ ค๋ฉด, ๊ธฐ๋ณธ ์ธ๊ทธ๋ ˆ์Šค ํด๋ž˜์Šค๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋ช‡๋ช‡ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ธฐ๋ณธ IngressClass๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Ingress-NGINX ์ปจํŠธ๋กค๋Ÿฌ๋Š” --watch-ingress-without-class ํ”Œ๋ž˜๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜์— ๋‚˜์™€ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๊ธฐ๋ณธ IngressClass๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค ๊ทœ์น™

๊ฐ HTTP ๊ทœ์น™์—๋Š” ๋‹ค์Œ์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ๋‹ค.

  • ์„ ํƒ์  ํ˜ธ์ŠคํŠธ. ์ด ์˜ˆ์‹œ์—์„œ๋Š”, ํ˜ธ์ŠคํŠธ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๊ธฐ์— ์ง€์ •๋œ IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ธ๋ฐ”์šด๋“œ HTTP ํŠธ๋ž˜ํ”ฝ์— ๊ทœ์น™์ด ์ ์šฉ ๋œ๋‹ค. ๋งŒ์•ฝ ํ˜ธ์ŠคํŠธ๊ฐ€ ์ œ๊ณต๋˜๋ฉด(์˜ˆ, foo.bar.com), ๊ทœ์น™์ด ํ•ด๋‹น ํ˜ธ์ŠคํŠธ์— ์ ์šฉ๋œ๋‹ค.
  • ๊ฒฝ๋กœ ๋ชฉ๋ก (์˜ˆ, /testpath)์—๋Š” ๊ฐ๊ฐ service.name ๊ณผ service.port.name ๋˜๋Š” service.port.number ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ด€๋ จ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ์ฐธ์กฐ๋œ ์„œ๋น„์Šค๋กœ ๋ณด๋‚ด๊ธฐ ์ „์— ํ˜ธ์ŠคํŠธ์™€ ๊ฒฝ๋กœ๊ฐ€ ๋ชจ๋‘ ์ˆ˜์‹  ์š”์ฒญ์˜ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐฑ์—”๋“œ๋Š” ์„œ๋น„์Šค ๋ฌธ์„œ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌ์†Œ์Šค ๋ฐฑ์—”๋“œ์— ์„ค๋ช…๋œ ๋ฐ”์™€ ๊ฐ™์ด ์„œ๋น„์Šค์™€ ํฌํŠธ ์ด๋ฆ„์˜ ์กฐํ•ฉ์ด๋‹ค. ํ˜ธ์ŠคํŠธ์™€ ๊ทœ์น™ ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ์ธ๊ทธ๋ ˆ์Šค์— ๋Œ€ํ•œ HTTP(์™€ HTTPS) ์š”์ฒญ์€ ๋ฐฑ์—”๋“œ ๋ชฉ๋ก์œผ๋กœ ์ „์†ก๋œ๋‹ค.

defaultBackend ๋Š” ์ข…์ข… ์‚ฌ์–‘์˜ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์— ๊ตฌ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

DefaultBackend

๊ทœ์น™์ด ์—†๋Š” ์ธ๊ทธ๋ ˆ์Šค๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ๋‹จ์ผ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๋กœ ์ „์†กํ•œ๋‹ค. defaultBackend ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ตฌ์„ฑ ์˜ต์…˜์ด๋ฉฐ, ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค์— ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

๋งŒ์•ฝ ์ธ๊ทธ๋ ˆ์Šค ์˜ค๋ธŒ์ ํŠธ์˜ HTTP ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†์œผ๋ฉด, ํŠธ๋ž˜ํ”ฝ์€ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๋กœ ๋ผ์šฐํŒ… ๋œ๋‹ค.

๋ฆฌ์†Œ์Šค ๋ฐฑ์—”๋“œ

Resource ๋ฐฑ์—”๋“œ๋Š” ์ธ๊ทธ๋ ˆ์Šค ์˜ค๋ธŒ์ ํŠธ์™€ ๋™์ผํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์žˆ๋Š” ๋‹ค๋ฅธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ObjectRef์ด๋‹ค. Resource ๋Š” ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ธ ์„ค์ •์ด๋ฉฐ, ๋‘˜ ๋‹ค ์ง€์ •ํ•˜๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•œ๋‹ค. Resource ๋ฐฑ์—”๋“œ์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ์ •์  ์ž์‚ฐ์ด ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ ์Šคํ† ๋ฆฌ์ง€ ๋ฐฑ์—”๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-resource-backend
spec:
  defaultBackend:
    resource:
      apiGroup: k8s.example.com
      kind: StorageBucket
      name: static-assets
  rules:
    - http:
        paths:
          - path: /icons
            pathType: ImplementationSpecific
            backend:
              resource:
                apiGroup: k8s.example.com
                kind: StorageBucket
                name: icon-assets

์œ„์˜ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ๋‹ค์Œ์˜ ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl describe ingress ingress-resource-backend
Name:             ingress-resource-backend
Namespace:        default
Address:
Default backend:  APIGroup: k8s.example.com, Kind: StorageBucket, Name: static-assets
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /icons   APIGroup: k8s.example.com, Kind: StorageBucket, Name: icon-assets
Annotations:  <none>
Events:       <none>

๊ฒฝ๋กœ ์œ ํ˜•

์ธ๊ทธ๋ ˆ์Šค์˜ ๊ฐ ๊ฒฝ๋กœ์—๋Š” ํ•ด๋‹น ๊ฒฝ๋กœ ์œ ํ˜•์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ช…์‹œ์  pathType ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ๋กœ๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•œ๋‹ค. ์ง€์›๋˜๋Š” ๊ฒฝ๋กœ ์œ ํ˜•์€ ์„ธ ๊ฐ€์ง€์ด๋‹ค.

  • ImplementationSpecific: ์ด ๊ฒฝ๋กœ ์œ ํ˜•์˜ ์ผ์น˜ ์—ฌ๋ถ€๋Š” IngressClass์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋ณ„๋„ pathType ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, Prefix ๋˜๋Š” Exact ๊ฒฝ๋กœ ์œ ํ˜•๊ณผ ๊ฐ™์ด ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Exact: URL ๊ฒฝ๋กœ์˜ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์ผ์น˜์‹œํ‚จ๋‹ค.

  • Prefix: URL ๊ฒฝ๋กœ์˜ ์ ‘๋‘์‚ฌ๋ฅผ / ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•œ ๊ฐ’๊ณผ ์ผ์น˜์‹œํ‚จ๋‹ค. ์ผ์น˜๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ์š”์†Œ๋ณ„๋กœ ๊ฒฝ๋กœ ์š”์†Œ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋ชจ๋“  p ๊ฐ€ ์š”์ฒญ ๊ฒฝ๋กœ์˜ ์š”์†Œ๋ณ„ ์ ‘๋‘์‚ฌ๊ฐ€ p ์ธ ๊ฒฝ์šฐ ์š”์ฒญ์€ p ๊ฒฝ๋กœ์— ์ผ์น˜ํ•œ๋‹ค.

์˜ˆ์ œ

์ข…๋ฅ˜ ๊ฒฝ๋กœ ์š”์ฒญ ๊ฒฝ๋กœ ์ผ์น˜ ์—ฌ๋ถ€
Prefix / (๋ชจ๋“  ๊ฒฝ๋กœ) ์˜ˆ
Exact /foo /foo ์˜ˆ
Exact /foo /bar ์•„๋‹ˆ์˜ค
Exact /foo /foo/ ์•„๋‹ˆ์˜ค
Exact /foo/ /foo ์•„๋‹ˆ์˜ค
Prefix /foo /foo, /foo/ ์˜ˆ
Prefix /foo/ /foo, /foo/ ์˜ˆ
Prefix /aaa/bb /aaa/bbb ์•„๋‹ˆ์˜ค
Prefix /aaa/bbb /aaa/bbb ์˜ˆ
Prefix /aaa/bbb/ /aaa/bbb ์˜ˆ, ๋งˆ์ง€๋ง‰ ์Šฌ๋ž˜์‹œ ๋ฌด์‹œํ•จ
Prefix /aaa/bbb /aaa/bbb/ ์˜ˆ, ๋งˆ์ง€๋ง‰ ์Šฌ๋ž˜์‹œ ์ผ์น˜ํ•จ
Prefix /aaa/bbb /aaa/bbb/ccc ์˜ˆ, ํ•˜์œ„ ๊ฒฝ๋กœ ์ผ์น˜ํ•จ
Prefix /aaa/bbb /aaa/bbbxyz ์•„๋‹ˆ์˜ค, ๋ฌธ์ž์—ด ์ ‘๋‘์‚ฌ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ
Prefix /, /aaa /aaa/ccc ์˜ˆ, /aaa ์ ‘๋‘์‚ฌ ์ผ์น˜ํ•จ
Prefix /, /aaa, /aaa/bbb /aaa/bbb ์˜ˆ, /aaa/bbb ์ ‘๋‘์‚ฌ ์ผ์น˜ํ•จ
Prefix /, /aaa, /aaa/bbb /ccc ์˜ˆ, / ์ ‘๋‘์‚ฌ ์ผ์น˜ํ•จ
Prefix /aaa /ccc ์•„๋‹ˆ์˜ค, ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ ์‚ฌ์šฉํ•จ
Mixed /foo (Prefix), /foo (Exact) /foo ์˜ˆ, Exact ์„ ํ˜ธํ•จ

๋‹ค์ค‘ ์ผ์น˜

๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ธ๊ทธ๋ ˆ์Šค์˜ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๊ฐ€ ์š”์ฒญ๊ณผ ์ผ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฐ€์žฅ ๊ธด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์šฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋‘ ๊ฐœ์˜ ๊ฒฝ๋กœ๊ฐ€ ์—ฌ์ „ํžˆ ๋™์ผํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ ‘๋‘์‚ฌ(prefix) ๊ฒฝ๋กœ ์œ ํ˜•๋ณด๋‹ค ์ •ํ™•ํ•œ(exact) ๊ฒฝ๋กœ ์œ ํ˜•์„ ๊ฐ€์ง„ ๊ฒฝ๋กœ๊ฐ€ ์‚ฌ์šฉ ๋œ๋‹ค.

ํ˜ธ์ŠคํŠธ๋„ค์ž„ ์™€์ผ๋“œ์นด๋“œ

ํ˜ธ์ŠคํŠธ๋Š” ์ •ํ™•ํ•œ ์ผ์น˜(์˜ˆ: "foo.bar.com") ๋˜๋Š” ์™€์ผ๋“œ์นด๋“œ(์˜ˆ: "* .foo.com")์ผ ์ˆ˜ ์žˆ๋‹ค. ์ •ํ™•ํ•œ ์ผ์น˜๋ฅผ ์œ„ํ•ด์„œ๋Š” HTTP host ํ—ค๋”๊ฐ€ host ํ•„๋“œ์™€ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์™€์ผ๋“œ์นด๋“œ ์ผ์น˜๋ฅผ ์œ„ํ•ด์„œ๋Š” HTTP host ํ—ค๋”๊ฐ€ ์™€์ผ๋“œ์นด๋“œ ๊ทœ์น™์˜ ์ ‘๋ฏธ์‚ฌ์™€ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

ํ˜ธ์ŠคํŠธ ํ˜ธ์ŠคํŠธ ํ—ค๋” ์ผ์น˜ ์—ฌ๋ถ€
*.foo.com bar.foo.com ๊ณต์œ  ์ ‘๋ฏธ์‚ฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ์น˜ํ•จ
*.foo.com baz.bar.foo.com ์ผ์น˜ํ•˜์ง€ ์•Š์Œ, ์™€์ผ๋“œ์นด๋“œ๋Š” ๋‹จ์ผ DNS ๋ ˆ์ด๋ธ”๋งŒ ํฌํ•จํ•จ
*.foo.com foo.com ์ผ์น˜ํ•˜์ง€ ์•Š์Œ, ์™€์ผ๋“œ์นด๋“œ๋Š” ๋‹จ์ผ DNS ๋ ˆ์ด๋ธ”๋งŒ ํฌํ•จํ•จ
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-wildcard-host
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
      - pathType: Prefix
        path: "/bar"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: "*.foo.com"
    http:
      paths:
      - pathType: Prefix
        path: "/foo"
        backend:
          service:
            name: service2
            port:
              number: 80

์ธ๊ทธ๋ ˆ์Šค ํด๋ž˜์Šค

์ธ๊ทธ๋ ˆ์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ข…์ข… ๋‹ค๋ฅธ ๊ตฌ์„ฑ์œผ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์ธ๊ทธ๋ ˆ์Šค์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ์ด๋ฆ„์„ ํฌํ•จํ•˜์—ฌ ์ถ”๊ฐ€ ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ IngressClass ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: external-lb
spec:
  controller: example.com/ingress-controller
  parameters:
    apiGroup: k8s.example.com
    kind: IngressParameters
    name: external-lb

์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค์˜ .spec.parameters ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค์™€ ์—ฐ๊ด€์žˆ๋Š” ํ™˜๊ฒฝ ์„ค์ •์„ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ƒ์„ธํ•œ ํƒ€์ž…์€ ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค์˜ .spec.parameters ํ•„๋“œ์— ๋ช…์‹œํ•œ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค ๋ฒ”์œ„

์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ, ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„๋กœ ์„ค์ •ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋˜๋Š” ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ธฐ๋ณธ ๋ฒ”์œ„๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„์ด๋‹ค.

.spec.parameters ํ•„๋“œ๋งŒ ์„ค์ •ํ•˜๊ณ  .spec.parameters.scope ํ•„๋“œ๋Š” ์ง€์ •ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, .spec.parameters.scope ํ•„๋“œ๋ฅผ Cluster๋กœ ์ง€์ •ํ•˜๋ฉด, ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ kind(+apiGroup)๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„์˜ API (์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค์ผ ์ˆ˜๋„ ์žˆ์Œ) ๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ, ํŒŒ๋ผ๋ฏธํ„ฐ์˜ name์€ ํ•ด๋‹น API์— ๋Œ€ํ•œ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: external-lb-1
spec:
  controller: example.com/ingress-controller
  parameters:
    # ์ด ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” "external-config-1" ๋ผ๋Š”
    # ClusterIngressParameter(API ๊ทธ๋ฃน k8s.example.net)์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋‹ค.
    # ์ด ์ •์˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ 
    # ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋„๋ก ํ•œ๋‹ค.
    scope: Cluster
    apiGroup: k8s.example.net
    kind: ClusterIngressParameter
    name: external-config-1

FEATURE STATE: Kubernetes v1.23 [stable]

.spec.parameters ํ•„๋“œ๋ฅผ ์„ค์ •ํ•˜๊ณ  .spec.parameters.scope ํ•„๋“œ๋ฅผ Namespace๋กœ ์ง€์ •ํ•˜๋ฉด, ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์†ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ .spec.parameters ์˜ namespace ํ•„๋“œ์— ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ์˜ kind(+apiGroup)๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„์˜ API (์˜ˆ: ์ปจํ”ผ๊ทธ๋งต) ๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ, ํŒŒ๋ผ๋ฏธํ„ฐ์˜ name์€ namespace์— ๋ช…์‹œํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ, ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์ž๊ฐ€ ์›Œํฌ๋กœ๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ํ™˜๊ฒฝ ์„ค์ •(์˜ˆ: ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„ค์ •, API ๊ฒŒ์ดํŠธ์›จ์ด ์ •์˜)์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹น๋œ๋‹ค.

  • ๋‹ค๋ฅธ ํŒ€์˜ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ ์„ค์ • ๋ณ€๊ฒฝ์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜ ํŒ€์ด ๋งค๋ฒˆ ์Šน์ธ์„ ํ•ด์•ผ ํ•œ๋‹ค. ๋˜๋Š”,
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒ€์ด ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” RBAC ๋กค, ๋ฐ”์ธ๋”ฉ ๋“ฑ์˜ ํŠน๋ณ„ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์ž๊ฐ€ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค API ์ž์‹ ์€ ํ•ญ์ƒ ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ”์œ„์ด๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค ์˜ˆ์‹œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: external-lb-2
spec:
  controller: example.com/ingress-controller
  parameters:
    # ์ด ์ธ๊ทธ๋ ˆ์Šคํด๋ž˜์Šค์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” 
    # "external-configuration" ํ™˜๊ฒฝ ์„ค์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š”
    # "external-config" ๋ผ๋Š” IngressParameter(API ๊ทธ๋ฃน k8s.example.com)์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋‹ค.
    scope: Namespace
    apiGroup: k8s.example.com
    kind: IngressParameter
    namespace: external-configuration
    name: external-config

์‚ฌ์šฉ์ค‘๋‹จ(Deprecated) ์–ด๋…ธํ…Œ์ด์…˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค 1.18์— IngressClass ๋ฆฌ์†Œ์Šค ๋ฐ ingressClassName ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ธฐ ์ „์— ์ธ๊ทธ๋ ˆ์Šค ํด๋ž˜์Šค๋Š” ์ธ๊ทธ๋ ˆ์Šค์—์„œ kubernetes.io/ingress.class ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ง€์ •๋˜์—ˆ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ๊ณต์‹์ ์œผ๋กœ ์ •์˜๋œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋„๋ฆฌ ์ง€์›๋˜์—ˆ์—ˆ๋‹ค.

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

๊ธฐ๋ณธ IngressClass

ํŠน์ • IngressClass๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. IngressClass ๋ฆฌ์†Œ์Šค์—์„œ ingressclass.kubernetes.io/is-default-class ๋ฅผ true ๋กœ ์„ค์ •ํ•˜๋ฉด ingressClassName ํ•„๋“œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ์ƒˆ ์ธ๊ทธ๋ ˆ์Šค์—๊ฒŒ ๊ธฐ๋ณธ IngressClass๊ฐ€ ํ• ๋‹น๋œ๋‹ค.

๋ช‡๋ช‡ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ธฐ๋ณธ IngressClass๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Ingress-NGINX ์ปจํŠธ๋กค๋Ÿฌ๋Š” --watch-ingress-without-class ํ”Œ๋ž˜๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ๋ณธ IngressClass๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/component: controller
  name: nginx-example
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: k8s.io/ingress-nginx

์ธ๊ทธ๋ ˆ์Šค ์œ ํ˜•๋“ค

๋‹จ์ผ ์„œ๋น„์Šค๋กœ ์ง€์›๋˜๋Š” ์ธ๊ทธ๋ ˆ์Šค

๋‹จ์ผ ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์กด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐœ๋…์ด ์žˆ๋‹ค (๋Œ€์•ˆ์„ ๋ณธ๋‹ค). ์ธ๊ทธ๋ ˆ์Šค์— ๊ทœ์น™ ์—†์ด ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ ๋ฅผ ์ง€์ •ํ•ด์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  defaultBackend:
    service:
      name: test
      port:
        number: 80

๋งŒ์•ฝ kubectl apply -f ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€ํ•œ ์ธ๊ทธ๋ ˆ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

kubectl get ingress test-ingress
NAME           CLASS         HOSTS   ADDRESS         PORTS   AGE
test-ingress   external-lb   *       203.0.113.123   80      59s

์—ฌ๊ธฐ์„œ 203.0.113.123 ๋Š” ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ• ๋‹นํ•œ IP ์ด๋‹ค.

๊ฐ„๋‹จํ•œ ํŒฌ์•„์›ƒ(fanout)

ํŒฌ์•„์›ƒ ๊ตฌ์„ฑ์€ HTTP URI์—์„œ ์š”์ฒญ๋œ ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ผ IP ์ฃผ์†Œ์—์„œ 1๊ฐœ ์ด์ƒ์˜ ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ… ํ•œ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ค์ •์„ ํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ
์ธ๊ทธ๋ ˆ์Šค-๋งค๋‹ˆ์ง€๋“œ
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
/foo
/bar
์ธ๊ทธ๋ ˆ์Šค, 178.91.123.132
ํŒŒ๋“œ
์„œ๋น„์Šค service1:4200
ํŒŒ๋“œ
ํŒŒ๋“œ
์„œ๋น„์Šค service2:8080
ํŒŒ๋“œ
ํด๋ผ์ด์–ธํŠธ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ๊ทธ๋ ˆ์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-fanout-example
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 4200
      - path: /bar
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 8080

kubectl apply -f ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์ƒ์„ฑ ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

kubectl describe ingress simple-fanout-example
Name:             simple-fanout-example
Namespace:        default
Address:          178.91.123.132
Default backend:  default-http-backend:80 (10.8.2.3:8080)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com
               /foo   service1:4200 (10.8.0.90:4200)
               /bar   service2:8080 (10.8.0.91:8080)
Events:
  Type     Reason  Age                From                     Message
  ----     ------  ----               ----                     -------
  Normal   ADD     22s                loadbalancer-controller  default/test

์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋น„์Šค(service1, service2)๊ฐ€ ์กด์žฌํ•˜๋Š” ํ•œ, ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ํŠน์ •ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ์ฃผ์†Œ ํ•„๋“œ์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ์ฃผ์†Œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฆ„ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ…

์ด๋ฆ„ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๋Š” ๋™์ผํ•œ IP ์ฃผ์†Œ์—์„œ ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ HTTP ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ
์ธ๊ทธ๋ ˆ์Šค-๋งค๋‹ˆ์ง€๋“œ
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
ํ˜ธ์ŠคํŠธ: foo.bar.com
ํ˜ธ์ŠคํŠธ: bar.foo.com
์ธ๊ทธ๋ ˆ์Šค, 178.91.123.132
ํŒŒ๋“œ
์„œ๋น„์Šค service1:80
ํŒŒ๋“œ
ํŒŒ๋“œ
์„œ๋น„์Šค service2:80
ํŒŒ๋“œ
ํด๋ผ์ด์–ธํŠธ

๋‹ค์Œ ์ธ๊ทธ๋ ˆ์Šค๋Š” ํ˜ธ์ŠคํŠธ ํ—ค๋”์— ๊ธฐ๋ฐ˜ํ•œ ์š”์ฒญ์„ ๋ผ์šฐํŒ… ํ•˜๊ธฐ ์œ„ํ•ด ๋’ท๋‹จ์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: bar.foo.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service2
            port:
              number: 80

๋งŒ์•ฝ ๊ทœ์น™์— ์ •์˜๋œ ํ˜ธ์ŠคํŠธ ์—†์ด ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๊ฐ€ ์—†์–ด๋„ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์˜ IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ์›น ํŠธ๋ž˜ํ”ฝ์„ ์ผ์น˜ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ธ๊ทธ๋ ˆ์Šค๋Š” first.bar.com์— ์š”์ฒญ๋œ ํŠธ๋ž˜ํ”ฝ์„ service1๋กœ, second.bar.com๋Š” service2๋กœ, ๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ ํ—ค๋”๊ฐ€ first.bar.com ๋˜๋Š” second.bar.com์— ํ•ด๋‹น๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ service3๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: name-virtual-host-ingress-no-third-host
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: second.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service2
            port:
              number: 80
  - http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service3
            port:
              number: 80

TLS

TLS ๊ฐœ์ธ ํ‚ค ๋ฐ ์ธ์ฆ์„œ๊ฐ€ ํฌํ•จ๋œ ์‹œํฌ๋ฆฟ(Secret)์„ ์ง€์ •ํ•ด์„œ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋Š” ๋‹จ์ผ TLS ํฌํŠธ์ธ 443๋งŒ ์ง€์›ํ•˜๊ณ  ์ธ๊ทธ๋ ˆ์Šค ์ง€์ ์—์„œ TLS ์ข…๋ฃŒ๋ฅผ ๊ฐ€์ •ํ•œ๋‹ค(์„œ๋น„์Šค ๋ฐ ํ•ด๋‹น ํŒŒ๋“œ์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์ž„). ์ธ๊ทธ๋ ˆ์Šค์˜ TLS ๊ตฌ์„ฑ ์„น์…˜์—์„œ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด, SNI TLS ํ™•์žฅ์„ ํ†ตํ•ด ์ง€์ •๋œ ํ˜ธ์ŠคํŠธ์ด๋ฆ„์— ๋”ฐ๋ผ ๋™์ผํ•œ ํฌํŠธ์—์„œ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ ๋œ๋‹ค(์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ SNI๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ). TLS secret์—๋Š” tls.crt ์™€ tls.key ๋ผ๋Š” ์ด๋ฆ„์˜ ํ‚ค๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ , ์—ฌ๊ธฐ์—๋Š” TLS์— ์‚ฌ์šฉํ•  ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

apiVersion: v1
kind: Secret
metadata:
  name: testsecret-tls
  namespace: default
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
type: kubernetes.io/tls

์ธ๊ทธ๋ ˆ์Šค์—์„œ ์‹œํฌ๋ฆฟ์„ ์ฐธ์กฐํ•˜๋ฉด ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ TLS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์ฑ„๋„์„ ๋ณดํ˜ธํ•˜๋„๋ก ์ง€์‹œํ•œ๋‹ค. ์ƒ์„ฑํ•œ TLS ์‹œํฌ๋ฆฟ์ด https-example.foo.com ์˜ ์ •๊ทœํ™” ๋œ ๋„๋ฉ”์ธ ์ด๋ฆ„(FQDN)์ด๋ผ๊ณ  ํ•˜๋Š” ์ผ๋ฐ˜ ์ด๋ฆ„(CN)์„ ํฌํ•จํ•˜๋Š” ์ธ์ฆ์„œ์—์„œ ์˜จ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
      - https-example.foo.com
    secretName: testsecret-tls
  rules:
  - host: https-example.foo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฐฑ์—”๋“œ ๊ฐ€์ค‘์น˜ ๊ตฌ์„ฑํ‘œ ๋“ฑ ๋ชจ๋“  ์ธ๊ทธ๋ ˆ์Šค์— ์ ์šฉ๋˜๋Š” ์ผ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ •์ฑ… ์„ค์ •์œผ๋กœ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ๋œ๋‹ค. ๋ณด๋‹ค ์ง„๋ณด๋œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ฐœ๋… (์˜ˆ: ์ง€์†์ ์ธ ์„ธ์…˜, ๋™์  ๊ฐ€์ค‘์น˜)์€ ์•„์ง ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ํ†ตํ•ด ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋…ธ์ถœ๋˜์ง€ ์•Š๋”๋ผ๋„, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—๋Š” ์ค€๋น„ ์ƒํƒœ ํ”„๋กœ๋ธŒ์™€ ๊ฐ™์€ ๋™์ผํ•œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ณ‘๋ ฌ ๊ฐœ๋…์ด ์žˆ๋‹ค๋Š” ์ ๋„ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ๋ณ„ ์„ค๋ช…์„œ๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•œ๋‹ค(์˜ˆ: nginx, ๋˜๋Š” GCE).

์ธ๊ทธ๋ ˆ์Šค ์—…๋ฐ์ดํŠธ

๊ธฐ์กด ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์„œ ์ƒˆ ํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด, ๋ฆฌ์†Œ์Šค๋ฅผ ํŽธ์ง‘ํ•ด์„œ ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl describe ingress test
Name:             test
Namespace:        default
Address:          178.91.123.132
Default backend:  default-http-backend:80 (10.8.2.3:8080)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com
               /foo   service1:80 (10.8.0.90:80)
Annotations:
  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type     Reason  Age                From                     Message
  ----     ------  ----               ----                     -------
  Normal   ADD     35s                loadbalancer-controller  default/test
kubectl edit ingress test

YAML ํ˜•์‹์˜ ๊ธฐ์กด ๊ตฌ์„ฑ์ด ์žˆ๋Š” ํŽธ์ง‘๊ธฐ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ƒˆ ํ˜ธ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค.

spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          service:
            name: service1
            port:
              number: 80
        path: /foo
        pathType: Prefix
  - host: bar.baz.com
    http:
      paths:
      - backend:
          service:
            name: service2
            port:
              number: 80
        path: /foo
        pathType: Prefix
..

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•œ ํ›„, kubectl์€ API ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉฐ, ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ๋„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋„๋ก ์ง€์‹œํ•œ๋‹ค.

์ด๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

kubectl describe ingress test
Name:             test
Namespace:        default
Address:          178.91.123.132
Default backend:  default-http-backend:80 (10.8.2.3:8080)
Rules:
  Host         Path  Backends
  ----         ----  --------
  foo.bar.com
               /foo   service1:80 (10.8.0.90:80)
  bar.baz.com
               /foo   service2:80 (10.8.0.91:80)
Annotations:
  nginx.ingress.kubernetes.io/rewrite-target:  /
Events:
  Type     Reason  Age                From                     Message
  ----     ------  ----               ----                     -------
  Normal   ADD     45s                loadbalancer-controller  default/test

์ˆ˜์ •๋œ ์ธ๊ทธ๋ ˆ์Šค YAML ํŒŒ์ผ์„ kubectl replace -f ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์šฉ์„ฑ ์˜์—ญ์— ์ „์ฒด์—์„œ์˜ ์‹คํŒจ

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

๋Œ€์•ˆ

์‚ฌ์šฉ์ž๋Š” ์ธ๊ทธ๋ ˆ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ๋‚ด์šฉ

์ตœ์ข… ์ˆ˜์ • March 25, 2022 at 10:37 AM PST: [ko] Update links in dev-1.23-ko.2 (9e6b2ef46a)