https://infrabear.tistory.com/9
네이버 클라우드 스터디에서 NKS와 Terraform을 실습하는데 아쉬움이 있어 추가적으로 정리해보았습니다.
실습환경
NKS(Ncloud Kubernetes Service) 서비스를 사용하기 위해서는 아래와 같은 리소스들이 필요합니다.
- VPC: 쿠버네티스 클러스터 생성을 위한 가상 네트워크
- 서브넷: VPC내에서 쿠버네티스 노드들을 생성할 서브넷
- LB 서브넷: 클러스터와 연동할 로드밸런서를 위한 서브넷(NCP에서 NAT와 LB에 대한 서브넷이 별도로 필요합니다.)
- NAT 게이트웨이(+NAT 서브넷): 아웃바운드 트래픽을 위한 NAT게이트웨이가 필요하며 NAT생성을 위해서는 NAT 서브넷이 먼저 필요합니다.
1. NKS 콘솔 설정
노드풀 구성
노드풀 설정 후 추가버튼을 눌러야 노드풀에 설정한 노드들이 추가됩니다.
인증키 설정 - 서버 생성과 동일하게 생성한 키를 선택하면 됩니다.
최종확인
2. 쿠버네티스 클러스터에 명령을 내릴 bastion서버 구성
저는 이전에 미리 만들어두었던 서버 이미지를 사용해 구성했습니다.
테라폼 설치 확인
이전에 설치해두었던 테라폼이 유지된채로 서버가 생성됨을 알 수 있습니다. 하지만 NKS를 조작하기 위한 ncloud cli는 설치되어 있지 않아 설치했습니다.
설치 명령어
wget https://www.ncloud.com/api/support/download/files/cli/CLI_1.1.19_20240321.zip
unzip CLI_1.1.19_20240321.zip
cd CLI_1.1.19_20240321/
cd cli_linux/
cp ncloud /usr/bin
#설치확인
ncloud help
ncloud cli 설치 이후 API인증 키 설정을 해주겠습니다. ncloud configure를 설정을 통해 액세스키와 시크릿 키 설정을 추가할 수 있습니다.
ncloud configure
액세스키와 시크릿 키는 중요하니 꼭 유출되지 않도록 관리하세요!
키 입력 후 API URL이 나오는데 엔터를 쳐서 넘어가면 됩니다.
설정 확인하기
ncloud server getRegionList
3. NKS IAM인증
NKS는 ncp-iam-authenticator를 통해 IAM인증을 제공합니다. IAM인증을 통해 kubectl명령어를 사용하려면 ncp-iam-authenticator를 설치하고 인증을 위한 kubeconfig 파일을 생성해야 합니다.
설치 및 인증 명령어
curl -o ncp-iam-authenticator -L https://github.com/NaverCloudPlatform/ncp-iam-authenticator/releases/latest/download/ncp-iam-authenticator_linux_amd64
chmod +x ./ncp-iam-authenticator
mkdir -p $HOME/bin && cp ./ncp-iam-authenticator $HOME/bin/ncp-iam-authenticator &&
export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile
##설치 확인
ncp-iam-authenticator help
##NKS 인증하기
ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid [clusterUUID] --output kubeconfig.yaml
주의해야 할 점은 NKS를 인증하는 부분에서 [clusterUUID]에 본인이 생성한 NKS의 uuid를 입력해야합니다.(NKS 콘솔에서 확인 가능)
환경변수 추가
vi ~/.bash_profile
환경변수 적용
source ~/.bash_profile
생성된 NKS노드 확인
k get nodes
콘솔에서 노드 확인
명령어와 동일한 노드 생성 확인
4. 2048게임 Deployment생성
cat <<EOF | k create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-2048
spec:
selector:
matchLabels:
app.kubernetes.io/name: app-2048
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/name: app-2048
spec:
containers:
- image: alexwhen/docker-2048
name: app-2048
ports:
- containerPort: 80
EOF
실행
k expose deployment deployment-2048 --port=80 --type=LoadBalancer
배포확인
kw
배포시 외부에서 접속가능한 로드밸런서의 EXTERNAL-IP를 확인할 수 있습니다.
접속화면
++추가 Global DNS연결
Global DNS 에 NKS LB 도메인으로 연결하기
Global DNS로 LB를 연결하기 위해 필요한 것
- 본인이 소유한 도메인(가비아 등에서 구매)
- Global DNS로 생성한 NS 레코드값을 구매한 도메인의 NS로 설정(가비아에서 구매시 가비아에서 설정해야 합니다.)
- 레코드에 따라 IP 또는 주소값 설정
- CNAME: 일반적으로 LB와 연결할때 사용할 수 있으며 등록한 도메인으로 접속한다면 배포된 LB주소로 이동하도록 구성할 수 있습니다.
- A, AAAA: 일반적으로 서버 1대의 IP를 이용하여 레코드를 구성할 수 있으며 서버 1대에서 서비스 배포시 서버의 IP를 레코드의 값으로 설정하여 이동하게 할 수 있습니다.
- 다양한 레코드 타입이 있지만 일반적으로 LB연결 시 CNAME, IP연결 시 A, AAAA타입을 사용합니다.
실습후기
- 클라우드 환경에서 서버 사용시 설정 하기가 귀찮아서 실습을 미뤘던 일이 많았는데 이미지를 사용하니까 부담없이 서버를 생성하고 삭제할 수 있었습니다.
- NKS 생성 - bation서버의 ncloud cli설치 ncp-iam-authenticator인증 및 kubeconfig설정을 통해 쿠버네티스 클러스터를 생성하고 이를 조작하는 마스터 노드의 인증방식을 알 수 있었습니다.
- Global DNS, 항상 서비스의 마무리는 배포를 통해 뿌듯함을 느끼는데 CNAME, A레코드 등 레코드를 등록하고 접속할 수 있어서 오늘의 실습을 무사히 마칠 수 있었습니다.
- 하지만 변경한 레코드의 값이 언제 배포되는지는 아직 잘 모르겠습니다.(+TTL, 도메인 캐시 등의 학습 필요)