Kubernetes

[Kubernetes] Service 개념 및 종류

운덩하는 개발자 2023. 12. 17.
반응형

요약

서비스 유형 설명
ClusterIP 클러스터 내부에서만 접근 가능한 서비스로, 내부 통신에 사용됩니다.
고유한 IP 주소를 할당받으며, 외부 네트워크에서는 접근할 수 없습니다.
NodePort 클러스터 외부에서 서비스에 접근할 수 있도록 해주며, 모든 노드에 동일한 포트를 할당합니다.
개발 및 테스트 환경에 적합합니다.
LoadBalancer 클라우드 제공 업체의 로드 밸런서를 사용하여 외부 트래픽을 자동으로 관리합니다.
고가용성과 대규모 트래픽 처리에 적합합니다.
ExternalName 특정 외부 DNS 이름에 대한 참조를 제공합니다.
클러스터 내부에서 외부 리소스에 대한 접근을 간소화합니다.
Headless 개별 파드에 직접 접근할 수 있도록 해주며, 서비스를 통하지 않고 직접 개별 파드와 통신할 수 있습니다.
상태를 유지하는 애플리케이션에 유용합니다.

 

 

1. 서비스란?

 서비스(Service)는 쿠버네티스에서 파드 집합의 네트워크 서비스를 추상화하고 노출하는 방법입니다. 이는 파드들이 제공하는 실제 기능을 네트워크를 통해 접근할 수 있도록 하는 매커니즘으로, 서비스를 사용함으로써 개별 파드의 IP 주소와 상태에 대한 직접적인 의존성을 줄일 수 있습니다.


2. 서비스를 써야하는 이유

2 -1) "파드에도 클러스터 내에서 접근할 수 있는 IP가 있는데, 왜 서비스가 필요할까?"

 파드는 쿠버네티스 클러스터 내에서 동적으로 생성되고 소멸되는 경향이 있습니다. 시스템 장애나 성능 문제로 인해 파드는 언제든지 중단될 수 있으며, 이러한 경우 새로운 파드가 생성되면서 새로운 IP 주소가 할당됩니다. 이로 인해 파드의 IP 주소는 일정하지 않고 신뢰할 수 없습니다.

 

 반면, 서비스는 고정된 IP 주소와 DNS 이름을 가지며, 파드가 중단되거나 재생성되더라도 이 IP 주소와 DNS 이름은 변하지 않습니다. 따라서 클라이언트는 서비스를 통해 항상 동일한 주소로 파드 집합에 접근할 수 있으며, 파드의 생성과 소멸에 영향을 받지 않습니다.


2 -2) "부하 분산은 어떻게 이루어지는가? 서비스의 핵심 역할을 하는 이유는?"

 쿠버네티스의 서비스는 클라이언트로부터의 요청을 파드 집합에 고르게 분산시키는 역할을 합니다. 이를 통해 어떤 특정 파드에 과부하가 걸리는 것을 방지하고, 전체 애플리케이션의 성능과 안정성을 보장합니다.

 

 서비스는 요청을 받을 때마다 연결되는 파드를 선택하는 로드 밸런싱 알고리즘을 사용하여 요청을 분산시킵니다. 이 과정은 투명하게 이루어지기 때문에 클라이언트는 어떤 파드가 요청을 처리하는지 알 필요가 없습니다.


2 -3) "서비스 발견: 쿠버네티스에서 다른 서비스나 파드를 어떻게 찾을 수 있을까?"

 서비스 발견은 쿠버네티스에서 중요한 기능 중 하나입니다. 서비스는 각각 고유한 DNS 이름을 가지고 있으며, 이를 통해 클라이언트는 서비스를 쉽게 찾고 접근할 수 있습니다.

 

 예를 들어, 서비스의 이름이 'my-service'이고, 같은 네임스페이스 내에 있다면 'my-service'라는 이름으로 다른 파드나 서비스에서 이 서비스를 찾을 수 있습니다. 이러한 방식은 애플리케이션 내의 서비스 간 연결을 단순화시키며, 파드의 위치나 IP 주소를 몰라도 서비스에 접근할 수 있게 합니다.


2 -4) "세션 유지는 왜 중요하고 쿠버네티스 서비스에서는 어떻게 관리는가?"

 세션 유지는 사용자의 연속된 요청이 동일한 파드로 전달되어야 할 때 중요합니다. 이는 사용자의 세션 정보를 유지하고 일관된 서비스 경험을 제공하기 위해 필요합니다.

 

 쿠버네티스의 서비스는 세션 유지를 위한 몇 가지 방법을 제공합니다, 예를 들어 'ClientIP' 기반의 세션 유지 방식은 같은 클라이언트 IP 주소에서 오는 요청을 동일한 파드로 라우팅합니다. 이 방식은 특정 파드가 유지해야 하는 사용자별 상태나 세션 정보가 있을 때 유용합니다.

 

