- 테스트/작업 환경의 기반
1. Public Cloud 환경 구성하기
2. 클러스터 생성하기
3. 노드 생성하기
EKS를 생성하고 난 뒤에는 해당 클러스터의 Node Group을 생성해야한다. 생성한 Node 그룹 안에서 내가 서비스하고 싶은 pod들이 배치되고 관리되게 된다.
노드 생성도 클러스터와 마찬가지로 IAM 역할이 사전에 준비되어야 한다.
3-1. IAM 콘솔에서 Amazon EKS 노드 역할을 생성
- https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 역할(Roles)을 선택합니다.
- 역할(Roles) 페이지에서 역할 생성(Create role)을 선택합니다.
- 신뢰할 수 있는 엔터티 선택(Select trusted entity) 페이지에서 다음을 수행합니다.
- 권한 추가 페이지에서 사용자 지정 정책을 연결하거나 다음과 같이 합니다.
- 필터 정책(Filter policies) 상자에
AmazonEKSWorkerNodePolicy를 입력합니다. - 검색 결과의 AmazonEKSWorkerNodePolicy 왼쪽에 있는 확인란을 선택합니다.
- 필터 지우기(Clear filters)를 선택합니다.
- 필터 정책(Filter policies) 상자에
AmazonEC2ContainerRegistryReadOnly를 입력합니다. - 검색 결과의 AmazonEC2ContainerRegistryReadOnly 왼쪽에 있는 확인란을 선택합니다.
- 다음을 선택합니다.
생성하는 AmazonEKS_CNI_Policy 관리형 정책이나 IPv6 정책은 또한 이 역할 또는
aws-node Kubernetes 서비스 계정에 매핑된 다른 역할에 연결되어야 합니다. 이 역할에 정책을 할당하는 대신 Kubernetes 서비스 계정에 연결된 역할에 정책을 할당하는 것이 좋습니다. 자세한 내용은 서비스 계정용 IAM 역할(IRSA)을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 섹션을 참조하세요.- 이름, 검토 및 생성(Name, review, and create) 페이지에서 다음을 수행합니다.
- 역할 이름(Role name)에 역할의 고유한 이름(예:
AmazonEKSNodeRole)을 입력합니다. - 설명(Description)에서 현재 텍스트를 설명이 포함된 텍스트(예:
Amazon EKS - Node role)로 바꿉니다. - 태그 추가(선택 사항)에서 태그를 키-값 페어로 연결하여 메타데이터를 역할에 추가합니다. IAM에서 태그 사용에 대한 자세한 내용을 알아보려면 IAM 사용 설명서의 IAM 리소스에 태그 지정을 참조하세요.
- 역할 생성을 선택합니다.
3-2. 노드 생성하기
EKS > 클러스터 > solupia > 노드 그룹 > 노드 그룹 추가
error (서브
One or more Amazon EC2 Subnets of [subnet-***, subnet-***] for node group solupia_node_group does not automatically assign public IP addresses to instances launched into it. If you want your instances to be assigned a public IP address, then you need to enable auto-assign public IP address for the subnet. See IP addressing in VPC guide: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip

서브넷 설정에서 퍼블릭 ip주소 설정이 활성화되어있지 않아서 발생한 이슈로 보인다.

- error
인스턴스 ssh 접속이 도저히 되지 않아 보안그룹에서 모든 트래픽을 허용 후 접속이 가능하다. 추후 원인파악이 필요해보임.
4. AWS CLI 설치(kubectl 사용)
기존 환경 구성 문서에는 eks 의 구성이 설명되어 있지만 AWS 공식홈페이지를 참고하여 eks의 공식적인 구성과정을 살펴본다.
- 출력이 되지 않는다면 kubectl이 설치되어 있지 않은것이므로, kubectl을 설치해야한다.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.29.0/2024-01-04/bin/linux/amd64/kubectl
명령어를 실행한 경로에 kubectl 이 생성되었다.
- 바이너리에 실행 권한을 적용
$ chmod +x ./kubectl- 바이너리를
PATH의 폴더에 복사합니다.kubectl버전이 이미 설치된 경우$HOME/bin/kubectl을 생성하고$HOME/bin이$PATH로 시작하도록 해야 합니다.
$ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH- (선택사항) 셀 초기화 파일에
$HOME/bin경로를 추가하면 셀을 열 때 구성됩니다.
$ echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc- kubectl 설치 이후 어떤 서버와도 통신이 구성되지 않은 상태이다. 아래 명령어를 통해 리전 및 클러스터명을 입력하여
aws eks update-kubeconfig --region ap-northeast-2 --name <<클러스터명>>
- 이후 kubectl create pod 라던가 명령 시
Error from server (Forbidden): namespaces is forbidden: User "system:node:ip-192-168-2-75.ap-northeast-2.compute.internal" cannot create resource "namespaces" in API group "" at the cluster scope
권한 에러가 발생한다. 적절한 IAM 권한을 가진 계정에 aws configure를 해줘야한다.
[ec2-user@ip-192-168-2-75 ~]$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
error
해당 config 이후
kubect get pod 등과 같은 기본 명령에서 error: You must be logged in to the server (Unauthorized) 와 같은 에러가 발생한다. AWS EKS 클러스터 접근을 위한 컨피그 파일을 재생성 해줘야한다.
aws eks --region ap-northeast-2 update-kubeconfig --name <<클러스터명>>
해당 명령에도 에러가 발생한다.
An error occurred (InvalidClientTokenId) when calling the GetSessionToken operation: The security token included in the request is invalid.aws sts get-session-token --serial-number arn:aws:iam::***:mfa/*** --token-code 690215
MFA가 설정되어있는 계정에서 오류라고 판단하였으나 확인이 더 이상 되지 않아 Web에서 원인을 찾아본다.
- 웹 콘솔에서 액세스 정책을 추가한뒤 증상해결되었으나.. 근본적인 cli 상에서 어떤 부분이 문제였는지는 미해결..
- 클러스터 생성 시 인증모드를 EKS API 및 ConfigMap 으로 설정하였고 이 해결방식은 EKS API를 통해 액세스 정책을 추가함(Console에서.. 액세스 정책 추가)

그 이후 정상동작
Share article































