데이터 공부/Kubernetes

쿠버네티스 서비스

한소희DE 2022. 7. 26. 17:28

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 에서 접근이 가능하다.