티스토리 뷰

Amazon EKS(Elastic Kubernetes Service)에서는 클러스터 관리의 편의성과 기능성을 제공하기 위해 다양한 추가 기능(add-ons)을 제공한다.

 

EKS 추가 기능들은 AWS 관리형 서비스를 통해 클러스터의 중요한 구성 요소들을 자동으로 관리할 수 있도록 도움을 준다. https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eks-add-ons.html

 

EKS 추가 기능들로 쿠버네티스 클러스터의 네트워킹, 보안, 로깅 및 모니터링 기능을 강화할 수 있다.

 

AWS 콘솔 페이지에서 EKS 클러스터를 생성하는 경우 세가지 추가 기능이 자동으로 생성된다.

 

1. Amazon EKS kube-proxy

2. Amazon VPC CNI plugin for Kubernetes

3. CoreDNS Amazon EKS 

 

각각 테라폼으로 어떻게 정의하는지 알아보고, 어떠한 기능들을 핸들링할 수 있는지 간단히 짚고 넘어가려고 한다.

(하나하나가 세부적으로 보면 너무 큰 기능이라 너무 딥하게 정리하지는 않을 것이다)

 

여기서 주의할 점은 EKS 버전에 따라 호환되는 추가기능 버전들이 있어서 주의가 필요하다.

 

CoreDNS의 호환 버전

 

Amazon EKS kube-proxy

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-kube-proxy.html

kube-proxy 추가 기능은 Amazon EKS 클러스터의 각 Amazon EC2 노드에 배포됩니다. 노드에 대한 네트워크 규칙을 유지하고 Pods와(과)의 네트워크 통신을 가능하게 합니다. 이 추가 기능은 클러스터의 Fargate 노드에 배포되지 않습니다.

 

kube-proxy의 역할은 다음과 같다.

 

트래픽 라우팅: kube-proxy는 쿠버네티스 서비스가 정의하는 규칙에 따라 네트워크 트래픽을 처리한다. EKS에서는 kube-proxy가 클러스터 내의 각 서비스에 대한 트래픽을 해당 서비스의 pod로 효과적으로 라우팅해준다.

 

로드 밸런싱: 서비스에 연결된 여러 파드 사이에서 트래픽을 고르게 분산시키는 역할을 한다. 서비스의 가용성과 안정성을 높여 주며, 고르지 않은 트래픽 분포로 인한 특정 파드의 과부하를 방지한다.

 

IPVS/IPTables: EKS에서 kube-proxy는 기본적으로 IPTables을 사용하여 트래픽을 관리한다. IPTables 모드는 트래픽 라우팅과 필터링 규칙을 사용하여 트래픽을 pod로 전달한다. IPVS는 더 효율적인 트래픽 로드 밸런싱을 제공하며, 큰 규모의 클러스터에서 더 높은 성능을 보장해준다.

 

특이한 점은 Amazon EKS에서 fargate 프로파일을 사용할 때, kube-proxy가 실행되지 않는다.

 

AWS fargate는 서버리스 컴퓨팅 환경을 제공하여 노드 수준의 관리가 필요 없기 때문이다.


Fargate는 AWS의 기본 인프라 및 네트워킹 기능을 사용하여 트래픽을 관리하고, 로드 밸런서(NLB, ALB)가 kube-proxy의 일부 기능을 대체해서 관리하기 때문이다.

 

사실 들어갈 필요가 없는 옵션이다.

Amazon VPC CNI

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-vpc-cni.html

Amazon EKS 클러스터에 있는 Pod 네트워킹용 네트워킹 플러그 인입니다. 플러그인은 Kubernetes 노드에 VPC IP 주소를 할당하고 각 노드의 Pods에 대한 필수 네트워킹을 구성하는 역할을 합니다.

 

