minikube 에서 loadbalancer type의 service의 external ip가 pending 상태 일때

상황

local (mac os)에 minikube으로 k8s 클러스터 구성해 놓고, nginx-ingress helm chart를 install 했으나 LoadBalncer type의 service의 EXTERNAL-IP 가 상태로 더이상 진행이 안됨.

1
2
3
4
🌈  ~/workspace/Charts$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.XXX.0.1 <none> 443/TCP 22h
nakjunizm-front-nginx-ingress LoadBalancer 10.XXX.249.157 <pending> 80:32003/TCP,443:31274/TCP 46m

솔루션

external ip를 제공하는 퍼블릭 클라우드 제공자 (AWS, Azure GCP등) 에서 kubernates를 서비스 형으로 사용 하는경우에는 문제가 되지 않으나 로컬에 minikube이나 kubeadm 등으로 설치 한 경우는 해당 현상이 발생 합니다.
minikube의 경우 별도의 터미널을 더 열어서 minikube tunnel 명령어를 사용하면 LoadBalancer type의 서비스를 사용 가능 합니다.

새 터미널에서 터널 한 모습

1
2
3
4
5
6
7
8
9
10
11
12
🌈  ~$ minikube tunnel
Password:
Status:
machine: minikube
pid: 42342
route: 10.XXX.0.0/12 -> 172.XXX.110.3
minikube: Running
services: [nakjunizm-front-nginx-ingress]
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors

터널 후 원래 터미널에서 로드밸런서 다시 확인

1
2
3
4
🌈 ~/workspace/Charts$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.XXX.0.1 <none> 443/TCP 22h
nakjunizm-front-nginx-ingress LoadBalancer 10.XXX.249.157 10.XXX.249.157 80:32003/TCP,443:31274/TCP 60m

위와같이 EXTERNAL-IP 에 IP가 할당 된 것을 확인 할 수 있습니다.

2020-10-07 추가.
위 내용은 (라이센스 문제 등으로) Docker desktop 이 아닌 minikube으로 설치한 경우에 해당 하며,
LoadBalancer Type이 아닌 NodePort Type의 서비스도 터널을 해야 내 로컬호스트에서 접속 가능 합니다.

참조

Share