[기본 오브젝트] Service
본문은 인프런의 대세는 쿠버네티스 [초급~중급] 강의를 정리한 글입니다.
모든 본문의 내용과 이미지의 출처는 강의자료에 있습니다.
Service
- Service는 기본적으로 자신의 ClusterIP를 가지고 있다.
- 그리고 이 Service를 pod에 연결시켜 놓으면 Service의 IP를 통해서도 pod에 접근할 수 있게 된다.
- pod에도 Cluster내에서 접근할 수 있는 IP가 있는데 왜 굳이 Service를 달아서 접근할까?
- Pod라는 존재는 쿠버네티스 상에서 시스템 장애등 때문에 언제든지 죽을 수 있고, 그러면 다시 재생성 되도록 설계되어 있는 오브젝트이다.
- 그러면 Pod의 IP는 재생성되면 변경되기 때문에, 이 Pod의 IP는 신뢰성이 떨어진다.
- Service는 사용자가 직접 지우지 않는 한, 삭제되거나 재생성되지 않는다.
- 그래서 이 Service의 IP로는 항상 Pod에 접근할 수 있게된다.
- Service에는 여러가지 종류가 있고, 종류에 따라서 Pod에 접근을 도와주는 방식이 다르다.
ClusterIP
- 가장 기본적인 방식 (default 설정)
- 이 IP는 쿠버네티스 Cluster 내에서만 접근이 가능하다.
- Pod의 IP와 특성이 같다.
- 그래서 클래스터 내의 다른 오브젝트들이 접근할 수 있지만, 외부에서는 접근 불가
- 예) 마스터 노드에서는 Pod에 접근 가능하지만, 브라우저(외부)에서는 Service IP주소로 Pod에 접근 불가능
- Pod를 하나 이상 연결할 수 있다.
- 여러개의 pod를 연결시켰을 때, Service가 트래픽을 분산해서 pod에 전달해준다.
spec: type: ClusterIP
- default 방식이기 때문에 위 type 생략시 기본으로 CluterIP가 설정된다.
- 어떤 상황에서 사용?
- 클러스터 내부에 접근할 수 있는 운영자와 같은 인가된 사람만 접근 가능하다.
- 주된 작업
- 클러스터 대쉬보드 관리
- Pod의 서비스 상태 디버깅
NodePort
-
ClusterIP 기능이 모두 포함
-
쿠버네티스 클러스터에 연결되어있는 모든 Node에 동일한 Port가 할당돼서
외부로부터어느 노드던 간에 해당 노드의 IP와 Port로 접속하면,이 Service에 연결된다.
-
Service는 자신에게 연결되어있는 Pod에 트래픽을 전달해준다.
-
pod가 있는 노드에만 포트가 할당되는 것이 아니라 모든 노드에 할당된다.
-
spec: type: NodePort
spec: ports: nodePort
: 범위 (30000 ~ 32767)- 설정하지않으면 범위내에서 랜덤으로 할당됨
-
각 노드에 Pod가 하나씩 올라가져 있는 상태에서
- Node1의 IP로 접근하더라도 Service는 Node2에 있는 Pod에 트래픽을 전달할 수 있다.
- Service 입장에서는 어떤 노드한테 온 트래픽인지 상관없이 그냥 자신에게 달려있는 Pod들에게 트래픽을 전달해주기 때문이다.
externalTrafficPolicy: Local
옵션- 특정 Node 포트에 접근하는 트래픽은 Service가 해당 Node에 올려져있는 Pod한테만 트래픽을 전달한다.
- pod가 없는 Node에 접근하려고하면?
- 접근을 못하고 계속 기다리게된다. 이 옵션 사용 시 이런 부분을 주의해야 한다.
-
어떤 상황에서 사용?
- 물리적인 Host의 IP를 통해서 Pod에 접근 가능하다는 특징
- 대부분 Host IP는 보안상 내부망에서만 접근할 수 있게 네트워크를 구성한다.
- 이 Node 포트는 클러스터 외부에 있지만 내부망에서 접근해야할 때 쓰인다.
- 일시적인 외부 연동용으로 사용
- ex) 내부 환경에서 개발을 하다가 외부에 간단한 데모를 보여줘야 할 때, 네트워크 중계기에 포트포워딩을 해서 외부에서 내부 시스템에 연결한다. 이럴 때 Node 포트를 잠시 뚫어놓고 쓸 수 있다.
LoadBalancer
-
NodePort의 성격을 모두 가지고 있다.
-
Load Balancer는 각각의 Node에 트래픽을 분산시켜준다.
-
Load Balancer에 접근하기위한 외부 접속용 IP는
-
개별적으로 쿠버네티스를 설치했을 때 기본적으로 생기지 않는다.
-
별도로 외부 접속용 IP를 할당해주는 플러그인이 설치되어 있어야 IP가 생성된다.
-
Google Clod 플랫폼이나 아마존에서 제공하는 쿠버네티스 플랫폼을 사용할 때는 자체적으로 플러그인이 설치되어 있어서 알아서 외부 접속용 IP를 할당해준다.
-
-
spec: type: LoadBalancer
-
어떤 상황에서 사용?
- 외부 시스템 노출용
- 실제적으로 외부에 서비스를 노출시키려면 Load Balancer을 이용해야 한다.
- 내부의 IP가 노출되지 않고, 외부 IP를 통해서 안정적으로 서비스를 노출시킬 수 있다.