Service는 쿠버네티스에서 파드들의 반영속적인(ephemeral) 특성으로 인해 필요해진다. 파드는 언제든지 삭제되거나 다른 노드로 이동될 수 있으며, 생성 시 내부 IP를 할당받지만 이 IP는 클러스터 내부나 외부 통신에 자유롭게 사용될 수 없다. 이로 인해 고정된 엔드포인트로의 호출이 어렵게 되고, 이 문제를 해결하기 위해 서비스가 사용된다.
서비스는 파드를 통해 실행되는 애플리케이션을 네트워크에 노출시키며, 파드 간의 로드밸런싱을 제공한다. 이를 통해 파드 및 애플리케이션이 외부 사용자나 다른 앱들과 연결될 수 있게 되며, 여러 파드들에게 단일 네트워크 진입점을 제공한다.
클러스터 내부의 다른 리소스들과 파드들이 통신할 수 있도록 해주는 가상의 IP이다.
가장 기본적인 형태의 서비스로, 클러스터 내부의 다른 리소스들과 통신할 수 있도록 가상의 IP를 제공한다. ClusterIP로 들어오는 트래픽은 해당 PodIP:targetPort로 전송되며, IP를 알고 있어도 외부에서는 직접 접근이 불가능하다. Proxy 또는 port-forwarding을 통해서만 접근이 가능하다.
외부에서 클러스터 내의 파드를 연결할 수 있다.
NodePort는 외부에서 클러스터 내의 파드를 연결할 수 있는 서비스 타입이다. 모든 노드에서 특정 포트(30000~32767 사이)를 열어 이 포트로 전송되는 트래픽을 서비스로 전달한다. NodeIP:NodePort로 전달되는 요청을 감지하고 해당 파드의 포트로 트래픽을 전송한다. 클러스터 내부로 들어온 트래픽을 파드로 연결하는 과정에서 ClusterIP도 함께 생성된다.
외부에서 내부의 서비스에 접근할 수 있게 해주는 API 객체
NodePort나 LoadBalancer는 각각의 서비스에 대해 고유한 IP주소나 포트를 요구하게 되는데, Ingress를 사용하면 하나의 진입점을 통해 여러 서비스에 접근할 수 있으며, URL 경로, 도메인 이름에 따라 트래픽을 적절한 서비스로 라우팅할 수 있다.