반응형
1. AWS OIDC 생성
1-1. OIDC 조회 및 복사
EKS에서 클러스터를 생성하게 되면 OIDC url도 생성된다.
EKS > Cluster > Overview에 들어가서 확인해도 되고 아래 명령어로 검색해도 된다.
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
그러면 아래와 비슷한 결과가 나올거다.
https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
OIDC를 복사했으면 IAM 페이지로 넘어간다.
1-2. Identity Provider 생성
IAM > 좌측메뉴 Access Management > Identity Provider로 이동
만약 해당 메뉴에서 클러스터의 URL과 일치하는 공급자가 있으면 이미 그 값이 있다는 거고 없으면 생성해줘야 한다.
[공급자 추가 ( Add Provider)] 선택
Provider URL : [1-1] 에서 가져온 값을 복사하고 [지문 가져오기 (Get thumbprint)]를 선택
Audience : sts.amazonaws.com
위의 값들을 입력하고 [공급자를 추가(Add Provider)]를 선택
2. ALB에 필요한 정책(Policy) / 권한 (Role) 관리
2-1. IAM Policy 생성
curl -o iam_policy.json \
https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.0/docs/install/iam_policy.json
aws iam create-policy \
--policy-name [PolicyName] \
--policy-document file://iam_policy.json
2-2. IAM Role 생성
[1-1] 에서 복사한 OIDC는 여기서도 사용되니 참고하자.
빈 json 파일을 생성한다. (ex. alb-trust-policy.json)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::[AccountID]:oidc-provider/oidc.eks.[RegionCode].amazonaws.com/id/[OIDC url]"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.[RegionCode].amazonaws.com/id/[OIDC url]:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
}
}
}
]
}
- 아래 코드에서 다음 값들을 치환해준다
- Account ID : AWS 계정 고유 ID
- RegionCode : AWS 리전 값
- OIDC url : [1-1] 에서 복사한 끝에 값
작성한 json파일로 Role 생성
aws iam create-role \
--role-name [Role Name] \
--assume-role-policy-document file://"alb-trust-policy.json"
이제 Role 과 Policy를 만들었으니 두개를 연결해주면 된다.
aws iam attach-role-policy \
--policy-arn arn:aws:iam::[AccountID]:policy/[Policy Name] \
--role-name [Role Name]
3. Service Account 작성
쿠버네티스에서 alb를 사용하기 위한 alb.yaml파일을 하나 작성해준다.
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::[AccountID]:role/[Role Name]
클러스터에 쿠버네티스 service account를 생성해준다.
kubectl apply -f alb.yaml
4. Helm 으로 설치
4-1. Helm 레포지토리 추가
helm repo add eks https://aws.github.io/eks-charts
helm repo update
4-2. ALB 설치
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.ap-northeast-2.amazonaws.com/amazon/aws-load-balancer-controller \
--set region=ap-northeast-2 \
--set vpcId=[VPC]
728x90
'[Kubernetes]' 카테고리의 다른 글
[Kubernetes] ServiceAccount로 IAM Credentials 대신하기 - 1 (0) | 2023.01.20 |
---|---|
[k8s] ALB 적용하기 - 1. eksctl 사용 (0) | 2022.07.25 |