서비스란?
여러 개 파드에 접근할 수 있는 IP하나를 제공한다.
다양한 기능을 제공하지만 본질적으로 로드밸런서 역할이다.
서비스의 개념
파드는 건트롤러가 관리하므로 한군데에 고정해서 실행되지 않고, 클러스터 안을 옮겨다닌다.
- 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터 안 파드의 IP가 변경되기도 한다.
- 이렇게 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 쿠버네티스의 서비스이다.
- 서비스를 사용하면 파드가 클러스터 안 어디에 있든 고정 주소를 이용해 접근할 수 있다.
- 클러스터 외부에서 클러스터 안 파드에 접근할 수도 있다.
- 인스레스로도 접근할 수 있는데 서비스는 주로 L4영역에서 통신할 때 사용하고 인그레스는 L7영역에서 통신할 때 사용한다는 차이점이 있다.
- 상황에 따라 두 가지를 혼합해서 사용할 수도 있지만 보통 역할을 분리해서 사용한다.
- 파드가 클러스터 안 다른 위치로 옮겨져 IP가 변하더라도 서비스가 자동으로 새로위치를 옮겨 실행한 파드와 통신하므로 실제 접속하는 사용자는 서비스만 이용해서 문제없이 위치를 옮긴 파드를 사용할 수 있다.
서비스 타입
- ClusterIP
- 기본 서비스 타입
- 쿠버네티스 클러스터 안에서만 사용가능
- 클러스터 안 노드나 파드에서는 클러스터IP를 이용해 서비스에 연결된 파드에 접근
- 클러스터 외부에서는 이용할 수 없다.
- NodePort
- 서비스 하나에 모든 노드의 지정된 포트를 할당
- 노드에 상관없이 서비스에 지정된 포트 번호만 사용하면 파드에 접근할 수 있다.
- 노드의 포트를 사용하므로 클러스터 안 뿐만 아니라 외부에서도 접근할 수 있다.
- 파드가 node1에서만 실행되어 있고 node2에는 실행되지 않았더라도 node2:8080으로 접근했을 때 node1에 실행된 파드로 연결한다.
- 클러스터 외부에서 클러스터 안 파드로 접근할 때 사용할 수 있는 가장 간단한 방법
- LoadBalancer
- 퍼블릭 클라우드, 프라이빗 클라우드, 쿠버네티스를 지원하는 로드밸런서 장비에서 사용한다.
- 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 해준다.
- ExternalName
- 서비스를 spec.externalName필드에 설정한 값과 연결한다.
- 클러스터 안에서 외부에 접근할 때 주로 사용
서비스 사용하기
- spec.type : 서비스타입. 기본타입은 ClusterIP
- spec.clusterIP : 클러스터IP설정
- spec.selector : 서비스와 연결할 파드에 설정한 .labels 필드값 설정
- spec.prots[] : 서비스에서 한꺼번에 포트 여러 개를 외부에 제공할 때는 spec.ports[] 하위에 필드 값을 설정하면 된다.
헤드리스 서비스
- spec.clusterIP 필드 값을 None으로 설정하면 클러스터 IP가 없는 서비스를 만들 수 있다.
- 로드밸런싱이 필요 없거나 단일 서비스IP가 필요 없을 때 사용
- 셀렉터(spec.selector)를 설정하면 쿠버네티스 API로 확인할 수 있는 엔드포인트가 만들어진다.
- 서비스와 연결된 파드를 직접 가리키는 DNS A 레코드도 만들어진다.
- 셀렉터가 없으면 엔트포인트가 만들어지지 않지만 DNS 시스템은 ExternalName 타입의 서비스에서 사용할 CNAME레코드가 만들어진다.
kube-proxy
- 쿠버네티스에서 서비스를 만들었을 때 클러스터 IP나 노드 포트로 접근할 수 있게 만들어 실제 조작을 하는 컴포넌트
- 쿠버네티스 클러스터의 노드마다 실행되면서 클러스터 내부 IP로 연결하려는 요청을 적절한 파드로 전달
- 종류 : userspace, iptables, IPVS
'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글
[쿠버네티스] 레이블과 애너테이션 (0) | 2021.06.09 |
---|---|
[쿠버네티스] 인그레스 (0) | 2021.06.08 |
[쿠버네티스] 컨트롤러(데몬세트, 스테이트풀세트, 잡, 크론잡) (0) | 2021.06.06 |
[쿠버네티스] 컨트롤러(레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트) (0) | 2021.06.05 |
[클라우드] PaaS-TA (0) | 2021.05.27 |