이번에 구성하는 클러스터에 인그레스를 적용하고자 한다. 인그레스는 인그레스 컨트롤러가 있어야 동작해야 하는데, AWS에서는 AWS Loadbalancer Controller가 Ingress Controller의 역할을 수행한다.
💡 Ingress란? 인그레스는 클러스터 외부에서 클러스터 내부 서비스로 HTTP와 HTTPS 경로를 노출한다. 트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤된다. 또한, 인그레스는 외부에서 서비스로 접속이 가능한 URL, 로드 밸런스 트래픽, SSL / TLS 종료 그리고 이름-기반의 가상 호스팅을 제공하도록 구성할 수 있다.
1. IAM OIDC 공급자 생성
AWS Loadbalancer Controller를 설치하기 전에, 클러스터에 대한 AWS Identity and Access Management(IAM) OpenID Connect(OIDC) 공급자가 생성되어야있어야 한다.
💡 OIDC란? OpenID Connect(OIDC)를 사용하면 지원되는 자격증명 공급자를 이용해 AWS api 호출을 인증하고 유효한 OIDC JWT(Json Web Token)을 수신한다. 이 토큰을 AWS STS AssumeRoleWithWebIdentityAPI 작업에 전달하고 IAM 임시 역할 자격 증명을 수신 할 수 있다. 이 자격증명을 사용하여 AWS 서비스 자원들을 k8s자원들이 사용할 수 있다.
IAM OIDC Provider는 기본으로 활성화 되어있지 않으므로, eksctl을 사용하여 생성한다.
#클러스터 리스트 확인
$ aws eks list-clusters
{
"clusters": [
"demo-eks"
]
}
#IAM OIDC Provider 생성
$ eksctl utils associate-iam-oidc-provider \
--region us-east-2 \
--cluster demo-eks \
--approve
#생성 확인
$ aws eks describe-cluster --name demo-eks --query "cluster.identity.oidc.issuer" --output text
https://oidc.eks.us-east-2.amazonaws.com/id/xxxxxxxxxxxxxxxxxx
#현재 계정 IAM에 등록된 OIDC 공급자 확인
$ aws iam list-open-id-connect-providers
2. AWS Loadbalancer 컨트롤러에 대한 IAM 정책 다운로드
ALB Load Balancer 컨트롤러에 대한 IAM정책을 다운로드 받는다.
## ALB Load Balancer Controller 의 IAM Policy Download
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.3.1/docs/install/iam_policy.json
3. AWSLoadBalancerControllerIAMPolicy 이름의 IAM 정책 생성
# 정책 이름: AWSLoadBalancerControllerIAMPolicy , 정책 내용: iam_policy.json
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://./iam_policy.json
4. AWS Load Balancer 컨트롤러에 대한 IAM역할 및 ServiceAccount 생성
이 단계에서는 AWS LoadBalancer Controller 에 대한 Service Account를 생성하고, 앞서 생성한 IAM Role을 연결한다.
# service account 생성
$ eksctl create iamserviceaccount \
--cluster=demo-eks \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=<3에서 생성한 정책 ARN> \
--override-existing-serviceaccounts \
--region us-east-2 \
--approve
#등록 확인
$ kubectl get serviceaccounts -n kube-system aws-load-balancer-controller -o yaml
5.Helm 설치
컨트롤러를 설치하는 방법은 Helm을 이용하거나, kubernetes manifest를 apply해서 설치 할 수 있다.
이번에는 이후에도 헬름을 이용할 예정이므로 Helm을 이용해서 컨트롤러를 설치할 것이다.
#인스톨러 스크립트 다운로드
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
#인스톨러 권한 설정 및 실행
$ chmod 700 get_helm.sh
$ ./get_helm.sh
#설치 확인
$ helm version
6. Helm을 이용한 AWS Loadbalancer Controller 설치
명령어 가장 마지막에 이미지 리포지토리를 지정 할 때에는 아래 링크를 참고하여 각 리전별로 적정한 값을 넣어주어야 한다.
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/add-ons-images.html
$ helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=<클러스터이름>\
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set image.repository=602401143452.dkr.ecr.us-east-2.amazonaws.com/amazon/aws-load-balancer-controller
#설치확인
$ kubectl get deployment -n kube-system aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 20s
위와 같이 컨트롤러가 정상적으로 설치되어있음을 확인 할 수 있다.
참고:
https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/aws-load-balancer-controller.html
'Amazon AWS > EKS' 카테고리의 다른 글
AWS EKS에서 CA(Cluster Autoscaler) 구성하기 (0) | 2022.11.13 |
---|---|
Configmap, Secret 사용하기 (0) | 2022.10.16 |
EKS Managed node group 구성 (0) | 2022.08.28 |
EKS Cluster 배포를 위한 VPC 구성 (0) | 2022.08.17 |
EKS 클러스터의 Node group 설정 수정하기 (0) | 2022.07.24 |