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

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

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

Overview

이번 글에서는 Kubernetes의 핵심 네트워크 리소스인 Service 객체에 대해 학습하였다.


Pod는 자체 IP를 갖고 있지만 휘발성이기 때문에, 안정적인 통신을 위해 Service의 ClusterIP를 통해 접근하는 것이 일반적이다.

Kubernetes에서 Service는 다양한 타입으로 구성할 수 있으며,

 


이번 글에서는 대표적인 3가지 유형인 ClusterIP, NodePort, LoadBalancer에 대해 각각의 개념과 특징, 사용 사례를 정리해보았다.

 

 

 


 

 

 

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 등이 있다.

 

 

 

 

사용 예시

  • 외부 시스템 노출용

 

 

 


 

 

 

마무리

  • ClusterIP: 클러스터 내부에서만 접근 가능한 기본 Service 타입.
    내부 시스템 간 통신이나 디버깅에 적합하다.
  • NodePort: 외부에서 접근 가능하도록 모든 노드의 고정 포트를 열어주는 타입.
    간단한 외부 노출이 필요할 때 유용하지만, 트래픽 라우팅 문제를 고려해야 한다.
  • ☁️oadBalancer: 외부 클라우드 LB와 연계해 외부 트래픽을 안정적으로 분산시키는 타입.
    실서비스 배포 환경에 적합하지만, 별도의 클라우드 지원이 필요하다.

 

 

이번 내용을 통해 Kubernetes 내부 네트워킹 구조와 Pod 접근 방식에 대한 전반적인 이해를 높일 수 있었고,
각 서비스 타입이 실무에서 어떻게 활용되는지 구체적인 예시를 통해 정리해볼 수 있었다.

다음 글에서는 Ingress나 ExternalName과 같은 고급 Service 타입까지 확장해볼 예정입니다.
Kubernetes 네트워킹의 퍼즐이 점점 맞춰지는 느낌이네요!

 

 

 

 

 

 

 


 

728x90
반응형