KR_AWS_Ingress - somaz94/DevOps-Engineer GitHub Wiki

AWS ALB Ingress ์„ค์ •

2. Ingress Group

  • AWS์—์„œ ingress group์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ingress ๋ฆฌ์†Œ์Šค๋ฅผ ํ•˜๋‚˜์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(ALB)๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ Kubernetes ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ํŒ€์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ๊ฐ™์€ ALB๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ๋„ ๊ฐ๊ธฐ ๋‹ค๋ฅธ Ingress ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ingress group์„ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•˜๊ณ  ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ingress๋Š” ingress group์— ์†ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ingress๋Š” "implicit IngressGroup" ์ด๋ฉฐ ์ฆ‰, ๋…๋ฆฝ์ ์ธ ์—”ํ„ฐํ‹ฐ๋กœ ์กด์žฌํ•œ๋‹ค.

Ingress Group ์ด๋ฆ„ ์„ค์ •

  • alb.ingress.kubernetes.io/group.name ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน ์ด๋ฆ„์„ ์ •์˜ํ•œ๋‹ค.
  • ๋™์ผํ•œ ๊ทธ๋ฃน ์ด๋ฆ„์„ ๊ฐ€์ง„ ingress ๋ฆฌ์†Œ์Šค๋Š” ํ•˜๋‚˜์˜ ALB๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ingress group์— ํ• ๋‹น๋œ ALB๋Š” ingress.k8s.aws/stack ์ด์ด๋Š” AWS ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฐพ๋Š”๋‹ค.(๋ฆฌ์Šค๋„ˆ ๊ทœ์น™์˜ ํƒœ๊ทธ๋กœ ๋˜์–ด์žˆ์Œ) ์ด ํƒœ๊ทธ์˜ ๊ฐ’์œผ๋กœ IngressGroup์˜ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • ingress group์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๋“ค์€ ํƒœ๊ทธ ๊ฐ’์€ namespace/ingressname ํ˜•์‹์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ingress ๋ฆฌ์†Œ์Šค์— ํ• ๋‹น๋œ groupName์„ ๋ณ€๊ฒฝํ•˜๋ฉด, Ingress๋Š” ๊ธฐ์กด ๊ทธ๋ฃน์—์„œ ์ƒˆ๋กœ์šด IngressGroup์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ƒˆ๋กœ์šด IngressGroup์˜ ALB์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.
  • ๋งŒ์•ฝ ์ƒˆ๋กœ์šด IngressGroup์— ALB๊ฐ€ ์—†๋‹ค๋ฉด, ์ƒˆ๋กœ์šด ALB๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
  • ingress group์˜ ALB๋Š” ingress group์˜ ์ด๋ฆ„์„ ๊ฐ’์œผ๋กœ ํ•˜๋Š” AWS ํƒœ๊ทธ ingress.k8s.aws/ ์Šคํƒ ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • example: alb.ingress.kubernetes.io/group.name: my-team.awesome-group

Ingress Group ์ˆœ์œ„ ์„ค์ •

  • alb.ingress.kubernetes.io/group.order ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚ฎ์€ ์ˆซ์ž์˜ order ๊ฐ’์„ ๊ฐ€์ง„ ingress ๊ทœ์น™์ด ์šฐ์„  ์ ์šฉ๋˜๋ฉฐ, ๋™์ผํ•œ path๋‚˜ host์— ๋Œ€ํ•ด ํŠน์ • ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • example: alb.ingress.kubernetes.io/group.order: 10

Ingress Group ์˜ˆ์‹œ

์•„๋ž˜ ์˜ˆ์‹œ์—์„œ ๋‘ ๊ฐœ์˜ ingress ๋ฆฌ์†Œ์Šค๊ฐ€ my-shared-group ์ด๋ผ๋Š” ๊ทธ๋ฃน์„ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์–ด ํ•˜๋‚˜์˜ ALB์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

# Ingress for Service A
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-a-ingress
  annotations:
    alb.ingress.kubernetes.io/group.name: "my-shared-group"
    alb.ingress.kubernetes.io/group.order: "10"
spec:
  rules:
    - host: "service-a.example.com"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-a
                port:
                  number: 80

