Search

terraform-aws-eks-blue-prints-teams/addons를 활용한 모듈 분석

aws-ia/terraform-aws-eks-blueprints 는 eks 클러스터 외에 teamsaddons 모듈을 제공하여, eks에 대한 multi-tenancy와 애드온 설치 기능을 제공한다. blue-green-upgrade 패턴에선 이를 모듈화해서 사용하는데, 이 모듈에 대해서 분석해보았다.

개요

blue-green-upgrade 패턴에서 로컬 모듈 modules/eks_cluster에 대한 그림이다. 이 모듈은 eks-blue|green 스택에서 사용한다.

Teams

테라폼 부분의 모듈 계층을 더 단순화하면 세 부분으로 나눌 수 있다:
teams
addons
gitops-bridge
eks에 대한 multi-tenancy를 구현한 것이 테라폼 모듈 aws-ia/terraform-aws-eks-blueprints-teams이다:
terraform-aws-eks-blueprints-teams
aws-ia
모듈을 살펴보기 전에 eks-blue|green의 사용 사례를 먼저 보자:
어드민
team-platform
워크로드(non-admin, namespaced)
team-burnham
(team-riker)
(ecsdemo-frontend)
(ecsdemo-nodejs)
(ecsdemo-crystal)
어드민이 아닌 팀엔 여러 팀이 있지만, 이 패턴에서 실제 워크로드를 배포하고 사용하는 팀은 team-burnham 하나이다. 따라서 team-platformteam-burnham 을 어드민 여부에 따라 다르게 teams 모듈을 파악하면 된다(escdemo-* 팀은 왜 있는지 모르겠다. escfrontend route53이라는게 있긴 하지만..).
module "eks_blueprints_platform_teams" { source = "aws-ia/eks-blueprints-teams/aws" ... # Enables elevated, admin privileges for this team enable_admin = true ... }
Ruby
복사
두 모듈 사이의 큰 차이인 enable_admin 여부는 어드민 권한 승격이라고 한다. 모듈 코드에서 이 변수로 활성화되는 부분을 보면, 어드민의 IAM Role을 만들어 준다. 이 role은 eks 클러스터 외 애드온, 노드그룹 그리고 파게이트 프로필에 대한 읽기 권한이 있다:
{ "Statement": [ { "Sid": "List", "Action": [ "eks:ListFargateProfiles", "eks:ListNodegroups", "eks:ListUpdates", "eks:ListAddons" ], "Resource": [ "arn:aws:eks:<region-code>:<account-id>:cluster/<cluster-name>", "arn:aws:eks:<region-code>:<account-id>:nodegroup/*/*/*", "arn:aws:eks:<region-code>:<account-id>:addon/*/*/*" ] }, { "Sid": "ListDescribeAll", "Action": [ "eks:DescribeAddonConfiguration", "eks:DescribeAddonVersions", "eks:ListClusters" ], "Resource": ["*"] }, { "Sid": "Describe", "Action": [ "eks:DescribeNodegroup", "eks:DescribeFargateProfile", "eks:ListTagsForResource", "eks:DescribeUpdate", "eks:AccessKubernetesApi", "eks:DescribeCluster", "eks:DescribeAddon" ], "Resource": [ "arn:aws:eks:<region-code>:<account-id>:cluster/<cluster-name>", "arn:aws:eks:<region-code>:<account-id>:fargateprofile/*/*/*", "arn:aws:eks:<region-code>:<account-id>:nodegroup/*/*/*", "arn:aws:eks:<region-code>:<account-id>:addon/*/*/*" ] } ] }
JSON
복사