Kubernetes의 리소스 중에 하나인 Service에 대해서 작성합니다.
Service 는 Kubernetes에서 네트워킹을 담당하는 리소스로서 간략한 도표는 아래와 같습니다.
기존에는 Client가 직접 Pod에 접근하여 Request를 보냈는데,
Service의 등장으로, Service를 통한 Pod에 접근 방식으로 변경할 수 있습니다.
외부에서 트래픽을 받는 포트 : Port(80)
내부 Pod로 전달하는 포트 : TargetPort(8080)
서비스로 수신된 Request는 LabelSelector를 통해서 어떤 Pod로 트래픽을 전송할 지 결정할 수 있습니다.
ex) Service의 Default 앱 정의서
apiVersion : v1 kind : Service metadata: name: nginx spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: run: nginx |
[Attribute]
Ports > port - 외부 port
Ports > Protocol - TCP / UDP
Ports > targetPort - 컨테이너 내부 Port
Selector : 라벨이 붙어 있는 Pod에게 트래픽을 전달하는 연결고리
Q. 이러한 Service를 왜 사용해야 하는가?
안정적인 서비스를 제공하기 위해 필요합니다.
Kubernetes에서 Pod는 언제든지 죽을 수도 있는 요소인데,
이 Pod가 죽었다고 서비스 전체에 문제가 생기면 안되기 때문에, Pod 앞단에 Service를 만들어서 서비스 끝단을 구분합니다.
전에는 Pod로 서비스할때는 Pod가 죽거나 하면 새로 생성해주어야 하는데,
Service를 이용함으로써 Pod가 죽어도 다른 Pod로 서비스를 지속하여 이어갈 수 있는 구조가 됩니다.
(죽은 Pod는 Self Healing)
[Service의 Type]
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
ClusterIP
- 기본 Service 타입(Type: ClusterIP 생략 가능)
- Cluster 외부 트래픽 전달 x
- Cluster 내부에서만 동작
NodePort
- Cluster 외부 트래픽 전달 가능
- Node의 Port를 통해서 트래픽 전달
LoadBalancer
- 노드의 특정 포트가 아닌 LoadBalancer를 통해서 외부의 트래픽을 내부로 전달
ExternalName
- 내부에 있는 Pod가 외부의 도메인 이름을 레퍼런스 할때 사용한다.
- 외부주소를 지칭(외부 도메인 이름의 alias)
- 외부에 있는 서비스에 트래픽을 전달해준다.
'IT Knowledge > Kubernetes' 카테고리의 다른 글
Kubernetes Cluster 구축(CentOS, CRI-O) Step.1 (0) | 2021.12.14 |
---|---|
Kubernetes 물리서버 vs 가상서버 (0) | 2021.08.04 |
Kubernetes 별칭 및 자동완성 (0) | 2021.01.22 |
kubernetes Deploy Strategy(배포전략) (0) | 2020.12.29 |
kubernetes의 포드(Pod) 소개 (0) | 2020.12.28 |
댓글