디플로이먼트 노출시키기

박도준·2021년 4월 28일
0

Kubernetes & Docker

목록 보기
6/12
post-thumbnail
post-custom-banner

앞서 생성한 디플로이먼트를 외부로 노출시켜본다.

NodePort를 통한 노출

노드 포트(NodePort)는 고정 포트(NodePort)로 각 노드의 IP에 서비스를 노출시킨다. 노드포트 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다.

디플로이먼트를 외부로 노출시키기 위해 리소스를 외부로 노출시키는 명령어인 kubectl expose 를 이용한다.

kubectl expose deployment [deployment name] --type=NodePort --port=80

에러 없이 노출이 완료됐다면 포트를 확인해본다.

노출시킨 deploy-nginx의 포트가 31643인 것을 확인할 수 있다.

이 포트로 접속해보면 정상적으로 접속되는 것을 확인할 수 있다.


하지만 이렇게 노드 포트를 통해 외부로 노출시키기 위해서는 우선 노드의 IP주소를 알아야 하고, 사용자에게 노드의 IP주소를 알려야하기 때문에 좋은 방법은 아니다.



로드밸런서를 이용한 노출

디플로이먼트를 노출시키는 좋은 방법은 로드밸런서를 이용하는 것이다.

  • 외부 노출 시, 로드밸런서가 노드포트보다 좋은 점
    • 노드포트의 경우 노드의 IP를 외부로 알려야 하지만 로드밸런서는 고유의 IP를 만들어 가지게 되기 때문에 노드의 IP를 외부로 알리지 않다도 된다
    • 로드밸런서를 사용하면 원하는 경로를 최적화하여 구현이 가능하다.

네이티브 쿠버네티스에서는 로드밸런서 타입이 기본으로 설정되어 있지 않기 때문에 MetalLB를 사용한다.

  • MetalLB : 표준 라우팅 프로토콜을 사용하여 네이티브 Kubernetes 클러스터에 대한 로드 밸런서 구현 이다. 프라이빗 클라우드 환경에서 벤더사를 이용하지 않는 kubernetes 운영의 경우, 공유 IP만 존재한다면 이를 로드밸런서로 활용할 수 있게 만들어주는 장점이 있다.

우선 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/

https://jx2lee.github.io/cloud-install_metallb

profile
Better late than never
post-custom-banner

0개의 댓글