aws-ia/terraform-aws-eks-blueprints 는 eks 클러스터 외에 teams와 addons 모듈을 제공하여, eks에 대한 multi-tenancy와 애드온 설치 기능을 제공한다. blue-green-upgrade 패턴에선 이를 모듈화해서 사용하는데, 이 모듈에 대해서 분석해보았다.
개요
blue-green-upgrade 패턴에서 로컬 모듈 modules/eks_cluster에 대한 그림이다. 이 모듈은 eks-blue|green 스택에서 사용한다.
Teams
테라폼 부분의 모듈 계층을 더 단순화하면 세 부분으로 나눌 수 있다:
•
teams
•
addons
•
gitops-bridge
모듈을 살펴보기 전에 eks-blue|green의 사용 사례를 먼저 보자:
•
어드민
◦
team-platform
•
워크로드(non-admin, namespaced)
◦
team-burnham
◦
(team-riker)
◦
(ecsdemo-frontend)
◦
(ecsdemo-nodejs)
◦
(ecsdemo-crystal)
어드민이 아닌 팀엔 여러 팀이 있지만, 이 패턴에서 실제 워크로드를 배포하고 사용하는 팀은 team-burnham 하나이다. 따라서 team-platform 과 team-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
복사