쿠버네티스 입문 - 03 - 서비스
2020. 4. 4. 03:50ㆍ[정리] 기능별 개념 정리/Kubernetes
서비스
서비스는 여기저기 옮겨 다니는 여러개의 파드에 접근할 수 있는 하나의 IP를 제공한다.
본질적으로는 로드밸런서 역할이다.
인그레스와 비교되기도하는데 서비스는 L4 영역이라면 인그레스는 L7영역에서 통신할 때 사용된다.
서비스는 `서비스이름.default.svc.cluster.local` 과같은 FQDN 을 가진다.
서비스 타입
ClusterIP : 기본 서비스 타입이며 클러스터 내부에서만 사용할 수 있다.
NodePort : 모든 노드의 지정된 포트는 이 서비스로 연결되게 한다. 클러스터 외부와 파드를 연결하는 가장 간단한 방법이다.
LoadBalancer : 로드밸런서 장비를 사용하는 경우 로드밸런서와 파드를 연결하여 클러스터 외부에서 파드에 접근할 수 있게한다.
ExternalName : 클러스터안에서 외부에 접근할 때 사용한다.
+ 헤드리스 서비스 : ClusterIP 타입의 서비스이지만 .spec.clusterIP: None 을 해준 경우
클러스터 IP 가 없는 서비스를 만들 수 있다. 로드 밸런싱이 필요없거나 단일 서비스 IP가 필요 없을 때 사용한다.
ClusterIP 서비스 샘플
apiVersion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: ClusterIP
selector:
app: nginx-for-svc
ports:
- protocol: TCP
port: 80
targetPort: 80
NodePort 서비스 샘플
apiVersion: v1
kind: Service
metadata:
name: nodeport-service
spec:
type: NodePort
selector:
app: nginx-for-svc
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
LoadBalancer 서비스 샘플
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service
spec:
type: LoadBalancer
selector:
app: nginx-for-svc
ports:
- protocol: TCP
port: 80
targetPort: 80
ExternalName 서비스 샘플
apiVersion: v1
kind: Service
metadata:
name: externalname-service
spec:
type: ExternalName
externalName: google.com
Headless 서비스 샘플
apiVersion: v1
kind: Service
metadata:
name: headless-service
spec:
type: ClusterIP
clusterIP: None
selector:
app: nginx-for-svc
ports:
- protocol: TCP
port: 80
targetPort: 80
kube-proxy
쿠버네티스에서 서비스를 만들때 kube-proxy 가 동작한다.
kube-proxy 는 클러스터 IP나 노드 포트로 접근하기 위한 정보를 iptables 에 새로운 서비스를 등록하는 등의 동작을 한다.
kube-proxy 의 네트워크 관리 방법은 다음과 같은 모드가 있다.
- userspace 모드 : (서비스의 clusterIP 요청 -> iptables -> kube-proxy -> pod) 프로세스를 탄다.
- iptables 모드 : (서비스의 clusterIP 요청 -> iptables -> pod) 프로세스를 탄다.
- 이 경우 kube-proxy는 iptables를 관리하는 역할만 한다. - IPVS 모드 : (서비스의 clusterIP 요청 -> 가상 서버의 커널 -> pod) 프로세스를 탄다.
- 데이터 구조를 해시 테이블로 저장해서 iptables 모드보다 빠르고 좋은 성능을 낸다.
- 로드밸런싱 알고리즘도 더 다양하다.
'[정리] 기능별 개념 정리 > Kubernetes' 카테고리의 다른 글
쿠버네티스 입문 - 05 - 레이블, 셀렉터, 어노테이션 (0) | 2020.04.04 |
---|---|
쿠버네티스 입문 - 04 - 인그레스 (0) | 2020.04.04 |
쿠버네티스 입문 - 02 - 컨트롤러 6 - 크론잡 (0) | 2020.04.04 |
쿠버네티스 입문 - 02 - 컨트롤러 5 - 잡 (0) | 2020.04.04 |
쿠버네티스 입문 02 - 컨트롤러 4 - 스테이트풀셋 (0) | 2020.04.04 |