교육, 커뮤니티 후기/인프런 교육

<인프런> 대세는 쿠버네티스 [초급] - No.9 Object - Service

Somaz 2022. 8. 29. 17:24
728x90
반응형

Overview

오늘은 kubernetes service에 대해서 공부해보려고 한다.

 

 

Object - Service


ClusterIP

service는 기본적으로 자신의 ClusterIP를 가지고 있다. Service를 Pod에 연결을 시켜놓으면, Service IP를 가지고 Pod에 접근을 할 수 있다. 그렇다면 Pod에도 IP가 있는데, 왜 Service의 ClusterIP를 가지고 접근을 해야할까?

이유는 이전 글을 보면 알 수 있다.

2022.08.29 - [교육, 커뮤니티 후기] - <인프런> 대세는 쿠버네티스 [초급] - No.8 Object - Pod 실습

Pod가 가지고 있는 IP는 휘발성 ip이기 때문에 장애가 발생했을 시 Pod가 재생성되고, 그러면 IP가 바뀌기 때문이다.

따라서 Pod의 IP는 신뢰성이 떨어지기 때문에, Service의 IP를 가지고 접근을 하는 것이다.

Service의 종류는 여러가지가 있고 그 종류에 따라 Pod에 접근하는 방식이 다르다.

그 중 가장 기본적인 방식인 ClusterIP라는 방식이 있다.

이 IP는 Cluster 내에서만 접근이 가능하다. Pod가 가지고 있는 IP와 동일하게 외부에서는 접근이 불가하다.

사용 예시

  • 인가된 사용자 (운영자)
  • 내부 대쉬보드
  • Pod의 서비스상태 디버깅

NodePort

NodePort 타입의  Service는 ClusterIP와 동일한 특성을 가지고 있다. NodePort 타입만의 큰 특징은 Kubernetes Cluster에 할당되어 있는 모든 Node에게 똑같은 Port가 할당이 된다. 따라서 Node1,2든 해당 IP에 Port로 접속을 하면, Service에 연결이 된다.

그러면 해당 Service는 해당 Pod를 가지고 있는 Node에게 Traffic을 전달해 준다. 또한 Pod가 할당된 Node에만 Port가 할당되는게 아니고, 모든  Node에 Port가 만들어진다.

하나 주의할 점은 Node1을 통해, Service에 접근을 했더라도, Service에서는 Node2로 Traffic을 전달할 수 있다.

따라서 이 문제를 해결하기 위해서는 externalTrafficPolicy: Local 이라는 옵션을 써줘야 한다. 이 옵션을 사용하면, Node1을 통해 서비스에 접근했다면 Service에서 Node1의 Pod로 Traffic을 전달해주고, Node2를 통해 서비스에 접근했다면 Service에서 Node2의 Pod로 Traffic을 전달해준다. 

 

사용 예시

  • 내부망 연결
  • 데모나 임시 연결용

Load Balancer

Load Balancer 타입의  Service는 NodePort와 동일한 특성을 가지고 있다.  추가적으로 LoadBalancer라는 걸 이용해서 각각의 Node에 Traffic을 분산시켜주는 역할을 한다. 다만, Load Balancer가 가지고 있는 IP는 Kubernetes를 설치 햇을 때 생기지 않는다. 별도로 외부접속 IP를 할당을 해주는 Plugin이 설치가 되어있어야 IP가 생긴다.

External  IP 지원  Plugin에는 GCP, AWS, Azure, Openstack 등이 있다.

 

사용 예시

  • 외부 시스템 노출용

 

728x90
반응형