1. 소개
쿠버네티스에서 서비스는 각 컴포넌트들로의 네트워크 연결을 제공하는 모듈이다. 유저는 웹 서비스를 통해 프론트엔드 파드의 웹서비스로 접속하고 프론트엔드 파드는 백엔드 서비스를 통해 백엔드 파드들과 통신 할 수 있다. 서비스의 타입은 Nodeport, ClusterIP, LoadBalancer의 세 가지가 있다.
2. 유형
1) Nodeport
노드의 포트와 노드 내부 파드의 포트 매핑 역할을 한다. 외부의 사용자가 노드로 커넥션을 시도할 때 사용하는 Nodeport와 매핑할 파드의 포트인 Targetport 정보를 가진다. 단일 노드, 단일 파드든 멀티 노드 멀티파드든 관계없이 selector에 원하는 label을 입력하는 것만으로 로드밸런싱 기능을 제공한다. 관리 목적으로 운영자가 원하는 노드 및 파드에 직접 접속할 때 사용할 수 있다.
vi service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: myapp-services
spec:
type: NodePort # Default값은 ClusterIP
ports:
- targetPort: 80 # targetport는 입력하지 않으면 port와 동일한 값을 사용
port: 80 #port만 필수값이다. 서비스 객체에서 대상 파드로 연결할 떄 사용하는 포트.
nodePort: 30008 # 입력하지 않으면 30000에서 32767사이의 비어있는 포트를 사용함
selector:
app: myapp
type: front-end
# 서비스 생성
kubectl create -f service-definition.yml
# 서비스 조회
kubectl get services
# 로컬PC에서 노드의 포트로 웹서비스 접속확인(포트매핑으로 파드로 접속됨)
curl http://192.168.1.1:30008
2) ClusterIP
파드는 계속 스케일링 되고 삭제, 생성되기 때문에 파드의 IP를 이용해 서비스 레이어 간 연결을 구성하는 것은 의미가 없다. 이 때 사용하는 서비스 타입이 ClusterIP이다. 위 NodePort와 거의 동일하며 차이점은 노드에 직접 접속하는 것이 목적이 아니기 때문에 nodePort를 넣을 필요가 없다. 프론트엔드와 백엔드, DB 사이의 연결을 설정할 때 사용한다.
3) LoadBalancer
클라우드 서비스 벤더들마다 로드밸런서 서비스를 제공하는데 이와 호환하는 목적의 타입이다. 만약 일반 가상 호스트 환경 등 자체 로드밸런서가 없는 환경에서 사용하면 NodePort와 동일한 기능을 한다.
3. 명령어
# 타입이 ClusterIP이고 파드의 label을 그대로 사용하는 서비스 yaml 파일 생성
kubectl expose pod redis --port=6379 --name redis-service --dry-run=client -o yaml
# 파드와 서비스 정의하는 yaml 한번에 생성하기
kubectl run httpd --image=httpd:alpine --port=80 --expose\
--dry-run=client -o yaml > httpd-definition.yml
'Kubernetes' 카테고리의 다른 글
[Kubernetes] 클러스터 업그레이드 (0) | 2020.12.17 |
---|---|
[Kubernetes] 어플리케이션 배포 관리 (0) | 2020.12.11 |
[Kubernetes] 모니터링, 로깅 (0) | 2020.11.28 |
[Kubernetes] POD, ReplicaSet, Deployment (0) | 2020.11.12 |
[Kubernetes] 기초 + minikube 설치 (0) | 2020.07.30 |