3. 서비스의 종류

 

3 -1) "ClusterIP: 내부 통신을 위한 쿠버네티스 서비스" 

ClusterIP 서비스는 쿠버네티스 클러스터 내부에서만 접근 가능한 서비스입니다. 이는 클러스터 내부의 파드들이 서로 통신할 때 사용됩니다.

 

 ClusterIP는 클러스터 내에서만 접근 가능한 고유한 IP 주소를 할당받으며, 외부 네트워크에서는 접근할 수 없습니다. 


3 -2) "NodePort: 외부 접근을 위한 기본 쿠버네티스 서비스" - 내부망, 데모나 임시 연결

NodePort 서비스는 쿠버네티스(Kubernetes) 환경에서 외부에서 클러스터 내의 서비스에 접근할 수 있게 하는 기본적인 방법 입니다.

  1. NodePort 서비스의 기본 원리:
    • NodePort는 클러스터 내 모든 노드에 동일한 포트 번호를 할당합니다. 이를 통해 클러스터 외부에서 해당 포트 번호를 사용하여 서비스에 접근할 수 있습니다.
    • 클러스터 외부에서 해당 포트로 접근하면, 트래픽은 먼저 특정 노드로 라우팅되고, 그 후에 적절한 파드로 전달됩니다.
  2. 보안과 내부망 접근:
    • NodePort 서비스는 일반적으로 물리적인 호스트의 IP 주소를 통해 파드에 접근할 수 있습니다. 이는 외부에서의 접근을 가능하게 하지만, 보안상의 이유로 대부분의 호스트 IP는 내부 네트워크(내부망)에서만 접근 가능하게 설정됩니다.
    • 이러한 설정 때문에, NodePort 서비스는 클러스터 밖에 위치하지만, 보안적으로 보호된 내부망 내에서 접근할 수 있는 환경에서 주로 사용됩니다.

 

 

주의할 점은 파드가 있는 노드에만 포트가 할당되는 것이 아닌,
모든 노드에 포트가 만들어지는것이 특징입니다.

또 하나 추가로, 해당 YAML 파일과 같이 externalTrafficPolicy 값을 Local로 두게 되면
특정 노드 포트 IP로 접근하는 이 트래픽은 해당 노드위에 놓여 있는 파드에게만 트래픽을 전달해 줍니다.

원래의 경우, 서비스는 어떤 노드에서 온 트래픽인지 상관없이
자신과 연결된 POD들에게 트래픽을 전달해 줍니다.


3 -3) "LoadBalancer: 자동 로드 밸런싱을 제공하는 쿠버네티스 서비스"

  1. LoadBalancer 서비스의 기본 원리:
    • LoadBalancer는 NodePort 서비스의 기능을 확장한 형태로, 클라우드 제공 업체의 로드 밸런서를 사용하여 외부 트래픽을 클러스터의 각 노드에 자동으로 분산시키는 역할을 합니다.
    • 이 서비스는 각 노드에 트래픽을 분산시키면서도, 클라우드 환경에서 트래픽 관리를 더욱 효율적으로 수행할 수 있게 해줍니다.
  2. IP 주소와 플러그인:
    • LoadBalancer 서비스를 사용하기 위한 외부 IP 주소는 자동으로 생성되지 않습니다. 따라서, 외부 접속 IP를 할당해주는 플러그인의 설치가 필요합니다.
    • AWS, Azure, GCP, OpenStack과 같은 주요 클라우드 플랫폼은 이러한 플러그인을 제공하며, 이를 통해 로드밸런서 타입의 리소스를 생성할 때 외부 IP 주소를 자동으로 할당받을 수 있습니다.
  3. 외부 접근과 보안:
    • LoadBalancer를 사용하면 내부 IP가 외부에 노출되지 않으면서도 안정적으로 외부에 서비스를 노출할 수 있습니다.
    • 이는 외부 트래픽을 효율적으로 관리하고, 시스템의 보안을 유지하면서 외부 사용자에게 서비스를 제공하는 데 이상적입니다.
  4. 적용 상황:
    • LoadBalancer 서비스는 특히 클라우드 환경에서 고가용성, 확장성, 그리고 안정적인 서비스 제공이 중요한 대규모 애플리케이션에 적합합니다.
    • 사용자 트래픽이 많은 웹 애플리케이션, 전자 상거래 플랫폼 등에서 주로 사용되며, 클라우드 기반의 자동 확장성과 효율적인 트래픽 관리가 필요한 경우에 이상적입니다.

 

반응형

댓글