여러 개의 디플로이먼트를 하나의 완벽한 애플리케이션으로 연동하려면 포드 IP가 아닌, 서로를 발견(Discovery)할 수 있는 다른 방법이 필요하다.
도커 컨테이너는 -p(publish) 옵션으로 손쉽게 컨테이너를 외부로 노출할 수 있다. 그러나 쿠버네티스에서는 포드에 접근하도록 정의하는 방법이 도커와 다르다. 디플로이먼트의 YAML 파일에는 포드의 애플리케이션이 사용할 내부 포트만 정의한다. 이는 포드가 외부로 노출되게 하지는 않는다.
포트를 외부로 노출해 사용자들이 접근하거나, 다른 디플로이먼트의 포드들이 내부적으로 접근하려면 서비스(Service)라고 부르는 별도의 쿠버네티스 오브젝트를 생성해야 한다.
🌟 핵심 기능
쿠버네티스의 서비스는 포드에 어떻게 접근할 것이냐에 따라 종류가 세분화되어 있어 목적에 맞는 적절한 서비스의 종류를 선택해야 한다.
✔️ externalTrafficPolicy
트래픽의 분배를 결정하는 서비스 속성
externalTrafficPolicy: Cluster
모든 워커 노드에서 동일한 랜덤 포트가 개방
로드 밸런서 → 노드 중 하나로 요청 전달 → 포드 중 하나로 요청 전달
externalTrafficPolicy: Local
포드가 위치한 노드만 랜덤한 포트를 개방
로드밸런서는 포드가 위치한 노드로만 요청을 전달하며, 해당 노드 내의 포드에서만 요청이 분산된다.
네트워크 홉(hop)이 한 단계 줄어든다.
특정 노드의 포드에 부하가 집중되거나 적어질 수 있어, 자원 활용률 측면에서 바람직하지 않을 수도 있다.
✔️ ExternalName
요청을 외부로 리다이렉트하는 서비스
쿠버네티스를 외부 시스템과 연동해야 할 때 ExternalName 타입의 서비스를 사용할 수도 있다.
ExternalName 타입을 사용해 서비스가 외부 도메인을 가리키도록 설정할 수 있다.
[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)