1. 서비스란?
변하지 않는 IP 주소와 포트를 제공하는 리소스다.
Pod가 죽어버리는 경우, 새 IP가 할당되며 진입점이 변경되는데, 이럴 때도 서비스를 이용해 해당 IP및 port 로 원하는 Pod 중 하나로 접근이 가능하도록 사용하는 리소스를 의미한다.
2. 명령어
(이후 나오는 명령어의 출처는 https://collabnix.github.io/kubelabs/Services101/#deploying--a-kubernetes-service 에서 주요 명령어 위주로 스크랩하였다.)
배포하는 방법은 아래와 같다.
kubectl apply -f nginx-svc.yaml
서비스 정보 확인 (service 의 약어: svc) 하는 방법이다.
kubectl get svc my-nginx
서비스 세부정보 확인하는 방법이다.
kubectl describe svc my-nginx
네임스페이스를 지정하고 싶을 땐, 아래 명령어처럼 -n <namespace_name> 을 설정해줄 수 있다.
kubectl describe svc my-nginx -n namespace_name
4. 둘 이상의 포트를 노출하는 서비스
포트를 여러 개 지정할 수도 있다. 단 이때는, 서비스에서 둘 이상의 포트를 정의하는 경우 인식할 수 있도록 각 포트에 대한 이름을 제공해야 야 한다.
apiVersion: v1
kind: Service
metadata:
name: webserver
spec:
selector:
app: web
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
5. Pod가 없는 서비스
클러스터 내부 또는 외부에 다른 리소스와 통신을 할 때 서비스를 이용할 수도 있다.
예를 들어, 클러스터 외부 API와의 통신 등을 수행해야 할 때다. 이때, 트래픽을 외부 IP 주소로 라우팅하는 서비스의 생성이 가능하다.
3. 서비스 타입
3-1. ClusterIP
ClusterIP는 기본 서비스 타입이다. 따라서 클러스터 내부의 node나 pod 에서 이 서비스에 연결된 pod에 접근이 가능하다.
사실 ClusterIP설정 시 자동으로 클러스터 ip 범위 내 ip 로 할당이 되지만, (service-cluster-ip-range 내의 범위에 한해) IP주소를 직접 지정해서 할당할 수도 있다. service-cluster-ip-range 를 확인하는 방법은 아래와 같다.
kubectl cluster-info dump | grep service-cluster-ip-range
3-2. NodePort
클러스터에 있는 node의 IP 주소를 사용하여 트래픽을 해당 pod로 라우팅한다.
3-3. LoadBalancer
외부 ip를 갖고 있는 로드밸런서를 할당하는 방식이다. 따라서 외부에서도 EXTERNAL-IP 에서 접근이 가능하다.
'데이터 공부 > Kubernetes' 카테고리의 다른 글
Datahub - K8S Replica Set 설정 (0) | 2023.11.08 |
---|---|
Mac M1에서 빌드한 이미지 - exec format error 해결 방법 (0) | 2022.06.14 |
ECK error 원인 및 해결 방법 - elasticsearch status 가 unknown, kibana status 가 red & pod running 0/1 일 경우 (0) | 2022.06.13 |
쿠버네티스 - 디플로이먼트의 배포 방식 :: 롤링 업데이트 (0) | 2022.03.26 |
쿠버네티스란? 주요 개념 익혀보기 - 레플리카셋, 디플로이먼트, 서비스 (1) | 2022.03.25 |