Ingress nginx

svc๋ฅผ ingress๋กœ ์™ธ๋ถ€์— ์˜คํ”ˆ

regex

https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching/

  • priority

    In NGINX, regular expressions follow a first match policy, ๊ทธ๋Ÿฌ๋ฏ€๋กœ ingress nginx๊ฐ€ ์ •๊ทœ์‹์˜ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•œํ›„ controller์— ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress-1
spec:
  rules:
    - host: test.com
      http:
        paths:
          - path: /foo/bar
            backend:
              serviceName: service1
              servicePort: 80
          - path: /foo/bar/
            backend:
              serviceName: service2
              servicePort: 80

์ด ๊ฐ™์€ ํŒŒ์ผ์ด ๋‘๊ฐœ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ ฌ

  • test.com/foo/bar/1 matches ~* ^/foo/bar/.+ and will go to service 3.

  • test.com/foo/bar/ matches ~* ^/foo/bar/ and will go to service 2.

  • test.com/foo/bar matches ~* ^/foo/bar and will go to service 1.

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ๊ฐ™์€ yaml์„ ๋งŒ๋“ค์–ด์„œ ์ ์šฉํ•˜์—ฟ๋‹ค.

๊ฒฐ๊ณผ ์ƒ์„ฑ๋œ ํŒŒ์ผ์ด๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ์ด์•ผ๊ธฐํ•˜๋ฉด ingress์— rewrite๋ฅผ ์“ฐ๋ฉด ๊ทธ ์ธ๊ทธ๋ ˆ์Šค์—๋งŒ ์ ์šฉ์ด ๋œ๋‹ค. ์•„๋ž˜๋ณด๋ฉด /api๋ถ€๋ถ„์—๋งŒ rewrite $1 ๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์ž‡์„์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

test.com/foo/bar/bar ์ด๊ฑธ ์š”์ฒญํ•˜๋ฉด ^/foo/bar/[A-Z0-9]{3} ์—ฌ๊ธฐ์— ๊ฑธ๋ ค๋ฒ„๋ฆฐ๋‹ค. ์›ํ•˜๋Š”๋Œ€๋กœ ์•ˆ๋œ๋‹ค.

๋” ์•Œ๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฝ์–ด๋ณด๋ฉด๋œ๋‹ค.

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms

log - 2022-09-11

๋กœ๊ทธ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ด€๋ จ ๋„ํ๋จผํŠธ๋Š” ๋‹ค์Œ์—์„œ ์–ป์„์ˆ˜ ์žˆ๋‹ค.

log-format์€ ํฐ ๋„์›€์ด ์•ˆ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ 2๋ฒˆ์„ ์ฐธ๊ณ ํ•ด์„œ ์ง„ํ–‰ํ–‡๋‹ค.

configmap์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๋Š”๊ฒƒ์ธ๋ฐ helm์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ์–ด๋””์— ์ถ”๊ฐ€ํ•˜๋Š”์ง€ ์ƒ˜ํ”Œ์ด ์—†์–ด์„œ ๊ณ ์ƒํ–‡๋‹ค.

heml์ฐจํŠธ์— ๋ณด๋ฉด ๋‹ค์Œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

์ฃผ์„์ฒ˜๋ฆฌํ›„ ์•„๋ž˜์ฒ˜๋Ÿผ ์ถ”๊ฐ€ configmap๊ด€๋ จ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ–‡๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ• ๊ฑด log-format-upstream์„ ์ˆ˜์ •ํ•ด์•ผ๋œ๋‹ค.

์•„๋ž˜ ๋ณด์ด๋Š” log-format-stream์„ ๊ฐ€์ง€๊ณ  ์•„๋ฌด๋ฆฌ ํ•ด๋„ ์ ์šฉ๋˜์ง€๊ฐ€ ์•Š์•—๋‹ค. log-format-upstream์„ ์‚ฌ์šฉํ•˜๋Š”๊ฑธ ๋ณด๊ณ  ์ ์šฉํ•ด๋ณด๋‹ˆ ์ž˜ ๋˜์—ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ๋Š” ๋กœ๊ทธ์— ingress name์„ ์ถ”๊ฐ€๋กœ ๋„ฃ๊ณ  ์‹ถ์—‡๋‹ค. ํ™•์ธํ•ด๋ณด๋‹ˆ 1๋ฒˆ ๋ฌธ์„œ์—์„œ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ–‡๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ๋Š” ๊ณ ๊ฐ ์•„์ดํ”ผ๋Š” ์ค‘์š”ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๊ณ  ๋กœ์ปฌ ์‹œ๊ฐ„๋„ ์ค‘์š”์น˜ ์•Š์•„์„œ ์ œ๊ฑฐํ•˜๊ณ  ์ธ๊ทธ๋ ˆ์Šค ์ด๋ฆ„์„ ๋งจ ์ฒ˜์Œ์— ๋„ฃ์–ด์ฃผ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ–‡๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ๋‚˜์˜ค๋Š”๊ฒƒ์„ ํ™•์ธํ–‡๋‹ค.

