들어가며
지난 VKE 포스팅에서는 VKE의 과금 구조에 대해서 알아보고, 클러스터를 생성하는 과정을 작성했습니다.
과금 구조에서 설명했었는데, Vultr의 LoadBalancer 서비스는 하나당 한 달에 10 USD를 지불하면 사용 가능 합니다.
물론 돈이 많다면(?) 외부로 노출이 필요한 쿠버네티스 서비스마다 LoadBalancer 타입으로 생성하면 되겠지만, 저는 앞서 비용에 대해 열심히 고민한만큼 로드밸런서 하나에 Ingress 를 사용하여 최대한 사용하도록 하려고 합니다.
이번 포스팅에서는 VKE에 nginx-ingress-controller 를 설치하고 인증서를 통해 https 연결까지 가능하도록 설정해보겠습니다.
nginx-ingress-controller 설치
먼저, nginx-ingress-controller 를 설치할 네임스페이스를 생성해줍니다.
> kubectl create ns ingress-nginx
Bash
복사
Nginx Ingress helm chart 저장소를 추가하고, 최신으로 업데이트 합니다.
> helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
> helm repo update
Bash
복사
다음 명령을 통해 현재 nginx-ingress-controller 의 최신 차트 버전을 확인합니다.
현재는 4.8.4 가 최신 차트 버전이고, APP 버전은 1.9.4 입니다.
> helm search repo ingress-nginx
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 4.8.4 1.9.4 Ingress controller for Kubernetes using NGINX a...
Bash
복사
버전을 확인하는 이유는, 각 버전마다 호환되는 쿠버네티스 버전이 다르기 때문인데 호환성은 다음 링크를 통해 참고하도록 합니다. (https://github.com/kubernetes/ingress-nginx#support-versions-table)
현재 VKE는 1.28 버전이기 때문에, 최신 nginx-ingress-controller 를 사용해도 문제가 없습니다.
Supported | Ingress-NGINX version | k8s supported version | Alpine Version | Nginx Version | Helm Chart Version |
v1.9.4 | 1.28, 1.27,1.26, 1.25 | 3.18.4 | 1.21.6 | 4.8.3* | |
v1.9.3 | 1.28, 1.27,1.26, 1.25 | 3.18.4 | 1.21.6 | 4.8.* | |
v1.9.1 | 1.28, 1.27,1.26, 1.25 | 3.18.4 | 1.21.6 | 4.8.* | |
v1.9.0 | 1.28, 1.27,1.26, 1.25 | 3.18.2 | 1.21.6 | 4.8.* |
아래 명령어를 통해 4.8.4 버전의 nginx-ingress-controller 를 ingress-nginx 네임스페이스에 설치합니다.
> helm install ingress-nginx -n ingress-nginx ingress-nginx/ingress-nginx --version 4.8.4
Bash
복사
설치 완료후 네임스페이스의 리소스들을 조회해봅니다.
> kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-controller-55c4765864-rfg2z 1/1 Running 0 43s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.109.113.42 <pending> 80:32630/TCP,443:32249/TCP 43s
service/ingress-nginx-controller-admission ClusterIP 10.109.251.98 <none> 443/TCP 43s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1 43s
NAME DESIRED CURRENT READY AGE
replicaset.apps/ingress-nginx-controller-55c4765864 1 1 1 43s
Bash
복사
서비스의 LoadBalancer 타입을 자세히 살펴보시면 EXTERNAL-IP 항목이 <pending> 상태인 것을 확인할 수 있습니다.
아직 외부 IP주소가 할당되지 않았다는 뜻인데, 아마도 VKE에서 LoadBalancer가 생성 완료되지 않은 것 같습니다.
Vultr LoadBalancer 리소스 확인
VKE 콘솔에 들어가서 LoadBalancer 탭을 확인하면 새로운 LoadBalancer가 Loading 상태로 생성중인 것을 확인할 수 있습니다. (벌써 0.02 USD는 조금 마음아프네요)
조금 기다리면, VKE 콘솔에서 LoadBalancer의 상태가 Running 이 된 것을 확인할 수 있습니다.
생성된 로드밸런서 항목을 클릭하면, 자세한 정보가 나오는데 Linked Instances 를 보면 현재 VKE의 워커 노드 인스턴스들이 연결되어있다는 것을 알 수 있습니다.
또한 앞서 <pending> 상태였던 서비스도 IP 주소가 할당된 것을 확인할 수 있습니다.
> kubectl get svc -n ingress-nginx ingress-nginx-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.109.113.42 141.164.41.29 80:32630/TCP,443:32249/TCP 5m41s
Bash
복사
그럼 할당된 IP주소로 접속해볼까요?
현재는 로드밸런서에 아무런 애플리케이션을 연결하지 않았기 때문에, 아래와 같이 nginx의 404 Not Found 페이지가 보인다면, 성공적으로 로드밸런서 설정이 완료된 것입니다.
마치며
이번 포스팅에서는 VKE에 외부 접속이 가능하도록 ingress-nginx-controller 를 설치하여 LoadBalancer 설정을 해보았습니다.
로드밸런서 설정에는 앞으로 훨씬 많은 것들이 남았는데, 차근차근 문서를 업데이트 하도록 하겠습니다.
그나저나, 로드밸런서 10달러가 아까워서 매번 생성 후 테스트가 끝나면 삭제하고 있는 것은 비밀입니다 (…)