Service
- 서비스는 자신의 클러스터 아이피를 가지고 있음
- 서비스를 파드에 연결하면 서비스의 아이피를 가지고 파드에 접근 가능
- 파드에도 똑같이 클러스터 내에서 접근 가능한 아이피가 존재
- 그럼 왜 서비스 아이피가 필요한가? --> 파드는 k8s에서 언제든지 뒈질 수 있고 다시 생성돼어야 함
- 파드는 재생성되면 아이피가 변하기 때문에 신뢰성이 떨어짐
- 서비스 아이피는 사용자가 지우지 않는 한 변하지 않음
- 서비스의 종류는 다양함
1. ClusterIP
- 쿠버네티스 클러스터 내에서만 접근 가능 --> 파드랑 똑같음
- 외부에서 접근 불가능
- 클러스터 내 여러 파드와 연결 가능
- 여러 대의 파드와 연결하면 서비스가 트래픽을 분산하여 파드와 연결시킴
Sample YAML
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
type: ClusterIP
- type이 ClusterIP임
- type은 옵션인데, 생략하면 자동으로 ClusterIP
- 9000번 포트로 연결이 오면 8080으로 파드에 연결시킨다는 뜻
apiVersion: v1
kind: Pod
metadata:
name: pod-1
labels:
app: pod
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
2. NodePort
- 노드포트 서비스도 클러스터 아이피가 있음
- 쿠버네티스 클러스터에 연결되어 있는 모든 노드에 똑같은 포트가 할당 됨
- 외부로부터 어떤 노드든 간에 그 아이피의 포트에 접근하면 노드포트 서비스에 연결 됨
- 서비스는 기본 역할인 자신한테 연결되어 있는 파드에 트래픽 전달
- 파드가 있는 노드에만 포트가 할당되는게 아니라 모든 노드에 포트가 만들어 짐
Sample YAML
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
nodePort: 30000
type: NodePort
externalTrafficPolicy: Local
- type은 NodePort
- nodePort가 30000인데, 보통 30000~32767의 범위를 가짐
externalTrafficPolicy: Local
원래 노드포트 서비스는 정해진 포트에 들어오면 서비스를 통해 모든 노드에 트래픽을 주는데 이 설정을 하면 특정 노드포트의 아이피로 접근하는 트래픽은 서비스가 해당 노드위에 올려져있는 파드에만 트래픽을 줌
3. Load Balancer
- 노드포트 + 로드밸런서 구성
- 로드밸런서가 트래픽을 분산시켜줌
- 로드밸런서에 접근하기 위한 외부 접속 아이피주소는 개별적으로 쿠버네티스를 설치했을 때 생기지 않음 --> 별도로 외부접속 아이피를 할당해주는 플러그인이 있어야함 --> 구글 클라우드 플랫폼, AWS, AZURE...
Sample YAML
apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
selector: # Pod의 Label과 매칭
app: pod
ports:
- port: 9000 # Service 자체 Port
targetPort: 8080 # Pod의 Container Port
type: ClusterIP, NodePort, LoadBalancer # 생략시 ClusterIP
externalTrafficPolicy: Local, Cluster # 트래픽 분배 역할
각 서비스 사용방법
1. ClusterIP
- 클러스터 아이피는 외부에서 접근할 수 없고 클러스터 내에서만 사용하는 아이피
- 따라서 클러스터 내부에 접근할 수 있는 운영자같은 인가된 사람
- 주요 작업은 쿠버네티스 대시보드 관리, 각 파드의 서비스 상태를 디버깅하는 작업할 때 사용
2. NodePort
- 노드포트는 특징이 물리적인 호스트의 아이피를 통해서 파드에 접근할 수 있음
- 대부분 호스트 아이피는 보안적으로 내부망에서만 접근할 수 있게 네트워크를 구성
- 노드포트는 클러스터 밖에 있지만 내부망 안에서 접근하기 위해 사용
- 일시적인 외부연동용으로도 사용
- 내부에서 개발하다가, 외부에 데모를 보여주고 싶을 때, 네트워크 중계기에 포트포워딩을 하여 외부에서 내부 시스템에 연결할 때 노드포트를 잠깐 뚫어놓고 사용
- 쓰는 나도 뭔 말을 쓰는지 잘..
3. Load Balancer
- 로드밸런서는 실제적으로 외부에 서비스를 노출시킬 때 사용
- 내부 아이피를 노출시키지 않고 외부 아이피를 통해서 안정적으로 서비스를 노출시킬 수 있음
- 외부에 시스템을 노출하는 용도로 사용
출처
인프런 대세는 쿠버네티스 강의
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 6. Volume - emptyDir, hostPath, PV/PVC (0) | 2021.02.04 |
---|---|
[k8s] 5. Service - 실습 (0) | 2021.02.03 |
[k8s] 3. Pod - 실습 (0) | 2021.01.31 |
[k8s] 2. 쿠버네티스 설치 (1) | 2021.01.31 |
[k8s] 1. Pod - Container, Label, NodeSchedule (0) | 2021.01.27 |