- Pod를 연결하고 외부에 노출하는 리소스
- 여러 개의 Pod에 쉽게 접근할 수 있게 고유한 도메인 이름을 부여한다
- 여러 개의 Pod에 접근할 때 요청을 분산하는 로드 밸런서 기능을 수행한다
- 클라우드 플랫폼의 로드 밸런서, 노드의 포트 등을 통해 Pod를 외부로 노출한다
- Service도 YAML 파일로 작성하여 Deployment와 연동하여 사용할 수 있으며, 종류도 여러가지가 있지만 아래 종류들만 알아도 충분해 보인다
종류
ClusterIP
- 쿠버네티스 내부에서만 Pod에 접근할 때 사용
- 서비스의 이름 또는 IP, Port로 접근했을 때, Service에서 Deployment의 라벨명을 가진 Pod들을 찾아 접근할 수 있게 리다이렉트 해줌
NodePort
- Pod를 외부에 노출 시킬때 사용, 워커 노드에 랜덤한 포트를 개방하여 그 포트로 Pod에 접근할 수 있게 설정해주는 Service
LoadBalancer
- 클라우드 플랫폼 서비스와 연동해서 사용하는 Service, 대표적으로 AWS, GCP가 있다고 함
- 이 Service 타입은 클라우드 플랫폼 서비스에서 자체적인 도메인과 IP를 할당해주기 때문에, 해당 도메인으로 Pod에 쉽게 접근할 수 있다
- 그리고 LoadBalancer가 워커 노드의 개방된 Port를 통해 Pod에 접근하는데, 이는 NodePort 방식과 꽤 유사하다
- 즉 LoadBalancer는 NodePort를 간접적으로 사용하게 해주는 Service
트래픽의 분배를 결정하는 속성, externalTrafficPolicy
- LoadBalancer 타입으로 생성하면 기본적인 분배 속성으로 Cluster가 지정되어 있는데, 이는 외부 요청의 분배 단위를 Cluster로 받겠다는 것
- 만약 노드가 2대인 상황에서 외부 요청이 들어온 경우, LoadBalaner를 통해 A 노드로 요청이 들어왔지만 Pod는 다 연동되어 있기에 B 노드의 Pod로 요청 처리가 될 수 있다, 이는 네트워크 hob이 발생하기에 비효율적
- 그래서 분배 처리 단위를 Cluster가 아닌 Local로 설정할 수 있는데, 위 문제점을 해결할 수가 있다, 그러나 상황에 따라서 타입, 속성을 정해 쓰는 것이 제일 중요하다