쿠버네티스, 이것만 알면 된다! - #6 쿠버네티스의 서비스
쿠버네티스의 서비스란?
만들어진 Pod끼리 통신을 하기 위해서는 "서비스"가 필요합니다.
쿠버네티스에서 서비스란 네트워크 서비스로 노출하는 추상화 방법을 의미하는데, Pod를 논리적으로 구분하여 접근하도록 하는 것입니다.
서비스에서는 라벨 셀렉터(Label Selector)를 사용하여, 관리하고자 하는 Pod들을 정의할 수 있습니다.
쿠버네티스가 제공하는 서비스의 종류는 다음과 같습니다.
- ClusterIP: 기본 서비스 타입으로, 쿠버네티스 클러스터 내부에서 사용 가능하여, 클러스터 내부의 Node나 Pod에서 이 ClusterIP를 이용해서 서비스에 연결된 Pod와 통신
- External Name: 서비스를 externalName의 값이랑 매치하여 사용하고, 클러스터 내부에서 외부로 접근할 때 사용
- NodePort: 각 노드의 지정된 포트를 할당하는 방식
- Load Balancer: Pod를 클라우드(KT Cloud와 같은 CSP 사업자)에서 제공해주는 LoadBalancer와 연결해서 그 LoadBalancer의 IP를 이용
NodePort YAML 작성하기
여러 개의 서비스 종류 중, NodePort를 사용하여 외부로 노출해보도록 하겠습니다.
앞서 배포했던 Nginx를 외부로 노출해보도록 하겠습니다.
NodePort를 사용하는 YAML 파일을 작성합니다.
Service를 사용하기 위해서는 kind에 Service라는 것을 명시해야 합니다.
다음으로는 spec.type에서 어떠한 Service를 사용할 것인지 작성해야 합니다. NodePort를 사용하기 위해서 value값으로 NodePort를 작성합니다.
이러한 Service를 spec.selector를 통해서 관리하고자 하는 Pod들을 묶을 수 있습니다.
마지막으로는 어떠한 서비스 port를 사용할것인지 spec.ports.port에 명시하고, 컨테이너에서 사용하는 내부 port는 spec.ports.targetPort에 작성합니다.
kube-proxy
이러한 서비스 통신을 가능하게 하는 것은 kube-proxy입니다. kube-proxy는 모든 Node에서 실행되며, 각 Node의 쿠버네티스 API에 정의된 서비스를 반영하며 단순한 TCP, UDP 및 SCTP를 이용하고, 쿠버네티스 Service에 클라이언트가 연결할 수 있도록 하는 역할을 합니다.
kube-proxy의 모드에는 3가지가 존재합니다.
- Userspace mode
출처: https://kubernetes.io/ko/docs/concepts/services-networking/service/
쿠버네티스에서 각 Service는 Node에서 랜덤하게 Port를 선택하여 오픈하고, 오픈된 Port로 redirect하여 사용
- iptables mode
출처: https://kubernetes.io/ko/docs/concepts/services-networking/service/
Service에 특정 이벤트가 생겼을 경우, 관련된 IP와 Port를 iptables에 업데이트 후, iptables에 의해 Pod로 트래픽을 전달
- IPVS(IP Virtual Server) mode
출처: https://kubernetes.io/ko/docs/concepts/services-networking/service/
kube-proxy가 클러스터에 생성/삭제되는 Service와 Pod를 파악하고 IPVS 규칙을 설정
IPVS mode는 iptables mode의 단점을 보완
1) IPVS는 서버 상태 확인 및 연결 재시도 등을 지원
2) iptables보다 낮은 레이턴시(Latency: 대기시간)
3) IPVS는 Load Balancing과 확장성 중점으로 설계되어 무제한 확장이 가능
마무리
이번 장에서는 Pod를 외부로 노출하는 쿠버네티스의 서비스에 대해서 알아보았습니다.
다음으로는 쿠버네티스의 여러 가지 Controller에 대해서 알아보겠습니다.
관련글
1.쿠버네티스란 무엇일까? - https://ktcloudplatform.tistory.com/67
2.Desired State - https://tech.ktcloud.com/68
3.쿠버네티스 구성요소 - https://tech.ktcloud.com/70
4.쿠버네티스 설치 - https://tech.ktcloud.com/71
5.쿠버네티스의 동작 흐름 - https://tech.ktcloud.com/75