Kubernetes Service

uuuu.jini·2022년 9월 16일
0

Kubernetes

목록 보기
7/14

Pod가 여러개 라면 그 앞에 관문 역할을 하는 것이 필요하다.

이러한 개념이 바로 Service이다.

1] Service Template 작성

Service Template이란 쿠버네티스에서 Service를 생성하기 위한 yml로 작성된 파일이다.

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    protocol: TCP
  selector:
    run: my-nginx

위의 내용을 한줄씩 설명한다.

  • 서비스 이름
metadata:
	name: my-nginx
    labels:
    	run: my-nginx

서비스의 이름은 my-nginx이고, labels는 해당 Pod에 대해서 라벨링을 해두는 것이다. 여기서는 run: my-nginx 라고 해두었다.

  • 타입
spec:
	type: NodePort

Service는 유형(ClusterIp,NodePort,LoadBalancer) 을 갖고 있는데, Node Port를 여기서 사용하고 있다.

  • 포트
ports:
	- port: 8080
	targerPort: 80
	protocol: TCP

클러스터 port 는 8080이고 실제 nginx Pod가 서비스 되는 포트는 80포트이다.

  • 셀렉터
selector:
	run: my-nginx

이 서비스는 Pod 중에서 label 값이 run: my-nginx 인 pod 쪽으로 서비스 한다.
( label이 run: my-nginx로 된 tcp 80 번 포트를 가진 pod를 대상으로 서비스한다.)

> Service Resource

쿠버네티스에서 서비스는 파드의 논리적 집합과 그것들에 접근할 수 있는 정책을 정의하는 추상적 개념이다. 서비스가 대상으로 하는 파드 집합은 일반적으로 셀렉터가 결정한다.

셀렉터: 사용자가 레이블에 따라 리소스 리스트를 필터할 수 있다.

예를 들어, 3개의 레플리카로 실행되는 스테이트리스 이미지-처리 백엔드를 생각해보면 이러한 레플리카는 대체 가능하다. 즉, 프론트엔드에는 그것들이 사용하는 백엔드를 신경쓰지 않는다. 백엔드 세트를 구성하는 실제 파드는 변경될 수 있지만, 프론트엔드 클라이언트는 이를 인식할 필요가 없으며, 백엔드 세트 자체를 추적해야 할 필요도 없다.

파드의 포트 정의에 이름이 있으므로, 서비스의 targetPort 속성에서 이 이름을 참조 할 수 있다.

2] Service Object의 특징

  • 서비스 타입의 종류: ClusterIp, NodePort, LoadBalancer
  • Label Selector를 통해서 Pod 타겟팅 + 로드 밸런싱

> ClusterIp

쿠버네티스의 디폴트 설정으로 외부에서 접근 가능한 IP를 할당받지 않기 때문에 Cluster내에서만 해당 서비스를 노출할 때 사용되는 Type

> NodePort

해당 서비스를 외부로 노출시키고자 할 때 사용되는 Service Type으로 외부에 Node IP와 Port를 노출시키는 것으로 아래 그림과 같이 쿠버네티스 클러스터 상에 있는 모든 노드에 대해서 노출 시킨다.

> Load Balancer

클라우드 상에 존재하는 LoadBalancer에 연결하고자 할 때 사용되는 Service Type으로 LoadBalancer의 외부 External IP를 통해 접근이 가능하다.

> 서비스 네임: DNS

Kubernetes는 자체 DNS서버를 가지고 있어 클러스터 내부에서만 사용가능한 DNS를 설정해서 사용할 수 있다. 이것은 Kubernetes 상에서 통신할 때 IP기반이 아닌 DNS를 통해 연결할 수 있음을 뜻하며 Pod에서 다른 Pod의 서비스를 연결할 때 사용된다.

3] Ingress

Ingress는 Kubernetes v1.1 추가된 기능으로 NodePortLoadBalancer와 마찬가지로 애플리케이션의 Service를 외부로 노출할 때 사용되는 리소스이다.

외부에서 들어온 HTTP와 HTTPS 트래픽을 ingress resource를 생성하여 Cluster 내부의 Service로 라우팅하며 로드밸런싱, TLS, 도메인 기반의 Virtual Hosting을 제공한다.

profile
멋쟁이 토마토

0개의 댓글