# Ingress for Service B
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-b-ingress
  annotations:
    alb.ingress.kubernetes.io/group.name: "my-shared-group"
    alb.ingress.kubernetes.io/group.order: "20"
spec:
  rules:
    - host: "service-b.example.com"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-b
                port:
                  number: 80
  • service-a ์™€ service-b ๊ฐ€ ๊ฐ๊ฐ ingress ๊ทธ๋ฃน my-shared-group ์— ์†ํ•˜๊ฒŒ ๋˜๋ฉฐ, service-a ๊ฐ€ order 10์œผ๋กœ ์šฐ์„  ์ ์šฉ๋œ๋‹ค.

Reference


3. Ingress Traffic Listening

listen-ports

  • ALB๊ฐ€ ์ˆ˜์‹ ํ•˜๋Š” ํฌํŠธ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • Example: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}, {"HTTP": 8080}, {"HTTPS": 8443}]'
  • IngressGroup ๋‚ด์˜ ๋ชจ๋“  Ingress์— ์ ์šฉ๋˜๋ฏ€๋กœ ๊ฐ Ingress๋Š” ๊ณ ์œ ํ•œ ํฌํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทœ์น™์€ ๊ฐ Ingress์— ์ง€์ •๋œ ํฌํŠธ์—๋งŒ ์ ์šฉ๋œ๋‹ค.
  • ๋™์ผํ•œ ์ˆ˜์‹  ํฌํŠธ๊ฐ€ IngressGroup ๋‚ด์˜ ์—ฌ๋Ÿฌ Ingress์— ์˜ํ•ด ์ •์˜๋œ ๊ฒฝ์šฐ IngressGroup์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ ์šฉ๋œ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’: listen-ports ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ธ์ฆ์„œ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ {"HTTP": 80} ์ด๊ณ  ์ธ์ฆ์„œ๊ฐ€ ์ œ๊ณต๋˜๋ฉด {"HTTPS": 443}์ด๋‹ค.
  • ๊ฒฝ๊ณ : ๋™์ผํ•œ ๊ทธ๋ฃน ๋‚ด์—์„œ๋Š” ์ค‘๋ณต๋œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ํฌํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. (์˜ˆ์™ธ : alb.ingress.kubernetes.io/group.order: 10 ์ง€์ •)
  • ALB๊ฐ€ ๊ทธ๋ฃน์˜ ๋ชจ๋“  Ingress์— ๋Œ€ํ•ด ์ด๋Ÿฌํ•œ ์„ค์ •์„ ํ†ตํ•ฉํ•˜๋ฏ€๋กœ IngressGroup ๋‚ด ํ•˜๋‚˜์˜ Ingress์—์„œ listen-ports ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.

ssl-redirect

  • HTTP ํŠธ๋ž˜ํ”ฝ์ด ๋ฆฌ๋””๋ ‰์…˜๋˜๋Š” ํฌํŠธ(์ผ๋ฐ˜์ ์œผ๋กœ HTTPS ํฌํŠธ 443)๋ฅผ ์ง€์ •ํ•˜์—ฌ SSL ๋ฆฌ๋””๋ ‰์…˜์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค.
  • Example: alb.ingress.kubernetes.io/ssl-redirect: '443'
  • SSL ๋ฆฌ๋””๋ ‰์…˜(ssl-redirect)๋Š” IngressGroup์— ์ •์˜๋œ ๊ฒฝ์šฐ ๊ทธ๋ฃน ๋‚ด์˜ ๋ชจ๋“  Ingress์— ์˜ํ–ฅ์„ ์ค€๋‹ค.
  • SSL ๋ฆฌ๋””๋ ‰์…˜์ด ํ™œ์„ฑํ™”๋˜๋ฉด ๋ชจ๋“  HTTP listener๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ HTTP ๊ทœ์น™์„ ๋ฌด์‹œํ•˜๊ณ  HTTPS๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ๋‹ค.

