AWS Load Balancer Controller 퀴즈

이 퀴즈는 AWS Load Balancer Controller의 아키텍처, ALB/NLB 설정, 그리고 운영에 대한 이해를 테스트합니다.

퀴즈 문제

1. AWS Load Balancer Controller가 대체하는 기존 Kubernetes 컴포넌트는?

A. kube-proxy B. in-tree AWS 클라우드 프로바이더 C. CoreDNS D. CNI 플러그인

chevron-right정답 및 설명hashtag

정답: B. in-tree AWS 클라우드 프로바이더

설명: AWS Load Balancer Controller는 기존 Kubernetes in-tree AWS 클라우드 프로바이더의 로드밸런서 기능을 대체합니다:

  • 더 많은 기능 (ALB, NLB 고급 설정)

  • 더 빠른 업데이트 및 버그 수정

  • AWS 서비스와의 더 나은 통합

in-tree 프로바이더는 기본적인 ELB Classic만 지원했지만, AWS Load Balancer Controller는 ALB와 NLB의 모든 기능을 지원합니다.

2. ALB Ingress에서 target-type annotation의 ipinstance 차이점으로 올바른 것은?

A. ip는 Pod IP를 직접 타겟으로, instance는 NodePort를 통해 라우팅 B. ip는 NodePort를 통해 라우팅, instance는 Pod IP를 직접 타겟으로 C. 두 옵션 모두 동일한 방식으로 동작함 D. ip는 IPv4만, instance는 IPv6만 지원

chevron-right정답 및 설명hashtag

정답: A. ip는 Pod IP를 직접 타겟으로, instance는 NodePort를 통해 라우팅

설명: Target Type 비교:

Target Type
동작 방식
장점
단점

ip

Pod IP 직접 등록

낮은 지연, 효율적

VPC CNI 필요

instance

Node의 NodePort로 라우팅

범용적

추가 홉 발생

ip 타입 사용 시 AWS VPC CNI가 필요하며, Pod IP가 직접 Target Group에 등록됩니다.

3. AWS Load Balancer Controller에서 IRSA(IAM Roles for Service Accounts)가 필요한 이유는?

A. Pod 간 통신을 위해 B. 컨트롤러가 AWS API를 호출하여 리소스를 생성/관리하기 위해 C. Kubernetes API 서버 인증을 위해 D. TLS 인증서 관리를 위해

chevron-right정답 및 설명hashtag

정답: B. 컨트롤러가 AWS API를 호출하여 리소스를 생성/관리하기 위해

설명: AWS Load Balancer Controller는 다음 작업을 위해 AWS API를 호출해야 합니다:

  • ALB/NLB 생성 및 관리

  • Target Group 생성 및 타겟 등록

  • Listener 및 규칙 설정

  • 보안 그룹 관리

  • ACM 인증서 조회

IRSA를 통해 Service Account에 IAM Role을 연결하면:

  • Pod가 AWS API에 인증 가능

  • 최소 권한 원칙 적용

  • 노드 전체가 아닌 특정 Pod에만 권한 부여

4. ALB Ingress에서 여러 Ingress 리소스를 하나의 ALB로 통합하는 방법은?

A. 같은 namespace에 배포 B. alb.ingress.kubernetes.io/group.name annotation 사용 C. 같은 IngressClass 사용 D. ALB는 항상 하나의 Ingress만 지원

chevron-right정답 및 설명hashtag

정답: B. alb.ingress.kubernetes.io/group.name annotation 사용

설명: Ingress Group 기능:

장점:

  • ALB 비용 절감 (여러 서비스가 하나의 ALB 공유)

  • 중앙집중화된 관리

  • 순서 지정으로 규칙 우선순위 제어

5. NLB Service에서 TLS 종료를 구현하기 위한 annotation은?

A. service.beta.kubernetes.io/aws-load-balancer-ssl-cert B. alb.ingress.kubernetes.io/certificate-arn C. service.beta.kubernetes.io/aws-load-balancer-tls-termination D. nlb.kubernetes.io/ssl-certificate

chevron-right정답 및 설명hashtag

정답: A. service.beta.kubernetes.io/aws-load-balancer-ssl-cert

설명: NLB TLS 종료 설정:

alb.ingress.kubernetes.io/certificate-arn은 ALB Ingress용 annotation입니다.

6. TargetGroupBinding CRD의 주요 용도는?

A. 새로운 Target Group을 자동으로 생성 B. 기존 AWS Target Group을 Kubernetes Service와 연결 C. ALB Listener 규칙 정의 D. 보안 그룹 자동 생성

chevron-right정답 및 설명hashtag

정답: B. 기존 AWS Target Group을 Kubernetes Service와 연결

