외부에서 포드에 접근을 돕기 위한 오브젝트이다.
- 한개 이상의 포드에 접근할 수 있도록 고유한 도메인 이름 부여
- 포드 접근 시, 로드벨런서 기능 수행
- 클라우드 플랫폼의 로드 밸런서, 클러스터 노드의 포트 등 포드 외부 노출
서비스를 연결하기 위한 Deployment 생성
# deployment-hostname.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: webserver
template:
metadata:
name: example-deployment-pod
labels:
app: webserver
spec:
containers:
- name: nginx
image: alicek106/rr-test:echo-hostname
ports:
- containerPort: 80
# deployment 생성
kubectl apply -f deployment-hostname.yaml
Service 종류
종류 | |
ClusterIp | - 외부로 포드 노출x - 쿠버네트스 클러스터 내부에서만 사용되는 포드 |
NodePort | - 포드들의 포트 동일하게 제공 - 외부에서 포드 접근 가능 |
LoadBalancer | - 클라우드 플랫폼에서 제공하는 서비스 - 외부에서 포드 접근 가능 |
ClusterIP 타입
apiVersion: v1
kind: Service
metadata:
name: hostname-svc-clusterip
spec:
ports:
- name: web-port
port: 8080 # 포드에 접근할 포트
targetPort: 80 # deployment-hostname.yaml에서 설정한 containerPort
selector:
app: webserver # deployment의 라벨
type: ClusterIP
# clusterIP Service 생성
kubectl apply -f hostname-svc-clusterip.yaml
NodePort 타입
- 모든 Node에 특정 포트를 개방하여 서비스에 접근
apiVersion: v1
kind: Service
metadata:
name: hostname-svc-nodeport
spec:
ports:
- name: web-port
port: 8080
targetPort: 80
selector:
app: webserver
type: NodePort
# nordport Service 생성
kubectl apply -f hostname-svc-nordport.yaml
# service 조회
kubectl get service
# 결과
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hostname-svc-nodeport NodePort 10.233.60.112 <none> 8080:30310/TCP 10s
ports 부분을 보면 8080:30310으로 되어 있는 것을 볼 수 있다. 다른 node의 ip:30310을 입력해서 들어가면 접속이 되는 것을 확인할 수 있다.
'Kubernetes' 카테고리의 다른 글
6. Kubernetes Secret (0) | 2024.08.13 |
---|---|
5. Kubernetes Configmap (0) | 2024.08.13 |
3. Kubernetes Deployment (0) | 2024.08.07 |
2. Kubernetes ReplicaSet (0) | 2024.08.06 |
1. Kubernetes Pod (0) | 2024.08.01 |