- 강의 질문
- 개발/데이터
[3-3-2] IRSA trust policy namespace와 Helm 설치 namespace 불일치 문의
안녕하세요.
FastCampus Kubernetes DevOps Part 3의 3-3-2 실습을 진행하던 중 IRSA와 ServiceAccount Namespace 관련해서 궁금한 점이 있어 문의드립니다.
진행 환경
Terraform으로 EKS 및 IRSA IAM Role 생성
Helm Chart로
aws-ebs-csi-driver,aws-load-balancer-controller설치강의와 동일하게 아래 명령으로 설치했습니다.
helm install demo-helm .별도의 -n 옵션은 사용하지 않았습니다.
Terraform 설정
terraform/modules/irsa/locals.tf
locals {
service_account_name = {
ebs_csi_controller = "ebs-csi-controller-sa"
load_balancer_controller = "load-balancer-controller-sa"
}
service_account_namespace = "kube-system"
}이 설정에 따라 생성된 IAM Role의 Trust Policy는 다음과 같이 kube-system Namespace의 ServiceAccount만 신뢰하도록 생성됩니다.
system:serviceaccount:kube-system:load-balancer-controller-sa실제 설치 결과
반면 Helm Chart의 templates/serviceaccount.yaml에는 namespace가 명시되어 있지 않아 helm install demo-helm .으로 설치하면 모든 리소스가 default Namespace에 생성됩니다.
실제로 확인한 결과는 다음과 같습니다.
default/ebs-csi-controller-sadefault/load-balancer-controller-sadefault/ebs-csi-controllerdefault/aws-load-balancer-controller
발생한 문제
Controller Pod들이 모두 CrashLoopBackOff 상태가 되었고, IRSA의 sub 값이 일치하지 않아 IAM Role을 Assume하지 못하는 것이 원인으로 보입니다.
즉 실제 ServiceAccount는
system:serviceaccount:default:load-balancer-controller-sa인데,
IAM Role은
system:serviceaccount:kube-system:load-balancer-controller-sa만 허용하고 있는 상태입니다.
그런데 강의 화면에서는 Controller Pod들도 default Namespace에서 실행되고 있으면서 정상적으로 Running 상태인 것으로 보여 혼동이 되었습니다.
궁금한 점
이 경우
locals.tf의service_account_namespace를default로 변경하는 것이 맞을까요?아니면 Helm 설치 시
helm install -n kube-system으로 설치하는 것이 의도된 방식인가요?만약 강의처럼
defaultNamespace에서 실행하는 것이 맞다면, IAM Role의 Trust Policy(sub) 역시defaultNamespace를 기준으로 생성되어야 하는 것이 맞는지 궁금합니다.혹시 제가 놓친 Helm Namespace 설정이나 Dependency Chart의 Namespace Override, 또는 IRSA 관련 설정이 있는지도 확인 부탁드립니다.
감사합니다.