기존에 구성한 VPC에 EKS를 구성하기 위해서는 다음과 같은 스크립트가 필요하다.
cat << EOF > eksnewelite.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: newelite-eks-cluster
region: ${AWS_REGION}
version: "1.19"
vpc:
subnets:
private:
ap-northeast-2a: { id: subnet-0624cd75bfb9cc184 }
ap-northeast-2b: { id: subnet-01f02fbb82988f048 }
ap-northeast-2c: { id: subnet-0cd8b79944171649a }
managedNodeGroups:
- name: newelite-nodegroup
desiredCapacity: 3
privateNetworking: true
instanceType: t3.small
ssh:
enableSsm: true
# To enable all of the control plane logs, uncomment below:
# cloudWatch:
# clusterLogging:
# enableTypes: ["*"]
secretsEncryption:
keyARN: ${MASTER_ARN}
EOF
metadata.name과 managedNodeGroups[*].name 부분만 원하는 이름으로 고친다.
subnet 영역은 생성되어 있는 subnet의 ID를 찾아서 설정해준다.
기존 Subnet에 생성하기 위해서는 Subnet의 auto-assign IP setting 이 되어 있어야 한다.
Subnet 선택 > Action > Modify auto-assing IP settings에서 설정한다.
설정이 되었으면 eksctl로 새로운 cluster를 구성한다.
eksctl create cluster -f newelite-eks.yaml
설치 완료 메시지에 kubeconfig 파일은 다음과 같이 보여진다.
saved kubeconfig as "/home/ec2-user/.kube/config"
정상적으로 설치가 완료되면 다음과 같이 확인한다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-11-156.ap-northeast-2.compute.internal Ready <none> 97s v1.19.6-eks-49a6c0
ip-10-0-12-176.ap-northeast-2.compute.internal Ready <none> 99s v1.19.6-eks-49a6c0
ip-10-0-13-121.ap-northeast-2.compute.internal Ready <none> 99s v1.19.6-eks-49a6c0
$ kubectl get all -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/aws-node-9wndk 1/1 Running 0 104s
kube-system pod/aws-node-gk9h5 1/1 Running 0 105s
kube-system pod/aws-node-pv2l5 1/1 Running 0 105s
kube-system pod/coredns-78fb67b999-fv74d 1/1 Running 0 8m5s
kube-system pod/coredns-78fb67b999-tjqc5 1/1 Running 0 8m5s
kube-system pod/kube-proxy-5p2w2 1/1 Running 0 105s
kube-system pod/kube-proxy-7cp7j 1/1 Running 0 105s
kube-system pod/kube-proxy-bc4b9 1/1 Running 0 104s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 8m18s
kube-system service/kube-dns ClusterIP 172.20.0.10 <none> 53/UDP,53/TCP 8m12s
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/aws-node 3 3 3 3 3 <none> 8m12s
kube-system daemonset.apps/kube-proxy 3 3 3 3 3 <none> 8m11s
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/coredns 2/2 2 2 8m12s
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/coredns-78fb67b999 2 2 2 8m5s
EKS로 구성되어 있기 때문에 실제 kube-system namespace에서 보여야 하는 etcd, apiserver, controllermanager 등이 보이지 않는다.
앞으로 사용할 작업자 Role 이름을 Export 하여 bash_profile에 적용한다.
STACK_NAME=$(eksctl get nodegroup --cluster tango-bmt-eks -o json | jq -r '.[].StackName')
ROLE_NAME=$(aws cloudformation describe-stack-resources --stack-name $STACK_NAME | jq -r '.StackResources[] | select(.ResourceType=="AWS::IAM::Role") | .PhysicalResourceId')
echo "export ROLE_NAME=${ROLE_NAME}" | tee -a ~/.bash_profile
EKS Console에서 Kubernetes Cluster 객체도 볼수 있으며 이를 위해서는 추가적인 자격 증명이 필요하다.
IAM 사용자 역할을 아래 처럼 구성하여 EKS CONSOLE Credential을 구성한다.
c9builder=$(aws cloud9 describe-environment-memberships --environment-id=$C9_PID | jq -r '.memberships[].userArn')
if echo ${c9builder} | grep -q user; then
rolearn=${c9builder}
echo Role ARN: ${rolearn}
elif echo ${c9builder} | grep -q assumed-role; then
assumedrolename=$(echo ${c9builder} | awk -F/ '{print $(NF-1)}')
rolearn=$(aws iam get-role --role-name ${assumedrolename} --query Role.Arn --output text)
echo Role ARN: ${rolearn}
fi
아래와 같은 Role ARN을 확인할 수 있다.
$ if echo ${c9builder} | grep -q user; then
> rolearn=${c9builder}
> echo Role ARN: ${rolearn}
> elif echo ${c9builder} | grep -q assumed-role; then
> assumedrolename=$(echo ${c9builder} | awk -F/ '{print $(NF-1)}')
> rolearn=$(aws iam get-role --role-name ${assumedrolename} --query Role.Arn --output text)
> echo Role ARN: ${rolearn}
> fi
Role ARN: arn:aws:iam::369647062832:role/aws-reserved/sso.amazonaws.com/ap-northeast-2/AWSReservedSSO_SandboxAdminAccess_9bb4aaf21b4a335b
이 ARN을 사용하여 Cluster Credential Mapping을 생성한다.
eksctl create iamidentitymapping --cluster tango-bmt-eks --arn ${rolearn} --group system:masters --username admin
2021-05-08 12:29:03 [ℹ] eksctl version 0.44.0
2021-05-08 12:29:03 [ℹ] using region ap-northeast-2
2021-05-08 12:29:03 [ℹ] adding identity "arn:aws:iam::369647062832:role/aws-reserved/sso.amazonaws.com/ap-northeast-2/AWSReservedSSO_SandboxAdminAccess_9bb4aaf21b4a335b" to auth ConfigMap
EKS 환경의 aws-auth configmap에 정상적으로 저장되었는지 확인한다.
$ kubectl describe configmap -n kube-system aws-auth
Name: aws-auth
Namespace: kube-system
Labels: <none>
Annotations: <none>
Data
====
mapRoles:
----
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::369647062832:role/eksctl-tango-bmt-eks-nodegroup-ta-NodeInstanceRole-WC6BPL6I9XOT
username: system:node:{{EC2PrivateDNSName}}
- groups:
- system:masters
rolearn: arn:aws:iam::369647062832:role/aws-reserved/sso.amazonaws.com/ap-northeast-2/AWSReservedSSO_SandboxAdminAccess_9bb4aaf21b4a335b
username: admin
mapUsers:
----
[]
Events: <none>
'AWS EKS 실습' 카테고리의 다른 글
EKS를 위한 EFS 생성 (0) | 2021.05.08 |
---|