AWS EKS에서 ALB를 이용해 여러 서비스를 연결하기 위해서는 TargetGroupBinding을 사용합니다.
TargetGroupBinding을 사용하는 목적은 다음과 같습니다.
제가 이 페이지에서 사용하고자 하는 목적은 1번 단일 ALB에서 여러 서비스를 라우팅하기 위해 사용합니다.
1. 단일 ALB에서 여러 서비스 라우팅
: 하나의 ALB를 통해 여러 서비스로 트래픽을 분배하여 비용을 절감하고 관리 복잡성을 줄입니다.
2. 유연한 트래픽 제어
: 서비스별로 개별 Target Group을 설정하여, 특정 서비스의 트래픽을 원하는 방식으로 분배할 수 있습니다.
3. EKS 네이티브 통합
: ALB의 Target Group과 EKS의 서비스(Pod)간 직접적인 연결을 설정하여,
Ingress 리소스를 사용하지 않고도 ALB를 통해 EKS의 서비스와 원활하게 연동할 수 있습니다.
로드 밸런서 컨트롤러 에드온이 있어야 Kubernetes 리소스(Ingress, Service 등)를 자동으로 AWS의 로드 밸런서(Target Group)와 매핑할 수 있습니다.
AWS 로드 밸런서 컨트롤러의 IAM 정책을 다운로드합니다.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.12.0/docs/install/iam_policy.json
다운 받은 위 Policy를 "AWSLoadBalancerControllerIAMPolicy"라는 명칭으로 IAM Policy 생성합니다.
eksctl create iamserviceaccount --cluster=<Cluster Name> --namespace=kube-system --name=aws-load-balancer-controller --attach-policy-arn=<AWSLoadBalancerControllerIAMPolicy_ARN> --approve
# helm add
helm repo add eks https://aws.github.io/eks-charts
# helm update
helm repo update eks
# helm install
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
--version <Chart_Version> -n kube-system \
--set clusterName=<Cluster_Name> \
--set vpcId=<VPC_ID> \
--set region=ap-northeast-2 --set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set enableShield=false \
--set enableWaf=false \
--set enableWafv2=false \
--set createIngressClassResource=true --set ingressClass=alb
tgb yaml 파일을 작성하여 배포하면 완료!!!!
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
name: kafka-ui-tgb
namespace: kafka
spec:
serviceRef:
name: kafka-ui
port: 80
targetGroupARN: <Target_Group_ARN>
targetType: ip