etc

  • alb.ingress.kubernetes.io/ip-address-type
    • ALB๊ฐ€ IPv4 ๋ฐ IPv6 ํŠธ๋ž˜ํ”ฝ ์ง€์›์„ ์œ„ํ•ด ipv4 ๋˜๋Š” dualstack ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Example: alb.ingress.kubernetes.io/ip-address-type: ipv4 or dualstack
    • ipv4: IPv4 ์ฃผ์†Œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ALB๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, IPv4 ํŠธ๋ž˜ํ”ฝ์„ ๋…์ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • dualstack: ALB๊ฐ€ IPv4 ๋ฐ IPv6 ํŠธ๋ž˜ํ”ฝ์„ ๋ชจ๋‘ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค. dualstack ์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ALB๋Š” IPv4 ๋ฐ IPv6 ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์–ด ๋‘ ์ฃผ์†Œ ์œ ํ˜• ๋ชจ๋‘์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • alb.ingress.kubernetes.io/customer-owned-ipv4-pool
    • Outpost ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•  ๋•Œ ALB์— ๋Œ€ํ•œ ๊ณ ๊ฐ ์†Œ์œ  IPv4 ์ฃผ์†Œ ํ’€์„ ์ง€์ •ํ•œ๋‹ค.
    • ๊ฒฝ๊ณ : ์ด ์ฃผ์„์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•˜๋ ค๋ฉด Ingress๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
    • Example: alb.ingress.kubernetes.io/customer-owned-ipv4-pool: ipv4pool-coip-xxxxxxx

Reference


