프로젝트의 마지막 단계에서 EKS를 사용할 계획이다. 직접적인 인프라 구축에 앞서, EKS를 활용하는데 필요한 네트워크 구성 전략에 대해 학습해보고자 한다.
가장 좋은 참고문서는 AWS의 공식 문서이다. EKS와 관련된 공식 문서는 많이 있지만 제법 구체적으로 나열된 요구사항을 적어둔 문서가 있다.
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/network-reqs.html
이 외에도 다른 문서들을 참고하였다.
1. VPC IP 대역
가장 우선적으로 제시하는 사항은 IP 의 갯수이다. 어쩌면 EKS를 사용할 때 가장 핵심적인 부분이라고도 볼 수 있겠다. 사용 가능한 IP 의 갯수가 고려 대상인 이유는, 구축된 클러스터에서 각 Pod들이 실제로 VPC의 리소스를 소모하기 때문이다. 따라서 VPC 자체의 IP 대역을 설정할 때도 신중할 필요가 있을 것이다. AWS 공식문서에서는 규모가 큰 서비스의 경우 처음부터 IPv6를 사용할 것을 권장하고 있다.
2. 서브넷 고려 사항
EKS는 생성시 다른 서비스와 비슷하게 서로 다른 AZ에 배치된 최소 2개의 서브넷을 요구한다. 이후, 지정된 서브넷에 2~4개의 ENI을 생성한다. 이 ENI 들은 VPC와 클러스터의 연결과 kubectl API를 사용할 수 있는 경로를 제공한다. 따라서, 적절한 권한과 kubeconfig 인증이 있으면 로컬 머신에서 EKS 클러스터에 대해 kubectl exec/logs 과 같은 kubectl API 명령어를 사용할 수 있다.
쿠버네티스 버전이 업데이트 되면 EKS는 ENI를 삭제, 재생성 할 수 있다. 따라서 기존의 네트워크 경로가 동작하지 않을 수 있음을 고려해야 한다.
3. 클러스터의 서브넷 요구 사항
클러스터 생성, 업데이트시 요구사항이다.
- IP 주소는 6개 이상 있어야 하며, 16개 이상을 권장한다.
- 서브넷은 서로 다른 AZ에 있어야 한다.
- Outposts나 Wavelength 서비스에 위치할 수 없다.
- 서브넷은 프라이빗을 권장한다.
- us-east-1, us-west-1, ca-central-1 서브넷은 사용할 수 없다.
4. 구성 요소별 IP 주소 패밀리
서비스 별로 사용 가능한 IP 패밀리를 표로 제공한다. 어떤 서비스는 IPv6를 제공하지 않는다. 현 단계 구상에서는 IPv4를 가정하고 있으므로 넘어간다.
5. 노드의 서브넷 요구 사항
기본적으로 EKS의 리소스는 클러스터를 생성할 때 지정한 서브넷에 배포할 수 있으나, 지정하지 않는 서브넷에도 배포가 가능하다. 이 경우, 해당 서브넷에 클러스터의 네트워크 인터페이스는 생성되지 않는다. 리소스를 배포하고 싶은 서브넷은 여러 조건을 만족해야 한다.
- 충분한 IP 주소
- 포드와 서비스에 IPv6를 적용하고 싶다면, 서브넷에 적당한 IPv6 CIDR블록 하나와 IPv4 CIDR 블록이 있어야 한다.
- 외부 인터넷에서 특정 포드로 접근이 필요한 경우, 로드밸런서와 퍼블릭 서브넷이 하나 이상 있어야 한다.
- 노드를 퍼블릭 서브넷에 배포 하려면 서브넷이 IPv4 또는 IPv6 퍼블릭 주소를 자동 할당 해야 한다.
- 노드를 프라이빗 서브넷에 배포 하려면, 해당 라우팅 테이블에 적절한 경로가 있어야 한다.
- 서브넷에 로드밸런서를 배포하려면 서브넷에 적절한 태그가 있어야 한다.
6. 공유 서브넷 요구 사항
VPC 공유 기능을 사용할 경우의 요구 사항이다. 본 프로젝트에서는 사용하지 않을 기능이므로 생략한다.
