본문 바로가기
🌴 DevOps/Docker & K8s

쿠버네티스 구성요소(4/5) - Service 구성 및 종류/kube-proxy

by 카프리썬_ 2020. 4. 20.
728x90
728x90

서비스 (Service)

고정된 주소로 pod에 접근하기 위한 중간다리

pod는 Controller에 의해 관리되기 때문에 고정되어 있지 않음

그래서 pod가 클러스터내에 어디에 있던지 상관없이 고정된 주소로 사용할 수 있도록 서비스 사용

 

Label Selector로 pod를 선택해서 하나의 endpoint로 노출되는 pod의 집합

즉, 외부에서 pod와 접속하기 위한 중간다리(gateway) 역할

 

Label = "app:myapp"인 pod만 골라서 서비스로 묶음  

1)Service 필요성

동적으로 변하는 pod에게 고정된 방법으로 접근가능

외부에서 서비스를 거쳐서 pod에게 접근가능(ingress대신)

pod가 옮겨겨갔을 때 서비스는 자동으로 새로뜬 pod를 바라보기 떄문에
실제 접속하는 사용자는 서비스만 바라보고 있으면 댐 

 

2) Service 구성

여러개의 pod와 Volume을 이용해서 컨테이너 정의한 후 여러개의 pod를 서비스할 때,

로드밸런서를 이용해서 하나의 ip와포트로 묶어서 하나의 서비스로 제공

 

3) Service 특징

Label Selector에서 특정 라벨을 가진 pod만 가지고 서비스로 묶음

  • Label Selector (라벨 셀렉터): ip가 바뀌는 pod들을 어떤 Service로 묶을지 정의하는 이름
  • Label(라벨) : ip가 바뀌는 pod들을 부를 이름 (각 pod를 생성할때 opbject Spec의 metadata 부분에서 정의)

 

4) 왜 Label Selector (라벨 셀렉터)와 Label(라벨)이필요할까?

Pod의 경우 동적생성 -> 장애가발생 -> 자동 Pod restart -> ip가 바뀜

따라서 pod의 목록을 지정할때 ip입력하는 게 불가능 

그래서 Label Selector (라벨 셀렉터)와 Label(라벨)지정

즉, 라벨셀렉터에서 특정 라벨을 가진 pod만 선택해서 Service에 묶는다 

 

 

5) Service  object Spec (오브젝트 스펙)

위의 그림을 정의한 obejct spec

apiVersion: v1 
kind: Service
metadata:
 name: my-service
spec:
(type: ClusterIP)
(clusterIP : 100.64.0.1)
 selector:
 - app: myapp

   ports:
   - protocol: TCP
      port : 80
     targetPort : 8080

kind : basic object의 종류 (servcie)

metadata : 서비스의 이름 (my-service)

spec : 서비스에 대한 스펙

( type : 서비스타입지정, Default : ClusterIP )

( clusterIP : 직접지정하는 clusterIP, Default : 자동할당IP ) 

seletor : 서비스와 연결할 포드에 지정된 라벨
서비스의 label이 app:myapp인 pod만 선택해서 Service에 연결한다

ports : 서비스가 포트를 제공하는 외부 포트

 

 

6) Service  종류

- ClusterIP 

기본서비스타입

클러스터 내부의 노드에서 접근가능(내부o, 외부x )
 즉, 클러스터 내부의 노드나 pod에서 서비스에 연결된 pod에 접속하는 목적

 

- NodePort
각 노드의 지정된 포트를 할당하는 방식
클러스터 내부 뿐만 아니라 외부에서도 사용가능(내부o, 외부o)
노드에 상관없이 포트번호만 지정해서 pod에 접근하는 방식
ex) pod1에 1번노드가 있다해도 2번노드의 ip로 접근가능 

 

- LoadBalancer 
AWS, GCP 같은 클라우드 서비스 사용할때 가능한 방식
Pod를 클라우드에서 제공해주는 로드밸런서와 연결하는 방식
로드밸런서의 ip를 이용해서 클러스터 외부에서 접근가능
kubectl get service : external-ip부분에 로드밸런서 ip표시됨

 

- ExternalName
서비스를 매칭하는 exteranlName
클러스터 내부에서 외부로 접근할떄 사용가능
설정해둔 CNAME값으로 연결해서 외부로 접근가능

 

7) kubectl로 서비스 확인
현재 default인 clusterIP 타입

default로 생성된 서비스 정보

 

 

 

출처

https://arisu1000.tistory.com/27838?category=787056

 

쿠버네티스 서비스(kubernetes services) (1)

서비스 소개 쿠버네티스 클러스터안에 컨트롤러를 이용해서 포드를 띄웠다면 이제 그 포드들에 접근하는 방법에 대해 알아봐야할 때입니다. 포드는 컨트롤러에 의해 관리되기 때문에 한군데에

arisu1000.tistory.com

출처

https://galid1.tistory.com/413?category=767345

 

Kubernetes - 쿠버네티스(Kubernetes) 란? - 수정중(네임스페이스)

http://likefree.tistory.com/19 쿠버네티스와 마이그로서비스 아키텍쳐 - https://www.youtube.com/watch?v=xdqOxF2JqwU 쿠버네티스(Kubernetes)란? - 쿠버네티스를 이해하기 이전에 먼저 컨테이너 운영환경에 대..

galid1.tistory.com

https://twofootdog.tistory.com/5?category=845779%EF%BB%BF

 

쿠버네티스 시작하기(2) - 쿠버네티스 구성요소(1/2)

이번 장에서는 쿠버네티스의 개념에 대해 정리를 해보고자 한다. 쿠버네티스 클러스터의 구성요소와 컨셉만 잘 이해하면 쿠버네티스를 쉽게 이해하고 사용할 수 있다. 1. 마스터와 노드 쿠버네�

twofootdog.tistory.com

 

728x90
반응형