4. Ingress Traffic Routing

  • alb.ingress.kubernetes.io/load-balancer-name
    • IngressGroup ๋‚ด์˜ ๋ชจ๋“  Ingress๋Š” ๋™์ผํ•œ load balancer ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ์ด๋ฆ„์€ 32์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ดˆ๊ณผ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • alb.ingress.kubernetes.io/target-type
    • instance ๋ชจ๋“œ๋Š” ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์—ด๋ฆฐ NodePort์˜ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ชจ๋“  ec2 ์ธ์Šคํ„ด์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค.
    • instance ๋ชจ๋“œ ์‚ฌ์šฉ์‹œ์—๋Š” ์„œ๋น„์Šค๋Š” ๋ฐ˜๋“œ์‹œ NodePort or Loadbalancer type์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ip ๋ชจ๋“œ๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ pod๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.
    • ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ pod IP๊ฐ€ ip ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ENI์˜ ๋ณด์กฐ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • amazon-vpc-cni-k8s
    • sticky session์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ ค๋ฉด ip ๋ชจ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ip ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์„œ๋น„์Šค ์œ ํ˜•์€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.
  • alb.ingress.kubernetes.io/target-node-labels
    • ์ธ์Šคํ„ด์Šค ๋Œ€์ƒ ์œ ํ˜•์˜ target group ๋“ฑ๋ก์— ํฌํ•จํ•  ๋…ธ๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
    • Example: alb.ingress.kubernetes.io/target-node-labels: label1=value1, label2=value2
  • alb.ingress.kubernetes.io/backend-protocol
    • ํŠธ๋ž˜ํ”ฝ์„ ํŒŒ๋“œ๋กœ ๋ผ์šฐํŒ…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•œ๋‹ค.
  • alb.ingress.kubernetes.io/backend-protocol-version
    • ํŠธ๋ž˜ํ”ฝ์„ ํฌ๋“œ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•œ๋‹ค. HTTP ๋˜๋Š” HTTPS๊ฐ€ ๋ฐฑ์—”๋“œ ํ”„๋กœํ† ์ฝœ๋กœ ์‚ฌ์šฉ๋  ๋•Œ๋งŒ ์œ ํšจํ•˜๋‹ค.
    • Example:
      • alb.ingress.kubernetes.io/backend-protocol-version: HTTP2
      • alb.ingress.kubernetes.io/backend-protocol-version: GRPC
  • alb.ingress.kubernetes.io/actions.${action-name}
    • redirection ์ž‘์—…๊ณผ ๊ฐ™์ด loadbalancer listener ๊ทœ์น™์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
    • annotation์˜ serviceName์€ ingress rule์˜ serviceName๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•˜๋ฉฐ, servicePort๋Š” ๋ฌด์กฐ๊ฑด use-annotation ์„ ์ค˜์•ผ ํ•œ๋‹ค.
  • alb.ingress.kubernetes.io/conditions.${conditions-name}
    • ingress์˜ ํ˜ธ์ŠคํŠธ/๊ฒฝ๋กœ ์กฐ๊ฑด ์™ธ์— ๋ผ์šฐํŒ… ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
    • annotation์˜ serviceName์€ ingress rule์˜ serviceName๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•˜๋ฉฐ, servicePort๋Š” ๋ฌด์กฐ๊ฑด use-annotation ์„ ์ค˜์•ผ ํ•œ๋‹ค.
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    namespace: default
    name: ingress
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/actions.rule-path1: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"Host is www.example.com OR anno.example.com"}}
      alb.ingress.kubernetes.io/conditions.rule-path1: >
        [{"field":"host-header","hostHeaderConfig":{"values":["anno.example.com"]}}]
      alb.ingress.kubernetes.io/actions.rule-path2: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"Path is /path2 OR /anno/path2"}}
      alb.ingress.kubernetes.io/conditions.rule-path2: >
        [{"field":"path-pattern","pathPatternConfig":{"values":["/anno/path2"]}}]
      alb.ingress.kubernetes.io/actions.rule-path3: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"Http header HeaderName is HeaderValue1 OR HeaderValue2"}}
      alb.ingress.kubernetes.io/conditions.rule-path3: >
        [{"field":"http-header","httpHeaderConfig":{"httpHeaderName": "HeaderName", "values":["HeaderValue1", "HeaderValue2"]}}]
      alb.ingress.kubernetes.io/actions.rule-path4: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"Http request method is GET OR HEAD"}}
      alb.ingress.kubernetes.io/conditions.rule-path4: >
        [{"field":"http-request-method","httpRequestMethodConfig":{"Values":["GET", "HEAD"]}}]
      alb.ingress.kubernetes.io/actions.rule-path5: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"Query string is paramA:valueA1 OR paramA:valueA2"}}
      alb.ingress.kubernetes.io/conditions.rule-path5: >
        [{"field":"query-string","queryStringConfig":{"values":[{"key":"paramA","value":"valueA1"},{"key":"paramA","value":"valueA2"}]}}]
      alb.ingress.kubernetes.io/actions.rule-path6: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"Source IP is 192.168.0.0/16 OR 172.16.0.0/16"}}
      alb.ingress.kubernetes.io/conditions.rule-path6: >
        [{"field":"source-ip","sourceIpConfig":{"values":["192.168.0.0/16", "172.16.0.0/16"]}}]
      alb.ingress.kubernetes.io/actions.rule-path7: >
        {"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"200","messageBody":"multiple conditions applies"}}
      alb.ingress.kubernetes.io/conditions.rule-path7: >
        [{"field":"http-header","httpHeaderConfig":{"httpHeaderName": "HeaderName", "values":["HeaderValue"]}},{"field":"query-string","queryStringConfig":{"values":[{"key":"paramA","value":"valueA"}]}},{"field":"query-string","queryStringConfig":{"values":[{"key":"paramB","value":"valueB"}]}}]
  spec:
    ingressClassName: alb
    rules:
      - host: www.example.com
        http:
          paths:
            - path: /path1
              pathType: Exact
              backend:
                service:
                  name: rule-path1
                  port:
                    name: use-annotation
            - path: /path2
              pathType: Exact
              backend:
                service:
                  name: rule-path2
                  port:
                    name: use-annotation
            - path: /path3
              pathType: Exact
              backend:
                service:
                  name: rule-path3
                  port:
                    name: use-annotation
            - path: /path4
              pathType: Exact
              backend:
                service:
                  name: rule-path4
                  port:
                    name: use-annotation
            - path: /path5
              pathType: Exact
              backend:
                service:
                  name: rule-path5
                  port:
                    name: use-annotation
            - path: /path6
              pathType: Exact
              backend:
                service:
                  name: rule-path6
                  port:
                    name: use-annotation
            - path: /path7
              pathType: Exact
              backend:
                service:
                  name: rule-path7
                  port:
                    name: use-annotation

Reference


5. Ingress Access Control

  • alb.ingress.kubernetes.io/scheme
    • AWS Application Load Balancer(ALB)์™€ ํ•จ๊ป˜ Kubernetes Ingress ๊ตฌ์„ฑ์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ Access ์œ ํ˜•์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์ฃผ์„์€ ALB๊ฐ€ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ(ํผ๋ธ”๋ฆญ)์ธ์ง€ ๋‚ด๋ถ€(ํ”„๋ผ์ด๋น—)์ธ์ง€ ์—ฌ๋ถ€๋ฅผ AWS์— ์•Œ๋ ค์ค€๋‹ค.
    • internet-facing: ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ALB์— ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • internal: ALB๊ฐ€ VPC ๋˜๋Š” ์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ๋งŒ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•˜์—ฌ ๋น„๊ณต๊ฐœ๋กœ ๋งŒ๋“ ๋‹ค.
  • alb.ingress.kubernetes.io/inbound-cidrs
    • ์ง€์ •๋œ IP ๋ฒ”์œ„(CIDR)๋งŒ ์—ฐ๊ฒฐํ•˜๋„๋ก ํ—ˆ์šฉํ•˜์—ฌ ALB์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•œ๋‹ค.
    • ALB์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” IP ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜์—ฌ ๊ฐœ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฐ ํŠนํžˆ ์œ ์šฉํ•˜๋‹ค.
    • Ingress๊ฐ€ IngressGroup์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ inbound-cidrs ์ฃผ์„์€ ๊ทธ๋ฃน์˜ ๋ชจ๋“  Ingress ๋ฆฌ์†Œ์Šค์— ์ ์šฉ๋œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ inbound-cidrs ์€ ํ•ด๋‹น Ingress์— ์ •์˜๋œ ํฌํŠธ์—๋งŒ ์ ์šฉ๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ์ธ๊ทธ๋ ˆ์Šค๊ฐ€ ๋™์ผํ•œ ์ˆ˜์‹  ํฌํŠธ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํ•ด๋‹น ์ธ๊ทธ๋ ˆ์Šค ์ค‘ ํ•˜๋‚˜์—๋งŒ inbound-cidrs ์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
    • Ingress์—์„œ alb.ingress.kubernetes.io/security-groups์„ ์ง€์ •ํ•˜๋ฉด inbound-cidrs ์ฃผ์„์ด ๋ฌด์‹œ๋œ๋‹ค.
    • inbound-cidrs ์ฃผ์„์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ:
      • ALB์˜ IPAddressType ์ด ipv4๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ 0.0.0.0/0 (๋ชจ๋“  IPv4 ์ฃผ์†Œ)๊ฐ€ ํ—ˆ์šฉ๋œ๋‹ค.
      • ALB์˜ IPAddressType ์ด dualstack์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ 0.0.0.0/0 ๋ฐ ::/0 (๋ชจ๋“  IPv4 ๋ฐ IPv6 ์ฃผ์†Œ)๊ฐ€ ํ—ˆ์šฉ๋œ๋‹ค.
  • alb.ingress.kubernetes.io/security-groups
    • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ์—ฐ๊ฒฐํ•  ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•ด๋‹น annotation์ด ์—†์œผ๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํ•˜๋‚˜์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณด์•ˆ ๊ทธ๋ฃน์ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ์—ฐ๊ฒฐ๋˜๋ฉฐ inbound-cidrs ๊ณผ security-group-prefix-lists ์— listen-ports ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค. ๋˜ํ•œ Node/Pod ๋ณด์•ˆ ๊ทธ๋ฃน์€ ์ด ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค. ์ฆ‰, ๋‚ด๊ฐ€ ์ƒ์„ฑํ•œ ๋ณด์•ˆ๊ทธ๋ฃน์„ Pod์™€ Node์— ์ ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
    • Example: alb.ingress.kubernetes.io/security-groups: sg-xxxx, nameOfSg1, nameOfSg2
  • alb.ingress.kubernetes.io/manage-backend-security-group-rules
    • ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ง€์ •ํ•  ๋•Œ ํŠธ๋ž˜ํ”ฝ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ Node/Pod์— ๋ณด์•ˆ ๊ทธ๋ฃน ๊ทœ์น™์„ ๊ตฌ์„ฑํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•œ๋‹ค.
    • alb.ingress.kubernetes.io/security-groups ์„ ํ†ตํ•ด ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋œ๋‹ค.
    • Example: alb.ingress.kubernetes.io/manage-backend-security-group-rules: "true"

Reference


โ†’ ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