loki์—์„œ ํ™•์ธํ•ด๋ณด๊ธฐ

์ด์ œ ๋กœ๊ทธ๋ฅผ ๋กœํ‚ค์—์„œ ํ™•์ธํ•ด๋ณด์ž.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ingress name๋ณ„๋กœ ํ•„ํ„ฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

grafana dash board

์•„๋ž˜์ฒ˜๋Ÿผ dashboard๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•—๋‹ค.

์œ„์— ๋‘ ๊ทธ๋ž˜ํ”„๋Š” ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค์—์„œ ๋ฉ”ํŠธ๋ฆญ์„ ๊ฐ€์ ธ์™€์„œ ํ‘œํ˜„ํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ํ…Œ์ด๋ธ”์€ ๋กœํ‚ค์—์„œ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฟŒ๋ ค์ค€๋‹ค.

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ๋•Œ ์ด์ œ ๋กœ๊ทธ๋„ ํ•จ๊ป˜ ๋ณผ์ˆ˜๊ฐ€ ์žˆ์–ด์„œ ์ข‹๋‹ค.

๋ฐ์‹œ๋ณด๋“œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

log-format vs log-format-upstream

์•„์ง ์ž˜ ๋ชจ๋ฅด๋Š”๋ฐ ์ด ๋‹ค์ด์–ด๊ทธ๋žจ์ด ์ข€ ๋„์›€์ด ๋˜๋Š”๋“ฏ.

์ด๊ฑธ ํ•œ๋ฒˆ ์ž˜ ์ฝ์–ด๋ด์•ผ๊ฒŸ๋‹ค. https://www.nginx.com/blog/logging-upstream-nginx-traffic-cdn77/ ๊ทธ๋‚˜์ €๋‚˜ ingress-nginx๋Š” ์™œ upstream๋กœ๊ทธ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ• ๊ฐ€? ํ”„๋ก์‹œ๋‹ˆ๊นŒ ๋งž๋Š”๊ฒƒ๋„ ๊ฐ™๊ณ ...

helmchart ์‚ฌ์šฉ์ค‘ configmap์„ค์ •

helmchart๋ฅผ ์‚ฌ์šฉ์ค‘์— configmap์„ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋งค๋‰ด์–ผ๋“ฑ์ด ์ „๋ถ€ configmap๋งŒ ๋‚˜์˜ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•˜์ž.

helm chart ์— config์— ์„ค์ •์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์— ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ๋“ค์€ ๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•œ๋‹ค.

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#configuration-options

๊ฝค ๋งŽ์€ ์˜ต์…˜๋“ค์ด ์—ฌ๊ธฐ์—์„œ ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋‹ค.

values ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ›„ argocd์—์„œ ๋กœ๋”ฉ์„ ํ•˜๊ฑฐ๋‚˜ ์ ์šฉ์„ ํ•˜๋ฉด pod์— ์ž๋™์œผ๋กœ config๊ฐ€ reload๊ฐ€ ๋œ๋‹ค. ์ค‘์š”ํ•œ๊ฒƒ์€ pod๊ฐ€ ์žฌ์‹œ์ž‘ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์„ค์ •๋งŒ ์ž๋™์œผ๋กœ ๋ฆฌ๋กœ๋“œ ๋œ๋‹ค.

๋งŒ์•ฝ ์„ค์ •์ด ์ž˜๋ชป๋˜๋ฉด test fail ๋‚˜๋ฉด์„œ ๋ฆฌ๋กœ๋”ฉ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

todo

  • log-format-upstream ๊ณผ log-format์˜ ์ฐจ์ด์  ํŒŒ์•…ํ•˜๊ธฐ

  • dashboard๋ฅผ kube-prometheus์—์„œ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

Last updated

Was this helpful?