EKS - Cluster and Nodegroups Create (Console)
Cluster와 Node에 Role은 생성자가 예를 들어서 CloudwatchAgent를 Pod에 대해서 실행할거다? 그럼 권한을 줘야하고요. S3에 접근할거다? 그럼 S3에 대한 Role도 줘야합니다.
감사합니다!!
[EKS] ① Private Cluster 생성 (AWS 콘솔)
Cluster 역할 생성 IAM 콘솔에서 역할만들기 → 사용 사례 선택 : EKS - Cluster EKS - Cluster를 선택하고 다음 버튼을 누르면 AmazonEKSClusterPolicy 라는 정책이 기본적으로 붙어있다. 검토가 나올 때까지 다음
velog.io
Cluster Role
1. EKS - Cluster
2. Create Role - RoleName: wsi-eks-cluster-Roles
3. 생성 후 인라인 정책을 연결해줍니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeInternetGateways"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"cloudwatch:PutMetricData"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Cluster Security Group Create
1. Name: wsi-eks-cluster-sg → Inbound 추가 X
Cluster Create
Cluster를 생성하실 때 Networkring 부분에서 Kubernetes 서비스 IP 주소 범위 구성을 구성하실 수 있습니다.
1. Cluster Name: wsi-eks-clsuter → 1.22 Version → Role Attach
2. Netwokring → VPC Attach → Public, Private Subnet Attatch → wsi-cluster-Sg Attach
3. Cluster Endpoint Access Public and Private
4. Create
Kubernetes Service 계정이 IAM 리소스에 액세스할 수 있도록 OIDC 생성
1. EKS Cluster Tap 이동 후 OpenID Conntect 공급자 URL 복사
2. IAM 이동 → 자격 증명 공급자 → 공급자 추가
3. OpenID Connect 선택 → 공급자 URL 입력 → 지문 가져오기 선택
4. 대상 → sts.amazonaws.com 입력
5. 공급자 추가
Node Role
Pod Networing을 위한 CNI 설정을 해야하며, Nodegroup에 대한 IAM Rolre을 생성하자. VPC CNI는 Cluster를 생성할 떄 기본적으로 세팅되어있다.
1. IAM Role Create → 웹 자격 증명 선택
2. 자격 증명 공급자 선택 후 Audience 선택
3. 권한 정책 창에서 → AmazonEKS_CNI_Policy 선택
4. RoleName: wsi-ENI-Roles → Role Create
5. 만든 역할 신뢰 관계 편집
- 전
- 후
aud": "sts.amazonaws.com" → sub": "system:serviceaccount:kube-system:aws-node"
6. EKS Cluster에 CNI 역할 업데이트 → 추가 기능 → vpc-cni 선택
7. 편집 → 생성한 Role Attach → Update
NodeGroup Role 생성
1. NodeGroup Role 생성 → EC2 선택
2. 2개 정책 연결 → AmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryReadOnly
3. RoleName: wsi-nodegroup-roles
4. Create Role
5. 생성 후 인라인 정책을 추가해줍니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:DescribeLaunchConfigurations",
"autoscaling:DescribeTags",
"autoscaling:SetDesiredCapacity",
"autoscaling:TerminateInstanceInAutoScalingGroup",
"ec2:DescribeLaunchTemplateVersions"
],
"Resource": "*"
}
]
}
NodeGroup SG Create
1. Name: wsi-eks-nodegroups-sg → Inbound 추가 X
SG Inbound Setting
1. Cluster SG → EKS Console → 구성 → 네트워킹 → Cluster SG 확인
2. 클러스터 추가 보안 그룹을 선택합니다. 이것은 Control Plane Sg입니다. 저희가 처음에 Cluster SG를 말합니다. Inbound 규칙을 생성하고, 소스는 위에서 생성한 Nodegroup을 소스로 지정합니다. Port는 443으로 설정합니다.
3. 이번에는 NodeGroup SG 설정 → 아래와 같게 설정
NodeGroup Create
💡Nodegroup을 2개 생성시 Pod를 affinity사용해 각 어떤 노드 그룹에 생성할 것인지 명시해야하기 때문에 NodeGroup 생성 과정에서 꼭 label을 추가해주어야 합니다.
1. EKS Console 이동 → Cluster 선택 → 컴퓨팅 → 노드 그룹 추가 선택
2. Name: wsi-eks-nodegroups / Role: wsi-nodegroup-roles
3. Node에 Label을 추가할 수 있습니다. (선택 사항), 컴퓨팅 및 조정 구성 설정은 기본 세팅으로 두며, 사용자가 원하면 구성하도록 합니다
4. Subnet → Private Subnet만 선택
5. 노드에 대한 SSH Access 구성 활성화 → KeyPair 선택 → NodeGroupSG 선택
6. 생성(Private Subnet 유형으로 Node를 생성했기 때문에 같은 VPC에 영역에서만 Node로 접근할 수 있다) → 노드가 생성되면 위에서 만들어준 Node SG를 Node에 연결해줘야합니다.
Bastion 접근 해보기(아무것도 없다는 가정하에 진행)
1. 먼저 kubectl Install 합니다.
curl -o kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.22.6/2022-03-09/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --short --client
2. aws configure을 사용해서 Root 계정에 대해 Access Key와 Secret Key 및 리전을 설정합니다.
aws configure
AWS Access Key ID [None]: AK31KE*********
AWS Secret Aceess Key [None]: JKJSKLDJA12*********
Default region name [None]: ap-northeast-2
Default output format [None]:
3. 그런 다음 Cluster 보안 그룹에서 Inbound에 규칙을 추가합니다. 규칙은 Bastion Instance에 대한 443 Port를 열어줍니다.
4. Bastion에서 이제 Cluster에 대해서 kubeconfig를 진행합니다. 설정을 하면 kubeconfig에 대한 파일이 .kube/config 경로에 존재합니다.
aws eks update-kubeconfig --region ap-northeast-2 --name wsi-eks-cluster
5. 접근 확인
kubectl get svc
kubectl get nodes
다음 편에서는 yaml을 사용해서 Cluster와 NodeGroup을 생성하도록 하겠습니다.