step9. 서비스

생성일
Feb 27, 2022 06:05 AM
태그
파드는 일시적인 존재라 언제든지 할당된 IP주소가 바뀔 수 있다. 클라이언트 입장에서는 늘 변하는 파드의 IP 주소를 알기 어렵기 때문에 쿠버네티스에는 서비스라는 오브젝트가 존재한다.
서비스에는 여러 타입이 있다. 이를 매니페스트에 지정함으로써 접근가능한 클라이언트의 범위를 한정할 수 있다. 서비스의 타입들은 아래와 같다.

ClusterIP

서비스를 만들 때 타입을 지정하지 않으면 설정되는 기본 타입이다. 클러스터 내부에서 내부 DNS에 등록한 이름으로 특정 파드 집합에 요청을 전송할 수 있게 해준다.
 

NodePort

앞의 ClusterIP에 더해 노드의 IP 주소에 공개 포트가 열린다. 이를 통해 k8s 클러스터 외부에서 내부의 파드에 요청을 보낼 수 있게 된다.
NordPort 타입의 서비스를 만들면 클러스터의 모든 노드에 지정한 포트가 열리게 된다. 그리고 각 노드가 수령한 요청은 대상이 되는 파드들에게 부하분산되어 전송된다. 이때 요청을 받은 노드 내에 있는 파드로만 전송하도록 설정할 수 있다. 노드들 앞에 로드밸런서가 있다면 유용한 설정임.
단, 사용자가 특정 노드를 지정해서 접속하고 있는데 해당 노드가 하드웨어 점검등의 이유로 셧다운된다면 서비스를 이용할 수 없게 되고, 이미 사용 중인 포트를 설정하면 매니페스트 배포과정에서 실패한다. NodePort는 쉽고 편리하게 설정할 수 있지만 정식 서비스에 사용하는 것은 추천하지 않는다.
 

LoadBalancer

이 서비스 타입은 로드밸런서와 연동하여 파드의 애플리케이션을 외부에 공개한다. 또한 LoadBalancer는 NodePort를 사용하기 때문에 ClusterIP도 자동적으로 만들어진다.
 

ExternalName

파드에서 K8s 클러스터 외부의 엔드포인트에 접속하기 위한 이름을 해결해준다. 예를 들어, 퍼블릭 클라우드의 데이터베이스등에 접근할 때 사용될 수 있다.
 
 

세션 어피티니

동일한 클라이언트에서 온 요청은 언제나 같은 파드에 전송하고 싶을 수 있다. 그런 경우에는 매니페스트의 세션 어피니티를 ClientIP로 설정하면 된다.
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
  - protocol: TCP
    port: 80
  sessionAffinity: ClientIP
 

Loading Comments...