- 서비스 개념 ← 오늘 볼 내용
- 서비스 타입 ← 오늘 볼 내용
- 서비스 사용하기
- 헤드리스 서비스
- kube-proxy
1. 서비스 개념
쿠버네티스에서의 서비스(Service)는 동일한 서비스를 제공하는 파드 그룹에 대한 단일 진입점을 제공하는 추상화다.
예를 들어 app: webui라는 레이블을 가진 파드가 3개의 각 노드에 하나씩 배포되어있다고 가정해보자.
쿠버네티스 서비스를 통해 각 파드를 하나로 묶어서 랜덤의 가상의 IP를 생성할 수 있다.
가상의 IP는 마치 로드밸런서와 같은 역할로서 3개의 파드를 묶은 단일 진입점이라고 할 수 있다.
그래서 가상 IP를 로드밸런서 IP라고도 한다.
만약 파드의 replicas가 증가하여 scale out되는 경우도 쿠버네티스는 새로 배포된 파드의 레이블을 검사하고 가상의 IP로 묶인 파드 그룹에 포함시킴으로 서비스가 제공되도록 만든다.
Deployment definition | Service-definition |
apiVersion: apps/v1 kind: Deployment metadata: name: webui spec: replicas: 3 selector: matchLabels: app: webui template: metadata: labels: app: webui spec: containers: name: nginx-container image: nginx:1.25 |
apiVersion: v1 kind: Service metadata: name: webui spec: clusterIP: 10.96.100.100 selector: app: webui ports: - protocol: TCP - targetPort: 80 |
위 yaml코드는 가상의 IP(10.96.100.100)를 생성함으로 디플로이먼트를 통해 생성된 nginx 파드 3개가 app: webui라는 레이블로 인해 하나의 가상 IP로 묶음으로 동일한 IP로 nginx 파드로 접근할 수 있게 된다.
2. 서비스 타입
- ClusterIP(default)
- Pod 그룹의 단일 진입점(Virtual IP) 생성
- NodePort
- ClusterIP가 생성된 후
- 모든 Worker Node에 외부에서 접속가능한 포트가 예약
- LoadBalancer
- 클라우드 인프라스트럭처(AWS, Azure, GCP 등)나 오픈스택 클라우드에 적용
- LoadBalancer를 자동으로 프로비전하는 기능 지원
- ExternalName
- 클러스터 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용
- 클러스터 도메인이 실제 외부 도메인으로 치환되어 동작
각 서비스를 쉽게 설명하자면
ClusterIP를 통해 파드들을 묶어 가상 IP를 생성한다.
이 가상 IP는 클러스터 내에서만 접근 가능하며 외부에서는 접근할 수 없다.
이는 내부 서비스 디스커버리와 로드 밸런싱에 사용됩니다.
NodePort를 통해 특정 포트를 지정하여 클러스터 외부에서도 접근 가능한 서비스를 생성한다.
모든 노드의 해당 포트로 접근하면 클러스터 내부의 파드로 연결된다.
LoadBalancer는 쿠버네티스 클러스터 외부에서 접근 가능한 서비스를 생성하며, 클라우드 제공업체의 로드 밸런서를 프로비저닝한다.
이는 외부 트래픽을 쿠버네티스 클러스터 내부의 파드로 분산시킵니다. 로드 밸런서 장비는 클라우드 제공업체에 의해 관리된다.
ExternalName은 다른 서비스를 외부 도메인으로 노출하는 데 사용된다.
클러스터 내부에서 해당 서비스에 대한 DNS 이름을 제공하며, 외부에서는 해당 도메인으로 서비스에 접근할 수 있다.
하지만 이 서비스는 클러스터 내의 파드와 직접 연결되지 않고, 외부 서비스로의 DNS 리디렉션만을 담당한다.
아래 영상을 참고했습니다.
https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE
'Kubernetes' 카테고리의 다른 글
Kubernetes 기초 - Service(3) (0) | 2023.12.19 |
---|---|
Kubernetes 기초 - Service(2) (0) | 2023.12.19 |
Kubernetes 기초 - Controller(7) (0) | 2023.12.15 |
Kubernetes 기초 - Controller(6) (0) | 2023.12.15 |
Kubernetes 기초 - Controller(5) (0) | 2023.12.14 |