네이버 클라우드의 쿠버네티스 서비스 - NKS 사용하기

AWS의 EKS, GCP의 GKE, MS Azure의 AKS 등 퍼블릭 클라우드 사업체마다 관리형 쿠버네티스 서비스를 운영중인데, 네이버 역시 NKS 라는 서비스를 제공한다.

OIDC NCP의 크레딧을 사용할 일이 생겨 네이버 클라우드에서 쿠버네티스 클러스터를 띄워본다.


VPC 세팅

우선 VPC를 만드는 것은 이름이랑 네트워크 범위만 설정하면 되기 때문에 굉장히 간단하며, 주소 대역은 192.168.123.0/24 를 사용하였다.


쿠버네티스 클러스터를 띄우는데에는 기본적으로 두가지 서브넷이 필요하다.

하나는 VPC 내에서 노드들이 속할 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) 내에서 /17~/26 범위에 해당되는 서브넷이며, 나머지 하나는 클러스터와 연동할 로드밸런서를 위한 서브넷이다.

이 역시 위와 동일한 대역과 범위 안에 속해야 한다.

이를 위해 k8s-node 서브넷(192.168.123.128/26, Private, 일반) 하나와 loadbalancer 서브넷(192.168.123.64/26) 하나를 생성해주었다.

각 서브넷마다 NACL을 따로 만들어서 붙여줬지만, NACL은 사실상 디폴트가 전부 허용인데 딱히 규칙을 추가해주지 않았기 때문에 테스트용으로는 디폴트를 사용해도 큰 차이는 없다.


마지막으로 워커 노드들이 속할 서브넷을 프라이빗으로 만들었기 때문에, 퍼블릭한 컨테이너 이미지 레지스트리(도커 허브 등)와 통신이 되지 않는 문제를 해결하기 위한 NAT 게이트웨이를 하나 생성해줘야 한다.

퍼블릭 서브넷을 생성하고 NKS의 네트워크 타입을 퍼블릭으로 지정할 경우에는 각 노드마다 퍼블릭IP가 하나씩 생성되어 붙기 때문에 NAT 게이트웨이는 필요 없다.

노드마다 붙여줄 ACG(Access Control Group)의 경우에는 NKS를 생성하는 과정에서 자동으로 만들어서 붙여주므로 따로 관리해줄 필요가 없다.


Kubernetes Service 생성

쿠버네티스 버전은 현시점(2022.05.28)에서 1.22.9 와 1.21.9 를 지원하고 있으며, CNI 플러그인은 cilium 하나밖에 선택지가 없다.

앞서 설정해줬던 VPC 를 선택한 뒤, 가용영역 KR-2와 원하는 네트워크 타입을 선택해주면 앞서 만들어뒀던 서브넷(Public 혹은 Private)과 LB Private 서브넷이 자동으로 지정되는데, 만약 다른 서브넷을 사용하려는 경우 알맞게 변경해준다.

가용영역의 경우 KR-1은 현재 법인만 사용하는 영역이기 때문에 일반 사용자들은 모두 KR-2 를 사용한다.

최대 노드 수나 Audit Log 는 필요에 맞게 지정해주고, ACG 설정은 nks-* 처럼 자동 생성된다는 메시지를 확인할 수 있다.

다음 버튼을 누르면, “아웃바운드 인터넷 트래픽을 활성화하기 위해서는 NAT Gateway를 반드시 생성해야 합니다”라는 문구를 띄워주는데(Private의 경우), 앞에서 미리 생성해줬기 때문에 그냥 넘어간다.


다음으로는 노드 풀 단위로 워커 노드들의 운영체제, 자원 타입을 지정해주고 생성할 노드 개수와 서브넷을 선택하고 추가 버튼을 눌러준다.

그 이후 페이지부터는 노드 접속을 위해 사용할 인증키(만약 클러스터를 퍼블릭으로 공개할 경우)를 설정하고 생성만 하면 끝이다.


클러스터 생성이 완료되기까지는 약 30분 정도의 오랜 시간이 걸린다.

생성이 완료되어 상태가 초록불(운영중)으로 바뀐 이후에는, 아래 버튼을 통해 해당 클러스터의 설정파일을 다운로드할 수 있다.

kubectl 명령어에 --kubeconfig 옵션을 통해 다운로드한 설정파일을 넘겨줌으로써 방금 만든 NKS와 상호작용이 가능하다.

네이버가 관리해주는 쿠버네티스 엔진에 요청을 보내는 방식으로, 아래와 같이 방금 생성한 워커 노드들 목록을 확인해 볼 수 있다.

bconfiden2ui-iMac :: blog/_posts/kubernetes » kubectl --kubeconfig ~/OIDC/config get nodes
NAME         STATUS   ROLES    AGE   VERSION
dev-w-19u7   Ready    <none>   1h   v1.22.9
dev-w-19ud   Ready    <none>   1h   v1.22.9