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

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

by 카프리썬_ 2020. 4. 20.
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

 

반응형