목차
1. 전제 조건
2. fargate 배포 시 고려 사항
3. 샘플 사용하기
1. 전제 조건
아래 내용들을 고려하여 작성한다.
- private endpoint 사용
- private ecr 사용
- private 환경에 접근하여 작업할 수 있는 작업 인스턴스 생성 (기본 세팅 완)
- vpc endpoint 생성
- NAT gw 사용
- namespace와 접근할 iam 을 한번에 관리
- AWS LBC를 위한 서브넷 태그
2. fargate only 배포 시 고려 사항
2-1. VPC
VPC의 아래 두 옵션은 활성화를 확인해야 한다.
# Enable DNS resolution
enable_dns_support = true
# Enable DNS hostnames
enable_dns_hostnames = true
두 옵션은 프라이빗 호스팅 영역에서 DNS 쿼리를 위해 설정하는 값이다. DNS hostname 은 인스턴스에 DNS name 을 부여한다. 이를 통해 인스턴스를 쉽게 찾고 통신할 수 있다. 도메인 이름을 사용하여 VPC 내 리소스를 참조할 수도 있다. DNS resolution은 managed service의 엔드포인트 도메인의 프라이빗 ip 주소를 확인할 때 사용된다.
2-2. fargate profile 과 namespace
Fargate 프로파일은 EKS 클러스터에서 Fargate를 사용하여 파드를 실행하기 위해 필요한 것으로, 파드가 Fargate에서 실행될 수 있게 지정하는 네임스페이스(namespace)와 선택기(selector)를 정의한다.
한마디로, fargate only 환경에서는 생성하고자 하는 namespace의 fargate profile 이 먼저 존재해야 pod 가 올라간다는 의미다.
만약 구성이 되어 있지 않은 상황에서 pod 를 올리게 된다면, fargate 스케쥴러가 fargate profile 확인을 실패하고, 노드 스케쥴러가 재시도하지만, 일반 노드그룹이 없어 계속 pending 상태로 대기한다.
2-3. vpc endpoint
일반적으로 private endpoint cluster 를 생성하면, 아래의 vpc endpoint 들을 생성해야 한다.
- com.amazonaws.ap-northeast-2.s3 (gw)
- com.amazonaws.ap-northeast-2.ecr.api
- com.amazonaws.ap-northeast-2.ec2
- com.amazonaws.ap-northeast-2.ecr.dkr
fargate의 경우 한가지를 더 추가해 주어야 한다.
- com.amazonaws.ap-northeast-2.sts
단, ap-northeast-2b에는 vpc endpoint 가 지원되지 않는 경우가 있어, 에러가 날 수 있다. 이 점을 고려해서 코드를 짜야한다.
2-4. coreDNS
기본적으로 coreDNS는 워커 노드에 생성된다. eks 를 배포하고 나면 coreDNS의 deployment 는 존재하지만, fargate 위에 생성되지 않는다. 따라서 클러스터에 접근해, deployment 의 설정을 조금 변경해 주어야 한다.
kubectl patch deployment coredns \
-n kube-system \
--type json \
-p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'
그러나 테라폼으로 배포하기 때문에 아래 코드로 바로 적용 시킬 수 있다.
module "eks_cluster" {
source = "terraform-aws-modules/eks/aws"
version = "20.5.1"
cluster_addons = {
kube-proxy = {}
vpc-cni = {
resolve_conflicts = "OVERWRITE"
}
# coreDNS 는 fargate 위에 올라가지 않으므로 설정이 필요함
coredns = {
configuration_values = jsonencode({
computeType = "Fargate"
})
}
}
... #생략
}
2-5. kube-proxy
당연하게도, fargate 에는 daemonset이 올라가지 않는다. (올라가게 된다면 미친듯이 생성되는 roof에 걸릴지도..)
kube-proxy는 daemonset이기 때문에 해당 환경에서는 올라가지 않는다. 그럼 fargate의 네트워크는 어떻게 통신될까? kube-proxy가 아닌 컨트롤 플레인의 fargate 컨트롤러가 맞춰준다고 한다.
3. 샘플 사용하기
위 내용의 샘플 코드를 작성해서 올려두었다.
git clone https://github.com/o-dev-lab/eks-terraform-sample.git
권한이 있는 iam 을 가지고 아래 경로에서 배포할 수 있다.
cd samples/private_fargate
aws configure
terraform init
terraform plan
terraform apply
배포 전, samples/private_fargate/terraform.auto.tfvars 내용을 변경하여 배포 해야 한다.
'가시다님 AEWS' 카테고리의 다른 글
[가시다's AEWS] 2주차 AWS LBC 설치하기 (1) | 2024.03.17 |
---|---|
[가시다's AEWS] 2주차 EKS Networking (0) | 2024.03.17 |
[가시다's AEWS] 1주차 EKS Cluster 소개와 콘솔 설치 (0) | 2024.03.08 |