서비스 (Service)
고정된 주소로 pod에 접근하기 위한 중간다리
pod는 Controller에 의해 관리되기 때문에 고정되어 있지 않음
그래서 pod가 클러스터내에 어디에 있던지 상관없이 고정된 주소로 사용할 수 있도록 서비스 사용
Label Selector로 pod를 선택해서 하나의 endpoint로 노출되는 pod의 집합
즉, 외부에서 pod와 접속하기 위한 중간다리(gateway) 역할
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
출처
https://galid1.tistory.com/413?category=767345
https://twofootdog.tistory.com/5?category=845779%EF%BB%BF
'🌴 DevOps > Docker & K8s' 카테고리의 다른 글
[Docker4] Docker로 Apache/Tomcat 연결하기(진행) (0) | 2020.05.03 |
---|---|
[Docker3] docker 기본명령어(run/ps/logs/exec) (1) | 2020.05.03 |
[Docker2] Docker 설치 및 이미지(ubuntu/nginx/mysql) 실행하기 (0) | 2020.04.30 |
쿠버네티스 구성요소(3/5) - Volume 구성 및 특징 (0) | 2020.04.20 |
쿠버네티스 구성요소(2/5) - Pod 구성 및 특징 (0) | 2020.04.20 |
쿠버네티스 구성요소(1/5) (Object/Controller) (0) | 2020.04.19 |