앞서 생성한 디플로이먼트를 외부로 노출시켜본다.
노드 포트(NodePort)는 고정 포트(NodePort)로 각 노드의 IP에 서비스를 노출시킨다. 노드포트 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다.
디플로이먼트를 외부로 노출시키기 위해 리소스를 외부로 노출시키는 명령어인 kubectl expose
를 이용한다.
kubectl expose deployment [deployment name] --type=NodePort --port=80
에러 없이 노출이 완료됐다면 포트를 확인해본다.
노출시킨 deploy-nginx의 포트가 31643인 것을 확인할 수 있다.
이 포트로 접속해보면 정상적으로 접속되는 것을 확인할 수 있다.
하지만 이렇게 노드 포트를 통해 외부로 노출시키기 위해서는 우선 노드의 IP주소를 알아야 하고, 사용자에게 노드의 IP주소를 알려야하기 때문에 좋은 방법은 아니다.
디플로이먼트를 노출시키는 좋은 방법은 로드밸런서를 이용하는 것이다.
네이티브 쿠버네티스에서는 로드밸런서 타입이 기본으로 설정되어 있지 않기 때문에 MetalLB
를 사용한다.
우선 metalLB를 설치한다.
그리고 외부로 노출시킬 deployment를 생성합니다.
만약 이미지가 개인의 레포지토리에 존재하는 경우 해당 이미지의 위치를 적으면 된다.
이렇게 하면 한 개의 파드만 생성되기 때문에 3개를 생성하기 위해서scale
을 이용하여 replicas를 3으로 조정한다.
정상적으로 설치가 완료됐고, 이제 외부로 노출시켜본다. 이때 type은 --type=LoadBalancer
이다.
그리고 서비스를 확인해보면 아래와 같이 EXTERNAL-IP가 생성된 것을 확인할 수 있다.
생성된 외부 IP주소를 이용해 접속해본다.
접속은 정상적으로 되고, 실제로 chk-hn-595c5b45-w2vjr
가 존재하는지 확인해본다.
워커 노드 2에 존재하는 파드 이름인 것을 알 수 있다.
https://kubernetes.io/ko/docs/tutorials/stateless-application/expose-external-ip-address/
https://kubernetes.io/ko/docs/concepts/services-networking/service/