AWS Load Balancer Controller 추가 기능 설치 - Amazon EKS
Amazon EKS 애플리케이션 로드 밸런싱 - Amazon EKS
# 일반적인 Region
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json
# 미국 동부 또는 미국 서부 Region
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy_us-gov.json
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json
oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
나는 없다! 그래서 제공업체를 등록하자!
OIDC 제공 업체가 존재할 경우 위 명령어 실행 시 긴 코드가 출력 되는데, 다음 설정에 필요하니 복사해두거나, 따로 적어 놓도록 한다
EKS Cluster로 이동해서 클러스터의 OpenID Connect 공급자 URL을 복사한다
sts.amazonaws.com
입력 후 공급자 추가자이제 아래 명령어를 CLI 콘솔에 입력해주자
이 부분 중요! 입력을 하더라도 추가가 되었는지 확인해야 한다!
"oidc.eks..amazonaws.com/id/<OIDC_ID>:aud": "sts.amazonaws.com",
"oidc.eks..amazonaws.com/id/<OIDC_ID>:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
이게 잘 추가가 되었는지 확인해야한다! 만약 리전별 클러스터를 구성한다면..
# <AWS Account ID>에는 AWS 계정의 ID 12글자의 숫자를 입력해준다
# <region-code>에는 EKS 클러스터가 위치한 리전의 코드를 입력한다
# <OIDC_ID>에는 아까 복사해놓은 oidc 코드를 입력해준다
cat > load-balancer-role-trust-policy.json << EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AWS Account ID>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<OIDC_ID>"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.<region-code>.amazonaws.com/id/<OIDC_ID>:aud": "sts.amazonaws.com",
"oidc.eks.<region-code>.amazonaws.com/id/<OIDC_ID>:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
}
}
}
]
}
EOF
# IAM 역할을 생성한다
aws iam create-role \
--role-name AmazonEKSLoadBalancerControllerRole \
--assume-role-policy-document file://"load-balancer-role-trust-policy.json"
# 필요한 Amazon EKS 관리형 IAM 정책을 IAM 역할에 연결한다
# <AWS Account ID>에는 AWS 계정의 ID 12글자의 숫자를 입력해준다
aws iam attach-role-policy \
--policy-arn arn:aws:iam::<AWS Account ID>:policy/AWSLoadBalancerControllerIAMPolicy \
--role-name AmazonEKSLoadBalancerControllerRole
# <AWS Account ID>에는 AWS 계정의 ID 12글자의 숫자를 입력해준다
# EKS Cluster가 미국 동부 또는 미국 서부 리전에 있는 경우 arn:aws: -> arn:aws-us-gov:
cat >aws-load-balancer-controller-service-account.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/name: aws-load-balancer-controller
name: aws-load-balancer-controller
namespace: kube-system
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<AWS Account ID>:role/AmazonEKSLoadBalancerControllerRole
EOF
# Cluster에 Kubernetes 서비스 계정을 생성한다
kubectl apply -f aws-load-balancer-controller-service-account.yaml
# IAM 정책 파일 다운로드
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy_v1_to_v2_additional.json
# Cluster가 미국 동부 또는 미국 서부 Region인 경우에만 아래 내용 실행
sed -i.bak -e 's|arn:aws:|arn:aws-us-gov:|' iam_policy_v1_to_v2_additional.json
# 아래 IAM 정책을 생성하는 명령을 실행하고 반환된 ARN 메모
aws iam create-policy \
--policy-name AWSLoadBalancerControllerAdditionalIAMPolicy \
--policy-document file://iam_policy_v1_to_v2_additional.json
# 위의 단계에서 생성한 IAM 역할에 연결
# <role-name> 부분을 위에서 생성한 Role(AmazonEKSLoadBalancerControllerRole)로 변경
aws iam attach-role-policy \
--role-name <role-name> \
--policy-arn arn:aws:iam::<AWS Account ID>:policy/AWSLoadBalancerControllerAdditionalIAMPolicy
# SSL/TLS 인증을 위한 cert-manager 구성 파일 다운
kubectl apply \
--validate=false \
-f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
# 컨트롤러 구성 다운
curl -Lo v2_4_7_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_full.yaml
# ServiceAccount 섹션 제거
# 이 섹션을 제거하지 않으면 이전 단계에서 서비스 계정에 작성한 필수 주석이 덮어씌워진다
sed -i.bak -e '561,569d' ./v2_4_7_full.yaml
# <my-cluster> 필드를 eks cluster의 이름으로 변경
sed -i.bak -e 's|your-cluster-name|<my-cluster>|' ./v2_4_7_full.yaml
# Controller 파일 적용
kubectl apply -f v2_4_7_full.yaml
# IngressClass, IngressClassParams 매니페스트 다운
curl -Lo v2_4_7_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_ingclass.yaml
# 적용
kubectl apply -f v2_4_7_ingclass.yaml
kubectl get deployment -n kube-system aws-load-balancer-controller