[AWS]EKS 시리즈
1. EKS 세팅 실습하기(현재글)
2. EKS 세팅 트러블슈팅 정리(링크)
3. EKS 서비스 배포
k8s에 대한 정리는 별도로 했으니, 링크 참고(~ing)
eks 생성 및 설정에 대해서는 eksctl 방식으로 설정하는 경우에 대한 글이 더많다.
(실제로 aws에서 가이드를 주는 영상에도eksctl 방식으로 설정 및 세팅하는 경우를 알려주고 있다.)
https://www.youtube.com/watch?v=O3znWPUdt18
https://www.youtube.com/watch?v=kb6s0Tmp2CA
- 그러나 eks 기능 파악 + 섬세한 설정을 위해서 aws 콘솔을 통해 세팅하고자 한다.
- 콘솔로 작업하면, role이나 vpc 등을 좀 더 명확하게 내가 원하는 것으로 설정할 수 있다.
콘솔을 활용한 생성은 해당 블로그 (참고1 , 참고2)
EKS 클러스터 생성
1. eks cluster 역할 생성
2. 권한 추가
3. Control Plane(api server) 용 보안그룹 생성
-> 특정 규칙 편집 없이 우선 생성
4. eks cluster 생성
-> 이름 및 역할 설정
-> 네트워크 설정. VPC 설정하고 서브넷은 private/public 포함 vpc내의 서브넷 모두에 설정한다
이렇게 하는 이유는 파드가 생성될 각 워커노드는 private에 존재하며, 구현된 서비스에 접근할 수있도록 public에 ALB(ingress)가 존재해야하기 때문이다. 이때 각각 다른 가용영역에 생성해야하는데 이는 고가용성을 위해서이다.
-> 또한 설정할 VPC에 DNS Resolution과 hostname이 enable로 활성화되어있어야 한다.
-> cluster endpoint 접근 권한은 private으로, 즉 api 서버에 대해 접근할 수 있는 권한 범위를 퍼블릭으로 열어둘 것이냐, private으로 둘 것이냐를 설정하는 것이다.
-> 외에 로깅 구성 등은 우선 디폴트 값으로 설정해두고 skip 한다.
이후에 클러스터를 생성한다.
생성에는 시간이 꽤 소요된다.
5. OIDC 생성
OIDC란?(참고)
- 클러스터에서 사용자를 인증하는 방법 중 하나이다. 해당 자격 증명 공급자는 IAM과 함께 사용하거나 그 대안으로 사용할 수있다.
- EKS에서 쿠버네티스의 각 클러스터가 VPC IP 대역을 사용하여 pod,service 등을 생성할 수 있도록 VPC_CNI(네트워크 플러그인)를 제공한다. 이때 쿠버네티스 서비스 계정이 AWS IAM 리소스에 액세스하고 다룰 수 있도록 OIDC 값으로 IAM identity provider를 생성해줘야한다.
- oauth 2.0와 관련
- 권한 허가를 위한 프로토콜
- 목적은 사용자 인증과 사용자 신원 정보 제공/ 즉 OIDC로 OAuth에 있는 사용자 신원 정보를 제공해 달라고 권한을 요청하는 것이다.
- 실제로 OAuth 인증을 받으면 다른 애플리케이션에서 구글의 본인 계정의 프로파일 정보등을 request해서 가져올 수 있다. 실질적으로 사용자 인증보다는 제한된 사람에게 제한된 권한을 어떻게 잘 부여할 것인가에 대해 중점
- 반대로 OIDC는 인증 시스템이다. 사용자 정보를 관리하고 인증하는 것에 초점이 맞춰져 있다.
- 즉 사용자를 인증해주는 OIDC 자격증명 공급자의 퍼블릭키(URL)를 IAM 공급자에 추가해 주어서 해당 사용자로 클러스터에 연결하면 해당 퍼블릭 키로 인증하는 것이다.
이 부분에 대해서 이해하기 위해서는 auth 인증에 대해서 이해할 필요가 있다. (참고링크)
보통 AWS CLI나 이외에 여러 방법으로 eks에 접속하는 인증을 제공하기 위해서는 IAM을 사용하지만 여전히 기본 쿠버네티스 역할 기반 액세스 제어 (RBAC)를 권한부여에 사용한다고 한다. 따라서 IAM은 유효한 IAM 엔터티의 인증에만 사용된다. eks 클러스터의 쿠버네티스 api와의 상호작용에 대한 모든 권한은 기본 쿠버네티스 RBAC 시스템을 통해 관리된다.
API 서버로 들어오는 모든 요청은 etcd에 저장되는데, 이 전에 auth를 거치며, JWT or 인증서 등을 통해 클라이언트를 인증 후 RBAC 권한과 매칭되는지 검사한다. 해당 요청이 권한이 있다고 판단되면, Mutate, Validate 과정을 거쳐 etcd에 저장하는 구조이다.
Kubernetes는 OpenID Connect (OIDC)를 지원하기 때문에, Service Account와 OIDC를 매핑하여 인증절차로 사용할 수 있는 것이다. 다만 이를 WebHook에서 이전에는 Pod Identity WebHook으로 따로 구성하여서 사용하였다.
하지만 이제는 AWS에서 IAM이 OIDC와 연동이 가능하게 제공하고 있다.
6. 자격증명 공급자 추가
-> eks cluster의 detail에서 위의 URL을 복사
-> 공급자 URL에 위에서 복사한 링크를 붙여넣기 하고 지문 가져오기를 눌러준 다음에 자격 증명 공급자 생성
대상에 sta가 아니라 sts이다.
7. CNI 설정
파드네트워킹을 위한 CNI 설정
VPC CNI는 클러스터 내에서 파드간 네트워킹을 가능하게 한다.
eks 생성 시에 네트워크 추가기능에서 기본으로 CNI 플러그인이 설치된다
-> VPC CNI 역할 생성(IAM 콘솔 -> role -> create role)
-> 자격 증명 공급자에는 위에서 만들었던 eks OIDC 자격증명 공급자를 선택한다.(그래서 내가 만든 클러스터의 OIDC를 기억해야한다.)
eks 역할에 권한 추가
-> 권한 정책에서 CNI로 검색후 나오는 권한 추가
신뢰정책 편집
방금 만든 역할 선택 후에 신뢰관계 -> 신뢰관계 편집
aud": "sts.amazonaws.com" ->
sub": "system:serviceaccount:kube-system:aws-node"
VPC CNI에 역할 지정
EKS 콘솔에서 클러스터 → 구성 → 추가 기능 → vpc-cni 선택 → 편집
- 서비스 계정 열활에 앞에서 만든 CNI 역활을 붙여 준다.
- 업데이트 후 vpc-cni 상태가 다시 활성 된다.
8. 노드그룹에 대한 IAM 역할 생성
9. 보안그룹 인바운드 설정
보안 그룹 인바운드를 세팅해준다.
1. cluster 보안그룹
해당 보안그룹은 클러스터 생성시에 자동으로 생성 및 등록된다. 이미 권장 인바운드에 맞게 설정되어있다.
-> 여기서 additional security group이 바로 위에서 생성한 control plane에 대한 보안 그룹이다
-> 그리고 bastion server에 대해 22포트 443포트를 열어준다.
2. control plane 보안그룹
모든 노드그룹에 대해 https 타입으로 443 포트로 열어준다.
3. 노드 보안그룹
모든 노드 보안그룹에 대해서 인바운드 트래픽을 오픈한다.
control-plane 보안 그룹에 대해 443,1025-65536 포트를 오픈한다,
노드 그룹 생성 전에, container가 잘 실행되었는 지에 대해 확인하기 위해서
ssh 접속하여 eks cluster에 연결한 후에 pod를 불러온다.
아래와 같은 창이 뜨면 일단 cluster 생성 성공
trouble shooting : core-dns 미실행
-> 원래 cluster가 만들어지면 coredns도 만들어져야 하는데 pending 상태이다.
-> aws console에서 coredns status를 degraded -> active로 해야 노드그룹 생성 할 수 있을 것 같음.
해당 부분은 블로그에서 eks 관련 트러블슈팅 정리에서 자세하게 정리하고 해결했으니 어떻게 해결했는지는 여기서 참고!
10. 노드 그룹 생성
1. EKS 콘솔에서 클러스터 → 컴퓨팅 → 노드 그룹 추가
2. 노드 그룹 구성
-> 이름/ iam 역할 지정
3. 컴퓨팅 구성
->목적에 맞게 적절하게 구성(아래값이 디폴트다)
- AMI 유형 : Amazon Linux 2(AL2_x86_64)
- 용량 유형 : On-Demand
- 인스턴스 유형 : t3.medium
- 디스크 크기 : 20 GiB
4. 네트워킹 지정
private subnet 으로만 설정해두기
-> 위의 토글을 활성화 하면 아래 설정 화면이 나온다.
생성!까진 완료.
이렇게 까지 다 생성했는데 노드나 coredns 등에서 장애가 난다면 eks 세팅 관련 트러블 슈팅 글을 참고하기
Reference
https://aws-diary.tistory.com/129
https://velog.io/@idnnbi/kubernetes-OpenID-Connect
'DevOps' 카테고리의 다른 글
[AWS]EKS 세팅 Trouble Shooting 정리 (0) | 2022.05.31 |
---|---|
[AWS]EMR 접속해서 실습환경 구축하기 (0) | 2022.05.27 |
[AWS] EMR 세팅 실습해보기 (0) | 2022.05.17 |
AWS VS GCP (0) | 2022.03.24 |
VM(가상머신) VS Container(컨테이너) (0) | 2022.03.01 |