앞선 포스팅의 네트워크 고려사항이 다 만족되었다면 EKS Cluster를 생성할 준비가 되었다.
Kubernetes는 아래와같이 Control Plane과 Data Plane으로 나뉜다.
- Control Plane: master node, pod 스케쥴링과 kubernetes의 진입점 (API 서버) 등을 제공
- Data Plane: worker node, pod가 실제 생성되어 작업을 수행
EKS는 EKS Cluster와 Node Group으로 구성되며 EKS Cluster는 Control Plane, Node Group은 Data Plane의 역할을 수행한다. 이번 포스팅에서는 EKS Cluster 생성과 생성에 필요한 IAM 역할, VPC CNI 설정을 다룬다.
1. EKS Cluster IAM 역할 생성
EKS Cluster는 Node Group에 속해있는 인스턴스 (EC2) 관리와 노드 대수 조정 (AutoScaling), 서비스 구성 (ELB)을 위해 AWS 리소스에 접근/관리 할 권한이 필요하다. 이러한 역할을 생성하여 EKS Cluster에 적용하여야 한다.
- 역할 생성 > AWS 서비스 > EKS 선택
- 사용 사례 선택 > EKS 선택
- 권한: AmazonEKSClusterPolicy 선택 > 생성
2. EKS Cluster 생성
역할 생성이 완료되었으면 EKS 서비스에서 클러스터 생성을 선택하고 다음 과정을 따른다.
2.1 Configure cluster
- Name: EKS Cluster 이름 입력
- Kubernetes version: 1.18, 1.19, 1.20, 1.21 (2022.01.06 기준)
- Cluster Service Role: EKS의 Control plane의 AWS 리소스 관리를 위한 역할 (1에서 생성한 EKSClusterRole 선택)
2.2 Specify Networking
- VPC: 클러스터를 생성할 VPC 선택 (앞의 고려사항이 적용되어있는 VPC 선택)
- Subnet: 클러스터를 구성할 서브넷 선택 (본 포스팅: public+private 서브넷)
- Public + Private subnet: 퍼블릭 2개, 프라이빗 2개가 요구되며, 각 서브넷은 다른 가용영역에 배포되어있어야 함
- Public Only: 다른 가용영역에 3개의 퍼블릭 서브넷 배포
- Private Only: 다른 가용영역에 3개의 프라이빗 서브넷 배포 (NAT GW 혹은 vpce 설정 필요) - Security groups: 추가 보안그룹 (Additional Security Group = Control Plane Security group), ENI에 적용될 보안그룹
- kubernetes API 서버 접근 엔드포인트 (kubectl 활용 用)
- Public / Public and private / Private 제공 => 이번 구성에서는 VPC 내에 별도의 인스턴스가 존재하지 않으므로 private을 사용할 수 없다. 그러므로 Public만 선택하면된다. 이 옵션은 구축 후 변경 가능하니, 나중에 private 테스트가 필요하다면 VPC 내에 인스턴스를 생성하고 옵션을 의도에 맞게 변경하면 된다.
2.3 Add-on과 Control plane 로깅
추가기능(Add-on)과 로깅은 각자 환경에 맞게 선택한다. 이때 로깅의 경우에는 Cloudwatch logs에 저장되며 EKS Cluster가 동작하는 내내 많은 로그가 쌓인다. Cloudwatch logs의 로그 보존 기본 값이 '만료 없음'이므로 시간이 지날수록 많이 과금될 수 있다. 따라서 로깅 기능을 사용하기로 했다면 반드시 만료 기간을 정해줘야한다.
3. AWS에 대한 OIDC (OpenID Connect) 공급자 생성
EKS에서는 kubernetes가 VPC IP 대역을 사용하여 pod, service 등을 생성할 수 있도록 VPC_CNI를 제공한다. 이 때 kuberentes 서비스 계정이 AWS IAM 리소스에 액세스하고 다룰 수 있도록 OIDC 값으로 IAM Identity Provider를 생성해줘야 한다. 생성된 IAM Identity Provider는 VPC_CNI 뿐 아니라 AWS LoadBalancer Controller, Cluster Autoscaler 등에서 사용된다. (이 부분은 클러스터를 새로 만들 때 마다 그 값이 변경되는데, 매번 OIDC와 관련 역할의 신뢰 관계 설정이 번거로워 최근에는 terraform을 활용하고있다)
3.1 OIDC 공급자 확인
OIDC는 EKS Cluster가 생성되면 다음 위치에서 그 값을 확인 할 수 있다.
3.2 IAM Identity Provider 생성
- IAM 자격증명 공급자 (Identity Provider) > OpenID Connect 선택
- Provider URL: 복사한 URL 입력 > Get thumprint
4. VPC-CNI 설정
클러스터 생성시 EKS는 VPC-CNI, CoreDNS, kube-proxy를 기본으로 제공하며, 이 중 VPC-CNI는 kubernetes pod의 주소를 VPC 네트워크 내 IP 주소로 할당하기 위한 플러그인이다. EKS Cluster에 EC2를 worker node로 사용하려면 VPC-CNI가 필요하며, 이 추가 기능은 AWS EC2에 대한 권한이 필요하다. 초기 클러스터 생성시 VPC-CNI는 생성되나 OIDC 공급자가 연결된 역할로 변경이 필요함을 기억해야 한다. 권한은 IAM Role을 생성하여 VPC-CNI 추가 기능에 적용하는 방법과 EKS Cluster에 조인할 node의 역할에 추가하는 방법이 있는데, 본 포스팅은 IAM Role을 생성하여 VPC-CNI 추가 기능에 적용하는 방법으로 진행한다.
4.1 VPC-CNI Role 생성
- IAM > 역할 생성 > Web identity 객체 선택
- Identity provider: 3에서 생성한 OIDC 자격증명 공급자 선택
- AWS 관리형 정책 선택: AmazonEKS_CNI_Policy
4.2 신뢰 관계 편집
생성된 역할에 들어가, 다음과 신뢰 관계를 편집한다.
- 변경 전 (신뢰관계 일부)
"oidc.eks.ap-northeast-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"
- 변경 후 (신뢰관계 일부)
- region-code: ap-northeast-2 (리전에 따라 선택)
- EXAMPLED539D4633E53DE1B716D3041E: OIDC 공급자 ID
"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:kube-system:aws-node"
- VPC-CNI 선택 > 수정 > 4.2에서 생성한 역할 선택
이렇게해서 EKS Cluster 구성을 마쳤다.
다음 포스팅에서는 EKS Cluster의 노드 그룹을 생성하고 kubeconfig 설정까지 다루겠다.
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-cluster.html
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/cni-iam-role.html
'AWS > EKS' 카테고리의 다른 글
[AWS/EKS] Container Insights와 Fluent-bit로 EKS 모니터링, 로그 수집 하기 (0) | 2022.04.26 |
---|---|
[AWS/EKS] AWS IAM 사용자에 대한 RBAC (Role-based Access Control) 설정하기 (0) | 2022.04.11 |
[AWS/EKS] 콘솔로 생성하는 EKS - ④ ingress로 서비스 외부 노출 시키기 (AWS LoadBalancer Controller 설치) (0) | 2022.03.17 |
[AWS/EKS] 콘솔로 생성하는 EKS - ③ 노드 그룹 생성 (0) | 2022.01.17 |
[AWS/EKS] 콘솔로 생성하는 EKS - ① intro, network 고려사항 (0) | 2022.01.06 |
댓글