본문 바로가기

[Kubernetes]

[k8s] ALB 적용하기 - 2. AWS console 사용

반응형

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