Ingress Controller

Ingress ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž‘๋™ ํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์— Ingress ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰ ์ค‘ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kube-controller-manager ๋ฐ”์ด๋„ˆ๋ฆฌ ์ผ๋ถ€๋กœ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋‹ฌ๋ฆฌ Ingress ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

AWS Load Balancer Controller

AWS ALB Ingress Controller๊ฐ€ AWS Load Balancer Controller๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

AWS Load Balancer Controller๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์šฉ Elastic Load Balancer๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” controller ์ž…๋‹ˆ๋‹ค.

  • Application Load Balancers๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Ingress ๋ฆฌ์†Œ์Šค๋ฅผ ์ถฉ์กฑ ํ•ฉ๋‹ˆ๋‹ค.

  • Network Load Balancers๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Service ๋ฆฌ์†Œ์Šค๋ฅผ ์ถฉ์กฑ ํ•ฉ๋‹ˆ๋‹ค.

AWS Load Balancer ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ง€์›ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋ชจ๋“œ๋Š” ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • Instance(default): ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋…ธ๋“œ๋ฅผ ALB์˜ ๋Œ€์ƒ์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ALB์— ๋„๋‹ฌํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์€ NodePort๋กœ ๋ผ์šฐํŒ…๋œ ๋‹ค์Œ ํŒŒ๋“œ๋กœ ํ”„๋ก์‹œ๋ฉ๋‹ˆ๋‹ค.

  • IP: ํŒŒ๋“œ๋ฅผ ALB ๋Œ€์ƒ์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ALB์— ๋„๋‹ฌํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์€ ํŒŒ๋“œ๋กœ ์ง์ ‘ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํŠธ๋ž˜ํ”ฝ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ingress.yaml ํŒŒ์ผ์— ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” Application Load Balancer์— ์ดˆ์ ์„ ๋งž์ถœ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AWS Elastic Load Balancing Application Load Balancer (ALB)๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์šฉ ์˜์—ญ์—์„œ Amazon EC2 ์ธ์Šคํ„ด์Šค์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋Œ€์ƒ์— ๊ฑธ์ณ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•˜๋Š” ์ž˜ ์•Œ๋ ค์ง„ AWS ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

ALB๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ง€์› ํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

  • TLS (Transport Layer Security) ํ„ฐ๋ฏธ๋„ค์ด์…˜, WebSocket

  • HTTP / 2

  • AWS WAF(Web Application Firewall) ํ†ตํ•ฉ

  • ํ†ตํ•ฉ ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ฐ ์ƒํƒœ ํ™•์ธ

1. AWS Load Balancer Controller ๋ฐฐํฌํ•˜๊ธฐ

๋จผ์ € AWS Load Balancer Controller ๋ฒ„์ „์ด ์„ค์ • ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค.

if [ ! -x ${LBC_VERSION} ]
  then
    tput setaf 2; echo '${LBC_VERSION} has been set.'
  else
    tput setaf 1;echo '${LBC_VERSION} has NOT been set.'
fi

Helm์„ ์‚ฌ์šฉํ•˜์—ฌ ALB Ingress Controller๋ฅผ ์„ค์น˜ ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € helm์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ•˜์‹ญ์‹œ์˜ค:

helm version --short

ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ IAM OIDC provider ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Pod์™€ ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ƒ์„ฑํ•œ ํ•ญ๋ชฉ์ด API Server ๋˜๋Š” ์™ธ๋ถ€ ์„œ๋น„์Šค์— ์ธ์ฆํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” service account์— IAM role์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ์ƒ์„ฑํ•œ ํด๋Ÿฌ์Šคํ„ฐ(ํ˜„์žฌ ์‹ค์Šต์—์„œ์˜ eks-demo)์— IAM OIDC provider๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

eksctl utils associate-iam-oidc-provider \
    --region ${AWS_REGION} \
    --cluster eksworkshop-eksctl \
    --approve

Amazon EKS ์„ค๋ช…์„œ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์˜ IAM Roles for Service Accounts์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.

AWS Load Balancer Controller์— ๋ถ€์—ฌํ•  AWSLoadBalancerControllerIAMPolicy ์ •์ฑ…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.3.0/docs/install/iam_policy.json
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json

AWS Load Balancer Controller๋ฅผ ์œ„ํ•œ ServiceAccount๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Account ID๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์Œ์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ IAM ์—ญํ• ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
eksctl create iamserviceaccount \
  --cluster eksworkshop-eksctl \
  --namespace kube-system \
  --name aws-load-balancer-controller \
  --attach-policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/AWSLoadBalancerControllerIAMPolicy \
  --override-existing-serviceaccounts \
  --approve

TargetGroupBinding CRDs ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

kubectl apply -k github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master

kubectl get crd

EKS repo๋กœ ๋ถ€ํ„ฐ helm ์ฐจํŠธ(AWS Load Balancer Controller)๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

helm repo add eks https://aws.github.io/eks-charts

helm upgrade -i aws-load-balancer-controller \
    eks/aws-load-balancer-controller \
    -n kube-system \
    --set clusterName=eksworkshop-eksctl \
    --set serviceAccount.create=false \
    --set serviceAccount.name=aws-load-balancer-controller \
    --set image.tag="${LBC_VERSION}"

kubectl -n kube-system rollout status deployment aws-load-balancer-controller

๋ฐฐํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl get deployment -n kube-system aws-load-balancer-controller

Last updated

Was this helpful?