Service
- 서비스 개념
- 서비스 타입
- 서비스 사용하기
- 헤드리스 서비스
- kube-proxy
1. Service의 개념
- 동일한 서비스를 제공하는 pod 그룹의 단일 진입점을 제공
- nginx pod가 3개, 모두 같은 일을 하지만 각자 다른 IP를 가지고 있다.
- 똑같은 일을 하는 pod가 3개 있을때 누구에게 일을 시킬 것인가.
- 1번 node에 일이 몰렸다. 2번과 3번은 놀고 있다.
- 이러면 작업이 몰린 1번의 성능은 떨어지고 2,3번은 잉여자원이기 때문에 이런 형태는 좋지 않다
- 그렇기 때문에 작업을 균등하게 분배하는 것이 좋으며 Service를 통해 분배할 수 있다.
- Service는 선택된 label을 가진 pod들을 하나의 IP로 묶어 단일 진입점을 제공한다.
Service definition
Deployment-definition | Service-definition |
apiVersion: apps/v1 kind: Deployment metadata: name: webui spec: replicas: 3 selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container |
apiVersion: apps/v1 kind: Service metadata: name: webui-svc spec: clusterIP: 10.96.100.100 selector: app: webui ports: - protocol: TCP port: 80 targetPort: 80 |
- Deploy : nginx pod에 webui라는 label을 붙이고 replicas로 pod 3개 유지
- Service
- clusterIP는 생략가능, 생략하면 랜덤 생성
- selector로 app: webui label을 가진 pod들을 하나로 묶음
- port : 클러스터 IP의 port
- targetPort : 실제 서비스되는 pod들의 port
- 이렇게 Deploy와 Service를 생성하고 cluster IP:port로 접근하면 묶인 pod들로 분배시켜줌
2. Service 타입
- ClusterIP ( default )
- pod 그룹의 단일 진입점 ( Virtual IP ) 생성
- ClusterIP로 접근 시 ClusterIP에 묶인 pod들로 분배 연결
- 가장 작고 기본 서비스
- NodePort
- ClusterIP에 외부 Port 기능 추가
- 모든 Worker Node에 외부에서 접속가능 한 포트가 오픈됨
- Nodeport로 30100 오픈시 모든 node의 30100이 오픈됨
- LoadBalancer
- nodeport에 로드밸런서 기능 추가
- 클라우드 인프라스트럭처 ( AWS, Azure, GCP 등 )나 오픈스택 클라우드에 적용
- LoadBalancer를 자동으로 프로 비전하는 기능 지원
- 쿠버 외부에 LB 하나 만들어지고 Nodeport로 연결함
- ExternalName
- 클러스터 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용
- 클러스터 도메인이 실제 외부 도메인으로 치환되어 동작
- google.com으로 만들고 pod에 도메인을 하나 집어넣으면 google.com로 바껴서 외부 서비스
- 네이밍 서비스를 클러스트 내부로 지원