설명: TargetGroupBinding 사용 사례:

  1. 기존 인프라 마이그레이션 - 이미 존재하는 Target Group 활용

  2. 여러 클러스터 공유 - 하나의 ALB/NLB를 여러 클러스터에서 사용

  3. 직접 Target Group 관리가 필요한 경우

7. ALB Ingress에서 WAF v2를 연동하기 위한 annotation은?

A. alb.ingress.kubernetes.io/waf-acl-id B. alb.ingress.kubernetes.io/wafv2-acl-arn C. alb.ingress.kubernetes.io/web-acl D. alb.ingress.kubernetes.io/firewall-rules

chevron-right정답 및 설명hashtag

정답: B. alb.ingress.kubernetes.io/wafv2-acl-arn

설명: AWS WAF v2 연동:

WAF v2 기능:

  • SQL 인젝션, XSS 보호

  • Rate limiting

  • IP 기반 차단/허용

  • 커스텀 규칙

컨트롤러 설치 시 enableWafv2: true 설정 필요.

8. AWS Load Balancer Controller에서 서브넷 자동 감지를 위한 태그는?

A. kubernetes.io/cluster/<cluster-name>=owned B. kubernetes.io/role/elb=1 (퍼블릭), kubernetes.io/role/internal-elb=1 (프라이빗) C. aws:cloudformation:stack-name D. Name=kubernetes-subnet

chevron-right정답 및 설명hashtag

정답: B. kubernetes.io/role/elb=1 (퍼블릭), kubernetes.io/role/internal-elb=1 (프라이빗)

설명: 서브넷 태깅 규칙:

태그가 없으면 컨트롤러가 적절한 서브넷을 찾지 못해 로드밸런서 생성에 실패할 수 있습니다.

9. ALB Ingress에서 Sticky Session을 활성화하는 annotation은?

A. alb.ingress.kubernetes.io/sticky-sessions=true B. alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true C. alb.ingress.kubernetes.io/session-affinity=cookie D. alb.ingress.kubernetes.io/cookie-based-routing=true

chevron-right정답 및 설명hashtag

정답: B. alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true

설명: Sticky Session 설정:

Target Group 속성으로 설정:

  • stickiness.enabled=true - 활성화

  • stickiness.lb_cookie.duration_seconds - 쿠키 유효 시간

  • stickiness.type - lb_cookie 또는 app_cookie

Sticky Session은 세션 상태를 유지해야 하는 레거시 애플리케이션에 유용합니다.

10. NLB에서 클라이언트 원본 IP를 보존하는 방법은?

A. service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*" 사용 B. externalTrafficPolicy: Local 사용 C. 두 방법 모두 가능 D. NLB는 항상 클라이언트 IP를 보존함

chevron-right정답 및 설명hashtag

정답: C. 두 방법 모두 가능

설명: 클라이언트 IP 보존 방법:

  1. Proxy Protocol v2:

  • 애플리케이션이 Proxy Protocol 지원 필요

  1. externalTrafficPolicy: Local:

  • 추가 홉 없이 동일 노드의 Pod로만 라우팅

  • 불균형한 트래픽 분산 가능성

  1. IP Target Type (ip 모드):

11. ALB Ingress에서 HTTP를 HTTPS로 리다이렉트하는 annotation은?

A. alb.ingress.kubernetes.io/actions.ssl-redirect B. alb.ingress.kubernetes.io/ssl-redirect: "443" C. alb.ingress.kubernetes.io/force-ssl-redirect: "true" D. alb.ingress.kubernetes.io/http-to-https: "true"

chevron-right정답 및 설명hashtag

정답: B. alb.ingress.kubernetes.io/ssl-redirect: "443"

설명: SSL 리다이렉트 설정:

동작:

  • HTTP(80)로 들어오는 요청을 HTTPS(443)로 301 리다이렉트

  • 보안 모범 사례로 권장됨

  • ACM 인증서 필요

12. AWS Load Balancer Controller에서 ALB가 생성되지 않을 때 확인해야 할 사항이 아닌 것은?

A. IAM 권한 확인 B. 서브넷 태그 확인 C. IngressClass 지정 확인 D. kube-proxy 로그 확인

chevron-right정답 및 설명hashtag

정답: D. kube-proxy 로그 확인

설명: ALB 생성 실패 시 확인 사항:

  1. IAM 권한: Service Account의 IAM Role에 필요한 권한이 있는지

  2. 서브넷 태그: kubernetes.io/role/elb=1 또는 kubernetes.io/role/internal-elb=1

  3. IngressClass: ingressClassName: alb 또는 annotation으로 지정

  4. 컨트롤러 로그: kubectl logs -n kube-system deployment/aws-load-balancer-controller

  5. Ingress 이벤트: kubectl describe ingress <name>

kube-proxy는 Service의 ClusterIP/NodePort 라우팅을 담당하며, ALB 생성과는 무관합니다.


추가 학습 자료

마지막 업데이트