이번 포스팅에선 ncloud의 NKS(Ncloud Kubernetes Service)를 이용해 쿠버네티스 클러스터를 구성하는 과정을 다룹니다.
ncloud에서 제공하는 리소스 공식 문서와 여러 블로그를 통해 찾아봤지만, 2024년 말 기준 변경된 부분이 많아 직접 구성하며 다시 정리했습니다.
위의 이미지는 대략적인 클러스터 구성도입니다.
아래 순서대로 진행하겠습니다.
- VPC 생성
- Subnet 생성
- NAT Gateway 생성
- NKS Cluster 생성
- Route Table 설정
1. VPC 생성
`VPC` - `VPC Management` - `VPC 생성` 버튼을 눌러 VPC를 만듭니다.
2. Subnet 생성
`VPC`- `Subnet Management` - `Subnet 생성` 버튼을 눌러 서브넷을 만들어 줍시다.
k8s 클러스터 구성을 위해 필요한 최소한의 서브넷은 위의 이미지처럼 4개가 있어야 합니다.
VPC는 위에서 생성한 NKS 전용 VPC를 선택하고, 가용 Zone은 `KR-1`만 사용했습니다.
Internet Gateway 전용 여부 부분은 퍼블릭/프라이빗 서브넷을 정하는 데 사용됩니다. 용도에 따라 아래 표를 참고해 생성합니다.
Public/Private | 용도 | 설명 |
private | 일반 | 마스터 노드, 워커 노드가 위치할 서브넷 |
public | LoadBalancer | public 로드 밸런서 전용 |
private | LoadBalancer | private 로드 밸런서 전용 |
public | NatGateway | NAT Gateway 전용 |
3. NAT Gateway 생성
private 서브넷에 속한 워커들이 외부와 통신하려면 NAT Gateway(또는 NAT 인스턴스)가 반드시 필요합니다.
`VPC` - `NAT Gateway` - `NAT Gateway 생성` 버튼을 눌러 생성합니다.
VPC는 위에서 생성한 NKS 전용 VPC를 지정하고, 서브넷은 NAT Gateway 용도로 생성했던 서브넷을 선택합니다.
마지막으로 공인 IP 신청을 통해 외부와 통신할 수 있도록 합니다.
4. NKS Cluster 생성
`Ncloud Kubernetes Service` - `Cluster` - `생성하기` 버튼을 눌러 클러스터 생성 설정 화면으로 이동합니다.
4-1. 클러스터 생성
VPC는 NKS 전용 VPC를 선택합니다.
`Subnet` 부분은 워커 노드가 위치하는 private 서브넷(10.0.10.0/24)로 잡고, 로드 밸런서 전용 서브넷은 각각 LB public/private에 맞게 설정됩니다.
다음 버튼을 누르면 아래 화면처럼 NAT Gateway를 생성해야 한다는 팝업창이 뜨는데, 위에서 이미 생성했으니 확인을 누르고 넘어갑니다.
4-2. 노드풀 설정
노드풀 설정 화면에서는 노드들이 생성되는 노드풀에 대한 설정을 할 수 있습니다.
노드 수에 설정한 값만큼 설정한 타입(서버 스펙)의 서버를 생성하며, Subnet 부분에선 public 서브넷에 워커 노드를 배치할 일이 없으니 자동 할당으로 두면 되겠습니다.
4.3 인증키 설정
인증키 설정 화면에서는 인증키 설정을 통해 노드 접속을 위한 관리자 비밀번호를 얻는데 사용할 수 있습니다.
기존에 인증키가 있다면 해당 인증키를 사용해도 되며, 새로운 인증키를 생성해서 접속할 수도 있습니다.
4.4 최종 확인 후 생성
마지막으로 설정한대로 되었는지 확인하고 `생성하기` 버튼을 누르면 클러스터가 생성됩니다.
생성되는데 몇 분정도 시간이 걸리니 기다려 줍니다.
클러스터 생성이 완료되면 `클러스터 상태` 부분에 녹색 표시와 `운영 중`이 보입니다.
5. Route Table 설정
마지막으로 클러스터 내부 노드가 외부와 통신할 수 있도록 NAT Gateway를 라우팅 테이블에 추가해야 합니다.
`VPC` - `Route Table` - `Route Table` 메뉴로 이동합니다.
이곳에서 private-table을 찾아 `Route 설정` 버튼을 눌러 NAT Gateway를 추가합니다.
저는 이미 추가해서 적용 Subnet 수에 2개로 표시되었습니다.
팝업 창에서 NAT Gateway를 생성한 후 확인 버튼을 눌러 등록합니다.
클러스터 접속하기
이제 클러스터 구성을 마쳤으니 외부에서 접속해 봅시다.
외부에서 클러스터에 접속하기 위해선 NKS 인증에 사용되는 ncp-iam-authenticator를 설치해야 합니다. (ncloud 공식 문서)
설치 후 kubectl 설정 파일을 수정해서 개인 로컬 머신에서 클러스터로 접속할 수 있습니다.
1. ncp-iam-authenticator 설치
저는 Mac 환경에서 Homebrew로 설치했습니다. 그 외 방법은 공식 문서를 참고해 주세요.
brew tap NaverCloudPlatform/tap
brew install ncp-iam-authenticator
2. IAM 인증
ncp-iam-authenticator를 사용하려면 API 인증키가 필요한데요, 네이버 클라우드 플랫폼 홈페이지에서 "마이 페이지>계정 관리>인증키 관리" 메뉴에서 찾을 수 있습니다. (ncloud 공식 문서)
API 인증키가 없다면 빨간 박스의 "신규 API 인증키 생성" 버튼을 눌러 인증키를 생성합니다.
생성 후 Access Key ID와 Secret Key를 잘 보관합니다.
저는 공식 문서처럼 `~/.ncloud/configure` 파일로 만들었습니다.
$ cat ~/.ncloud/configure
[DEFAULT]
ncloud_access_key_id = ACCESSKEYACCESSKEYAC
ncloud_secret_access_key = SECRETKEYSECRETKEYSECRETKEYSECRETKEYSECR
ncloud_api_url = https://ncloud.apigw.ntruss.com
[project]
ncloud_access_key_id = ACCESSKEYACCESSKEYAC
ncloud_secret_access_key = SECRETKEYSECRETKEYSECRETKEYSECRETKEYSECR
ncloud_api_url = https://ncloud.apigw.ntruss.com
3. kubeconfig 설정
kubeconfig 파일을 생성하면 매번 `kubectl` 명령어를 입력할 때마다 config 파일의 위치를 입력해야 합니다.
kubectl get namespaces --kubeconfig kubeconfig.yaml
매번 이런 명령어를 입력하는게 여간 귀찮은 게 아닙니다. 이를 위해 kubeconfig를 설정해 클러스터 컨텍스트를 전환해 사용하면 간편합니다.
먼저 kubeconfig에 대해 간단하게 알아봅시다.
`$HOME/.kube/confing` 파일 구조는 아래처럼 생겼습니다.
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ~~
server: ~~
name: 클러스터 이름1
- cluster:
certificate-authority-data: ~~
server: ~~
name: 클러스터 이름2
contexts:
- context:
cluster: 클러스터 이름1
user: 클러스터 어드민1
name: 클러스터 이름1
- context:
cluster: 클러스터 이름2
user: 클러스터 어드민2
name: 클러스터 이름2
current-context: 현재 사용 중인 클러스터 이름
kind: Config
preferences: {}
users:
- name: 클러스터 어드민1
user:
client-certificate-data: ~~
client-key-data: ~~
- name: 클러스터 어드민2
user:
client-certificate-data: ~~
client-key-data: ~~
이 파일에는 클러스터 정보(컨텍스트)들이 있는데, cluster, contexts, users 항목들이 있습니다.
- clusters: 여러 클러스터의 정보들을 관리하는 영역입니다.
- cluster: 클러스터 관련 정보
- certificate-authority-data: base64로 인코딩 된 CA 인증서
- server: 접속할 클러스터의 주소
- name: 클러스터 이름
- cluster: 클러스터 관련 정보
- contexts: 클러스터 관리자와 클러스터를 연결한 정보
- users: 클러스터 관리자에 대한 인증 정보
이곳에 있는 여러 클러스터 정보를 이용해 원하는 클러스터에 `kubectl` 명령어를 사용할 수 있는데요,
아래의 명령어를 통해 config에 있는 클러스터 컨텍스트들을 확인할 수 있습니다.
kubectl config get-contexts
저는 docker-desktop을 사용해서 1개만 표시됩니다.
이제 kubeconfig 파일을 생성해서 config 파일에 병합해 봅시다.
3.1 ncp-iam-authencticator로 kubeconfig 파일 생성하기
1. 아래 명령어로 kubeconfig.yaml 파일을 생성합니다.
ncp-iam-authenticator create-kubeconfig --region <region-code> --clusterUuid <cluster-uuid> --output kubeconfig.yaml
region code는 `KR`을, cluster-uuid는 NKS 콘솔 화면에서 클러스터의 UUID를 찾아 입력합니다.
2. 생성된 kubeconfig 파일을 확인합니다.
$ kubectl get namespaces --kubeconfig kubeconfig.yaml
NAME STATUS AGE
default Active 1h
kube-node-lease Active 1h
kube-public Active 1h
kube-system Active 1h
kubernetes-dashboard Active 1h
3.2 kubeconfig 병합하기
1. `~/.kube/config` 파일과 병합합니다. `~./kube/merged` 파일로 만들었습니다.
KUBECONFIG=~/.kube/config:~/kubeconfig.yaml kubectl config view --merge --flatten > ~/.kube/merged
2. kubectl config 명령어로 컨텍스트를 확인해 등록되었는지 확인합니다.
kubectl config get-contexts
nks-kr로 시작하는 클러스터 컨텍스트가 등록된 것을 확인할 수 있습니다.
3. NKS 접속을 위해 컨텍스트를 변경합니다. 확인한 context name을 입력합니다.
kubectl config use-context <context-name>
이제 `kubectl` 명령어만으로 NKS 클러스터에 접근할 수 있습니다.
자주 사용하는 kubeconfig 명령어들
자주 사용하는 kubeconfig 명령어는 아래에 정리했습니다.
config 파일 확인
kubectl config view
컨텍스트 리스트 확인
kubectl config get-contexts
현재 컨텍스트 확인
kubectl config current-context
컨텍스트 변경
kubectl config use-context <context-name>
참고
- https://kubernetes.io/ko/docs/concepts/configuration/organize-cluster-access-kubeconfig/
- https://reaperes.medium.com/%EC%97%AC%EB%9F%AC-kubeconfig-%ED%8C%8C%EC%9D%BC%EC%9D%84-%ED%95%98%EB%82%98%EB%A1%9C-%EB%AA%A8%EC%9C%BC%EB%8A%94-%EB%B0%A9%EB%B2%95-56e2955a3b33
- https://vnvn31.tistory.com/entry/Kubernetes-Multi-Config-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-kubectl-config-%EB%AA%85%EB%A0%B9%EC%96%B4
'Kubernetes' 카테고리의 다른 글
쿠버네티스에서 트래픽 유실 없는 무중단 배포 적용하기 (0) | 2025.01.06 |
---|---|
ncloud NKS에서 Nginx Ingress Controller 설치부터 HTTPS 적용하기 (0) | 2025.01.03 |
[k8s] 쿠버네티스 핵심 개념 (0) | 2024.09.11 |
[k8s] 쿠버네티스 시작하기 (0) | 2024.09.11 |