반응형
본 글은 인프런 강의 "대세는 쿠버네티스 [초급~중급]" 를 듣고 요약 및 실습 정리한 내용입니다.
Service
- 기본적으로 자신의 cluster ip를 가짐
- Service를 Pod에 연결하면 Service IP를 통해 Pod에 접근 가능
- Pod는 재생성될 때 IP가 변경되기 때문에 신뢰성이 떨어짐
Service의 종류는 3가지가 있음
1) ClusterIP
- 외부 (External)에서 접근 불가
- Cluster 내에서 접근 가능
- Service의 9000 포트로 요청이 들어오면 Pod의 8080 포트와 연결이 됨
- 하나의 Service에 여러개의 Pod를 연결시킬 수 있고 서비스가 트래픽을 분산해서 Pod에 전달해줌
- 활용: 인가된 사용자, 내부 대쉬보드, pod의 서비스상태 디버깅
Service yaml 파일
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
app: pod
ports:
- port: 9000 # Service port
- targetPort: 8080 # Service에 연결된 Pod port
type: ClusterIP # default로 생략가능
Pod yaml 파일
apiVersion: v1
kind: Pod
metadata:
name: pod-1
labels:
app: pod
spec:
containers:
- name: container
image: tmkube/app
ports:
- containerPort: 8080
- Service yaml파일의 targetPort와 pod yaml파일의 containerPort가 같아야 함
2) NodePort
- 서비스에 clusterIP가 할당됨
- 쿠버네티스에 할당된 모든 Node에 똑같은 Port가 할당됨
- 외부에서 어떤 노드든 간에 접속이 되면 Service에 연결이 됨
- 서비스는 자신과 연결된 Pod에 트래픽을 전달
주의할점
- pod가 있는 node만 port가 할당되는게 아니라 모든 Node에 포트가 할당됨
- 활용: 내부망 연결, 데모나 임시 연결용
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
nodePort: 30000 # 30000 ~ 32767
type: NodePort
- externalTrafficPolicy: Local을 통해 각 Node에 속한 pod로 트래픽이 분산됨
3) Load Balancer (외부 시스템 노출용)
- NodePort의 성격을 그대로 가지고 있고 추가적으로 Load Balancer가 생김 (트래픽 분산)
- Load balancer에 접근하기 위한 외부 접속 ip주소는 별도로 할당하기 위한 플러그인 설치 필요
apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
type: LoadBalancer
반응형
'Kubernetes' 카테고리의 다른 글
Node schedule (0) | 2024.08.04 |
---|---|
Pod - Container (0) | 2024.08.04 |
Pod - Label (0) | 2024.08.04 |