드디어 Node Group을 생성해보겠다. Node Group을 생성하기 전에 몇 가지 설정이 필요하다. Pod 네트워킹을 위한 CNI
설정과 Node Group에 대한 IAM 역할
생성, 그리고 Cluster
, Controle Plane
, Node
보안 그룹의 인바운드 설정이 필요하다.
Amazon VPC CNI
는 클러스터 내에서 Pod
네트워킹을 활성화 한다.
Cluster
를 생성할 때 기본으로 네트워킹 추가 기능
에 세팅 되어있었기 때문에 우리가 만든 Cluster
에는 이미 CNI 플러그인
이 설치가 되어있다.
참고 - Cluster 생성할 때 세팅 했던 내용 (Private Cluster 생성 편)
EKS 콘솔에서 Cluster 구성
의 추가 기능
탭을 눌러 보면 VPC CNI
가 있는 것을 볼 수 있다.
Amazon EKS Amazon VPC CNI
플러그인을 사용하면 Kubernetes Pod가 VPC 네트워크에서와 마찬가지로 Pod 내부에 동일한 IP 주소를 가질 수 있다.
이제 VPC CNI에 대한 역할을 생성해주기 위해 IAM 콘솔의 역할 탭에서 역할 만들기
버튼을 클릭한다.
웹 ID
를 선택하고 앞에서 우리가 만들었던 자격 증명 공급자
와 Audience(대상)
을 선택해 준다.
권한 정책 연결에서 CNI
라고 검색하면 AmazonEKS_CNI_Policy
라는 AWS 관리형 정책이 나온다. 이 정책을 선택해주고 다음으로 넘어간다.
적당한 이름을 지어주고 역할을 만들어준다.
만든 역할의 신뢰 관계 편집
을 해야한다.
방금 만든 역할의 요약
→ 신뢰 관계
로 가서 신뢰 관계 편집
을 클릭해준다.
신뢰 관계 편집에 들어가면 다음과 같이 세팅이 되어있을 것이다.
파란 부분을 아래와 같이 수정해준다.
aud": "sts.amazonaws.com"
→ sub": "system:serviceaccount:kube-system:aws-node"
참고 - 신뢰 관계 편집 전체 Json
https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-west-2.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
이제 이 역할을 VPC CNI
에 붙여줄 것이다.
EKS 콘솔로 이동하여 Cluster 구성
의 추가 기능
탭에서 vpc-cni
를 선택하고 편집
버튼을 누른다.
서비스 계정 역할에 우리가 만든 CNI 역할을 붙여준다.
업데이트를 하고 잠시 기다리면 vpc-cni
상태가 다시 활성
으로 된다.
IAM 콘솔에서 역할 만들기로 들어간다.
개체 선택은 AWS 서비스
, 사용 사례 선택은 EC2
를 해준다.
정책은 다음 AWS 관리형 정책들을 선택해준다.
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
적당한 이름을 지어주고 역할 만들기를 완료한다.
먼저 Node 보안 그룹을 생성만 해준다.
(생성을 해야 보안 그룹 ID
가 발급되고 이를 다른 보안 그룹에서도 사용할 수 있기 때문)
보안 그룹 이름 :
L23724-eks-node-group-sg-tokyo
보안 그룹 ID :sg-0de74931158730542
이제 앞에서 생성만 했놨었던 보안 그룹들에 대한 인바운드 규칙을 설정해보자.
AWS 문서에 나오는 권장 인바운드
를 기준으로 세팅하겠다.
Cluster 보안그룹
Cluster
보안그룹은 Cluster
를 생성하면 자동으로 생성되는데 세팅도 이미 권장 인바운드에 맞게 되어있다.
콘솔에서는 Cluster의 구성
→ 네트워킹
에서 클러스터 보안 그룹
이라는 항목에서 볼 수 있고 클릭하면 해당 보안 그룹으로 이동할 수 있다.
Control Plane 보안그룹
Control Plane
보안그룹은 Cluster를 생성할 당시 우리가 만들어서 붙여주었다. 콘솔에서는 Cluster의 구성
→ 네트워킹
에서 추가 보안 그룹
이라는 항목에서 볼 수 있다.
인바운드에 대한 세팅 없이 생성만 해줬었기 때문에 인바운드를 추가해 보도록 하겠다.
문서에 나오는 권장 인바운드 트래픽은 모든 노드 보안 그룹
에 대해 443
포트를 열어주라고 되어있다.
Control Plane
보안그룹에서 방금 전 만들었던 노드 보안 그룹
에 대해 443
포트를 열어준다.
Node 보안그룹
마지막으로 Node 보안그룹 인바운드를 세팅해보겠다.
모든 노드 보안 그룹
에 대해 all
로 열고, 제어 플레인 보안 그룹
에 대해 443, 1025-65535
포트를 여는게 권장 인바운드 트래픽이다.
EKS 보안그룹에 대한 자세한 내용은 아래 AWS 공식 문서 참고
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/sec-group-reqs.html
Cluster의 구성
→ 컴퓨팅
탭으로 들어가면 노드 그룹을 추가할 수 있다. 노드 그룹 추가
버튼을 클릭한다.
노드 그룹의 이름을 정해주고 앞에서 만들었던 Node에 대한 IAM 역할
을 선택한 후 다음으로 넘어간다.
컴퓨팅 및 조정 구성 설정
은 기본 세팅을 건드리지 않았다. 상황에 맞게 변경하면 되겠다.
워커 노드
는 모두 프라이빗 서브넷에 생성할 것이기 때문에 서브넷은 프라이빗 서브넷
만 선택해준다.
원격 액세스 권한 허용 대상
은 앞에서 만든 Node 보안 그룹
을 선택해 준다.
다음
을 눌러 검토
를 마치고 노드 그룹을 생성해 준다.
노드 그룹 생성도 좀 걸린다...😤
10분 정도 쉬었다가 새로고침 해보면 노드 그룹이 만들어져 있다.
다음 글에서는 Bastion 서버에서 Cluster와 통신해보겠다.
(Private 구성이기 때문에 Bastion 서버에서만 접근할 수 있다.)