[Kubernetes의 Services란?]
쿠버네티스 공식 페이지의 설명: 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
즉, "pod들의 서비스를 외부로 노출하기 위한 방법" 정도인데, 그렇다면 pod의 IP를 직접 노출하면 되지 않을까 라는 생각이 들 수도 있다.
하지만 pod의 경우 휘발성이라 다운되고 새로운 pod이 올라올 경우 새로운 IP를 할당받아 구동되게 된다.
그러므로 pod의 IP를 직접 외부로 노출하는 방법은 잘못되었고, 서비스를 통해 고정된 IP로 접근할 수 있도록 하는 방법이다.
예제: Flink의 Admin Web UI를 서비스를 통해 외부로 노출
Apache Flink의 예제를 보면 JobManager Deployment를 정의하고, 이를 외부로 노출하기위해 다양한 서비스 정의를 제공하고 있다.
jobmanager-service.yaml
apiVersion: v1
kind: Service
metadata:
name: flink-jobmanager
spec:
type: ClusterIP
ports:
- name: rpc
port: 6123
- name: blob-server
port: 6124
- name: webui
port: 8081
selector:
app: flink
component: jobmanager
jobmanager-rest-service.yaml
apiVersion: v1
kind: Service
metadata:
name: flink-jobmanager-rest
spec:
type: NodePort
ports:
- name: rest
port: 8081
targetPort: 8081
nodePort: 30081
selector:
app: flink
component: jobmanager
[Service의 타입 종류]
- ClusterIP: 관리자용. 관리자가 특정 서비스에 접근하기 위해 사용하는 IP
- NodePort: 내부용. 내부에서 노드의 IP와 포트번호로 접근하는 방식
- LoadBalancer: 외부용. LoadBalancer를 설정하면 EXTERNAL-IP가 할당되고, 외부에서는 이 IP로 접근하면 된다.
예제: Apache Flink의 서비스를 Cluster IP로 구성했을 때 모습
apiVersion: v1
kind: Service
metadata:
name: flink-jobmanager
spec:
type: ClusterIP
ports:
- name: rpc
port: 6123
- name: blob-server
port: 6124
- name: webui
port: 8081
selector:
app: flink
component: jobmanager
kubectl get services
[참조]
[쿠버네티스 #3] Service (tistory.com)
'Kubernetes' 카테고리의 다른 글
Istio (0) | 2023.01.31 |
---|---|
Service Mesh (0) | 2023.01.31 |
ConfigMap이란? (0) | 2022.12.06 |
Kubernetes Ingress? (0) | 2022.11.02 |