본문 바로가기
[AWS]

쿠버네티스 서비스 (Service)

by SAMSUNG CLOUD-OKY 2020. 9. 23.
반응형

## 서비스 (Service)

 

  • 쿠버네티스에서의 서비스는 파드에 접근할 있도록 정책을 정의하는 것이다.
  • 서비스는 파드끼리 통신할 있도록 엔드포인트를 만들어 주고, 파드가 외부에 노출될수 있도록 한다.
  • 그럼 앞에서 디플로이먼트를 설명하면서 생성한 nodejs-app 파드를 서비스를 사용하여 노출해보자.

 

  • 서비스에 사용할 있는 많은 옵션과 다른 패턴들도 있지만, 여기서 핵심은 중요한 오브젝트의 정의 기능을 알아본다.

 

  1. ClusterIP : 서비스가 클러스터-내부 IP 노출되도록 한다. 값을 선택하면 클러스터 내에서만 서비스에 도달할 있다. 이것은 ServiceTypes 기본 값이다.

 

  1. NodePort : 고정포트로 노드의 IP 서비스가 노출되도록 한다. NodePort 서비스가 라우팅 되는 ClusterIP 서비스가 자동으로 생성된다.

<NodeIP>:<NodePort> 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 있다.

 

  1. LoadBalancer : 클라우드 공급자의 로드 밸런서를 사용하여 서비스가 외부에 노출되도록 한다.

외부 로드 밸런가 라우팅되는 NodePort ClusterIP 서비스가 자동으로 생성된다.

 

  1. ExternalName : 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠에 매핑한다. 이때 어떤 종류의 프록시도 설정되어 있지 않다.

 

  • 네가지 옵션은 서비스가 파드를 노출해 줄수 있는 방식을 나타낸 것이다.

 

 

 

 

 

 

 

 

 

  • 지금은 쿠버네티스 자체를 학습하는 것이 중요하기 때문에 쿠버네티스만으로 실행 있는 ClusterIP, NodePort 실습해보자.
  • 그리고 외부에 디플로이먼트가 노출되도록 해보자.

 

ubuntu@ip-10-0-1-52:~/deployment$ kubectl apply -f nodejs.yaml

 

ubuntu@ip-10-0-1-52:~/deployment$ kubectl expose deploy nodejs-app

 

  • 이전에 생성한 디플로이먼트를 사용하여 서비스를 생성하는 명령을 실행했다.
  • 명령문에 아무런 옵션을 지정하지 않으면 ClusterIP 옵션이 자동으로 부여된다.
  • ClusterIP 옵션은 앞에서 봤듯이 클러스터 내부IP 노출하는 것이다.

 

ubuntu@ip-10-0-1-52:~/deployment$ kubectl get svc

ubuntu@ip-10-0-1-52:~/deployment$ kubectl get svc nodejs-app

 

 

  • 그럼 외부에 노출되도록 하려면 어떻게 해야 할까? NodePort 옵션을 사용하면 된다.

ubuntu@ip-10-0-1-52:~/deployment$ kubectl expose deploy nodejs-app --type=NodePort

 

 

  • --type=NodePort 옵션의 사용 유무에 따라 외부에 노출되는 포트가 부여되는지 결정된다.

 

 

 

 

 

 

 

 

 

반응형

댓글