vpc_cni_config = {
  addon_version = "v1.14.0-eksbuild.3"
  configuration_values = jsonencode({
    env = {
      ENABLE_POD_ENI           = "true"
      ENABLE_PREFIX_DELEGATION = "true"
      WARM_PREFIX_TARGET       = "1"
    }
    init = {
      env = {
        DISABLE_TCP_EARLY_DEMUX = "true"
      }
    }
  })
}

 

- addon_version : eks 1.29 버전에 호환되는 cni 버전이 v1.14.0-eksbuild.3 이다.

- ENABLE_POD_ENI : Pod가 Elastic Network Interfaces(ENI)를 직접 할당받을 수 있게 함(링크)

- ENABLE_PREFIX_DELEGATION : 노드 당 더 많은 IP 주소를 할당할 수 있도록 함(링크)

- WARM_PREFIX_TARGET : 최소한 하나의 IP 접두어가 항상 예비 상태로 유지되어 새로운 팟이 빠르게 시작될 수 있도록 함(링크)

- DISABLE_TCP_EARLY_DEMUX : 이 옵션을 default (false) 로 놔둘 경우 kubelet에서 이슈 발생(링크1, 링크2)

 

CoreDNS Amazon EKS

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-coredns.html

 

CoreDNS는 Kubernetes 클러스터 DNS로 사용할 수 있는 유연하고 확장 가능한 DNS 서버입니다. 하나 이상의 노드가 있는 Amazon EKS 클러스터를 시작하면 클러스터에 배포된 노드 수에 관계없이 CoreDNS 이미지의 복제본 2개가 기본적으로 배포됩니다. CoreDNS Pods는 클러스터의 모든 Pods의 이름을 확인합니다. 클러스터에 CoreDNS deployment의 네임 스페이스와 일치하는 네임스페이스의 AWS Fargate 프로파일이 포함되어 있는 경우 CoreDNS Pods를 Fargate 노드에 배포할 수 있습니다

 

CoreDNS는 요약하면 아래의 역할을 한다. 

 

서비스 디스커버리: 쿠버네티스 클러스터 내에서 서비스 이름을 IP 주소로 변환한다. 예를 들어, 클러스터 내의 한 파드가 다른 파드의 서비스를 찾을 때 CoreDNS가 그 이름을 실제 IP 주소로 연결한다.

외부 DNS 쿼리 포워딩: 클러스터 외부의 리소스나 인터넷 주소를 조회할 필요가 있을 때, CoreDNS가 이 요청을 받아 인터넷의 다른 DNS 서버로 전달하고 결과를 받아 클라이언트에 반환한다.

coredns_config = {
    addon_version = "v1.11.1-eksbuild.6"
    configuration_values = jsonencode({
      computeType = "Fargate"
      resources = {
        limits = {
          cpu    = "0.25"
          memory = "256M"
        }
        requests = {
          cpu    = "0.25"
          memory = "256M"
        }
      }
    })
}

computeType : 이 설정은 CoreDNS가 실행될 컴퓨팅 유형을 지정한다. 옵션은 EC2와 Fargate가 있다. 

resources : CoreDNS 운영에 필요한 리소스(컴퓨팅 리소스)를 정의. 이 섹션은 리소스의 "limits"와 "requests"를 모두 설정해야한다.

 

terraform apply가 완료되면 아래와 같이 두 개의 coreDNS 파드가 생성된다.

> kubectl get pods -n kube-system
NAME                       READY   STATUS    RESTARTS   AGE
coredns-66c6c54986-gb9gk   1/1     Running   0          6d21h
coredns-66c6c54986-msvws   1/1     Running   0          6d21h

 

마치며

EKS 클러스터를 설정했을 때, 기본적으로 설치되는 추가 기능과 EBS CSI 드라이버(추가 예정)에 대해서 정리해봤다.

 

자동으로 설정해주는 것 만큼, 각각을 엄청 자세하게 알 필요가 없을 것 같기도 하다.

 

다음은 EKS 권한 관리를 위한 IRSA와 OIDC에 대해 짚고 넘어갈 것 같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함