반응형
Intro
- AWS EKS는 쿠버네티스 Master와 Worker의 클러스터 구성을 완전관리형으로 제공해주는 서비스 입니다.
- 그러다보니 Master Plane은 AWS의 Black Box영역으로 쉽게 알 수가 없으며
- Black Box영역의 Master Plane과 Worker Node간의 네트워크 통신은 어떤 어떻게 이루어지는지도 쉽게 알 수가 없습니다.
- 이렇게 완전관리형 서비스를 사용할때 네트워크통신 레벨을 관리해야하는 서버관리자 입장에서는 Black Box영역을 분석을 할 수 밖에 없게 됩니다.
- 오늘은 서버관리자 입장에서 EKS Black Box영역 특히 Master와 Worker가 어떻게 통신하는지
- 그리고 방화벽관리는 어떻게 해야하는지에 대해 파헤쳐드리도록 하겠습니다.시간이 부족하신분은 하단에 결론부분만 보시기 바랍니다.
사전지식
- 쿠버네티스와 쿠버네티스 클러스터 구성도
- 참고 URL : https://kim-dragon.tistory.com/33?category=834255
AWS EKS Cluster 구조도
- 다행히 AWS에서 Master Plane과 같은 Black Box 영역에 대해 구조가 공개되어있습니다.
- 사진은 AWS EKS 공식 워크샵 홈페이지에서 발췌하였습니다.
https://www.eksworkshop.com/010_introduction/eks/eks_high_architecture/
EKS 보안그룹 3가지
- AWS 공식 Document를 보면 3가지의 보안 그룹에 대해 설명이 되어있습니다.
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/sec-group-reqs.html
1. Cluster security group
2. Control Plane security group
3. Node security group
1. Cluster security group
- 저는 처음에 Control Plane security group, Node security group 만 있으면 되지 않는가 생각했습니다.
- 이 Cluster security group은 어떤 이유로 필요한건가 다양한 테스트끝에 알아낸 결론은
- Control plane과 Node 간에 통신을 무조건적으로 가능하게 하기위해 만들어놓은 AWS의 "안전장치"이다 라는 것입니다.
- 이 말을 이해하기 위해 EKS를 콘솔에서 직접 생성 해보면 아래와 같은 구조로 보안그룹이 생성됩니다.
- 그림을 보시면 감이 오시나요?
- 이것의 이미는 "나(cluster security group)자신을 갖고 있으면 우린 서로 통신할 수 있어" 라는 것입니다.
- 그림과 같은 구조를 AWS에서 자동으로 가져감으로 인해 control plane과 worker node와의 무조건적인 통신이 가능하도록 한 것입니다.
- AWS 공식 문서에서도 보면 이를 권장하고 있습니다. 왜냐하면 이런 구조로 가야 네트워크 이슈를 사전에 막을 수 있기 때문입니다.
- 하지만 서버관리자 입장에서 이렇게 네트워크 허용을 너무 많이 해놓으면 향후 그럼 네트워크 제한을 어떻게 해야하지?가 큰 이슈가 되어버립니다.
- 글 마지막에 최소한으로 IN/OUT을 설정하도록 하는 방법을 알려드리겠습니다.
[참고]AWS 콘솔에서 Cluster security group 확인
- EKS 에서 확인
- Cluster security group In/Out rule
2. Control Plane security group
- AWS공식 문서를 보고 Control Plane security group이 있으니 잘 설정해서 써야겠네 하고 AWS 콘솔에서 찾아봅니다.
- 그런데 EKS를 생성해보면 어디를 찾아봐도 Control Plane security group 이라는걸 확인할 수가 없습니다.
- 도대체 뭐가 Control Plane security group 이라는 거지?라며 EKSCTL로 EKS를 생성해보았습니다.
- eksctl은 그림에있는 Additional security group이 Control Plane security group이라는 이름으로 생성이 됩니다.
- 즉 Additional security group = Control Plane security group 이라는 것입니다. (그 증거를 아래 참고에서 찾을 수가 있음)
[참고]AWS 콘솔에서 Additional security group(Control Plane security group) 확인
- eksctl로 EKS를 생성하였을 경우 Additional security group 정책이 아래와 같이 설정되어있으며
- 이는 AWS공식 문서에서 설명하고 있는 Control Plane security group과 매우 유사합니다.
3. Node security group
- 이 보안그룹은 명확하게 worker node가되는 EC2에 할당되는 보안그룹입니다.
- AWS콘솔을 통해서 Woker Node를 생성하게되면 Node에는 Cluster security group이 자동으로 할당되며, 아래 그림과 같이 RemoteAceess security group이 자동으로 생성되어 할당됩니다.
- 여기서 RemoteAceess security group이 WorkerNode security group이라고 보시면 됩니다.
보안 그룹 관리 스타일이 AWS콘솔, eksctl, terraform 각각 다르다
- 각각을 사용하여 EKS cluster와 NodeGroup을 생성해보면 보안 그룹 설정이 모두 다른걸 볼 수 있습니다.
AWS콘솔 스타일 Security Group 구조
eksctl 스타일 Security Group 구조
terraform 스타일 Security Group 구조
세가지 모두 공통적으로 고려해야할 EKS cluster 설정이 있다
- EKS Cluster Endpoint Access 모드
- public
- private and public
- private
EKS Cluster Endpoint Access 모드
- API server endpoint의 종류는 3가지로 only public, public and private, only private 이 있습니다.
- AWS콘솔에서보면 EKS클러스터를 생성할때 "API server endpoint access"를 선택하도록 되어있습니다.
- 아래에서 이 3가지를 설명하기 위해 더 자세히 EKS cluster 구조도를 살펴보겠습니다.
EKS Cluster API endpoint 구조도
- 그림을 보고 API server endpoint의 종류를 선택하는데 어느정도 감이 오시나요?
- 보안상 Private subnet 에서 외부 인터넷으로 트래픽이 나가면 안되는 경우 private , private and public으로 설정하여 빨간색 화살표로 통신하도록 방화벽을 제한해야합니다.
- 단, 이경우 VPC endpoint 를 생성하여 방화벽에 적용해야합니다. (아래 Worker Node Security Group(private) 그림을 참고 바랍니다.)
API server endpoint - public
- API endpoint를 조회해보면 IP가 public으로 조회가 됩니다.
- 위 구조도에서 초록색 화살표에 해당됩니다.
API server endpoint - Private
- API endpoint를 조회해보면 IP가 Cluster VPC CIDR대역 2개로 조회가 됩니다.
- 이는 EKS cluster를 생성할때 자동으로 생성되는 ENI IP와 동일합니다.
- 즉, 위 구조도에서 빨간색 화살표에 해당됩니다.
API server endpoint - Public and Private
- API endpoint를 local PC에서 조회가 되며, VPC내에 있는 bastion host에서도 조회가 가능합니다.
- 위 구조도에서는 빨간색, 초록색 화살표 두개를 모두 사용하는 것입니다.
결론
EKS Cluster의 Security Group이 3가지가 있다
- EKS Cluster Security Group
- EKS Control Plane Security Group
- WorkerNode Security Group
EKS Cluster 의 보안그룹(Security Group)을 관리하는 스타일에 대표적으로 3가지가 있다
- AWS 콘솔 스타일
- eksctl 스타일
- terraform 스타일
AWS 콘솔 스타일로 EKS Cluster의 Security Group IN/OUT정책 최소로 설정하는 방법
- cluster security group
- control plane security group
- Worker Node Security Group(private) * 참고로 노드그룹간 CoreDNS통신은 ehpemeral port(1024-65535)으로 통신합니다.
- Worker Node Security Group(public) * 참고로 노드그룹간 CoreDNS통신은 ehpemeral port(1024-65535)으로 통신합니다.
cluster security group 은 필요 없어도 그만이다
- 예상대로 cluster security group 에 IN/OUT 정책을 모두 제외해도 아래 그림과 같이 control plane security group과 Worker Node Security Group만으로도 통신이 가능합니다.
- 따라서 개인적으로 EKS 보안그룹을 관리하는 스타일은 AWS 콘솔로 설정하고, cluster security group은 eksctl의 cluster shared security group용도로 사용하는것이 가장 깔끔할 것 같습니다.
반응형
'IT > AWS' 카테고리의 다른 글
[AWS] EKS IAM USER 추가 하기 (0) | 2021.06.22 |
---|---|
[AWS] ECS 생성하기 Demo (with 유튜브 영상) (0) | 2021.06.16 |
[AWS] eksctl을 이용한 EKS 생성 (Managed NodeGroup with Launchtemplate + Managed AMI) (0) | 2021.05.26 |
[AWS]EKS NodeGroup생성 전략 3가지 (3) | 2021.05.25 |
[AWS]EKS 네트워크 이해하기(CNI Plugin) (6) | 2020.06.26 |