NodePort vs ClusterIP on Kubernetes, 쿠버네티스 서비스
Kubernetes(k8s)에 대해 전문가 수준의 이해를 돕기 위해 몇 가지 중요한 개념을 설명드리겠습니다. Kubernetes는 컨테이너화된 애플리케이션을 자동화하고 관리하는 오픈 소스 플랫폼입니다. 다음은 Kubernetes 전문가가 이해해야 할 핵심 주제들입니다.
1. Kubernetes의 핵심 컴포넌트
- Pod: Kubernetes의 기본 배포 단위로, 하나 이상의 컨테이너를 포함합니다.
- Node: 애플리케이션이 실행되는 물리적 또는 가상 머신입니다.
- Cluster: 여러 노드가 모인 집합으로, 전체적으로 애플리케이션을 실행하는 단위입니다.
- Control Plane: Kubernetes 클러스터를 관리하는 중앙 관리 엔티티입니다. 주요 구성
Kubernetes에서 NodePort
와 ClusterIP
를 동시에 지원하는 설정을 만들기 위해서는 Kubernetes Service를 사용하는 것이 핵심입니다. NodePort
는 클러스터 외부에서 접근할 수 있도록 하며, ClusterIP
는 클러스터 내부에서 접근할 수 있게 해줍니다.
Kubernetes의 Service는 기본적으로 하나의 방식으로 트래픽을 전달하지만, 하나의 애플리케이션에 대해 여러 방식으로 접근을 제공하는 방법은 가능합니다. 여기에서는 하나의 Service를 NodePort
와 ClusterIP
로 동시에 사용하는 설정을 구성하는 방법을 설명드리겠습니다.
설정 방법
- NodePort와 ClusterIP를 동시에 사용하는 방식
- NodePort는 외부에서 접근할 수 있는 고정된 포트로, ClusterIP는 내부 클러스터에서의 접근을 위해 사용됩니다.
- 두 가지 방식을 동시에 사용하려면 기본적으로 LoadBalancer 타입의 Service를 설정하고,
externalTrafficPolicy: Local
을 통해 두 방식의 트래픽을 모두 처리할 수 있도록 합니다.
예시 YAML 파일
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: default
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80 # ClusterIP 접근용 포트
targetPort: 8080 # 실제 컨테이너의 포트
- protocol: TCP
port: 30000 # NodePort 접근용 포트
targetPort: 8080 # 실제 컨테이너의 포트
nodePort: 30080 # 고정된 NodePort 번호 (생략하면 자동 할당)
type: LoadBalancer # LoadBalancer를 사용하여 NodePort와 ClusterIP를 동시에 지원
externalTrafficPolicy: Local
설명:
- type: LoadBalancer: LoadBalancer 타입은 내부적으로
NodePort
와ClusterIP
를 함께 사용할 수 있도록 설정됩니다. 외부에서 직접 NodePort로 접근할 수 있으며, 내부적으로는 ClusterIP로도 접근이 가능합니다. - ports: 여러 포트를 설정할 수 있습니다. 여기서는 ClusterIP 포트와 NodePort 포트를 각각 설정했습니다.
- nodePort: 외부에서 접근할 수 있는 고정 포트입니다.
- externalTrafficPolicy: Local: 트래픽을 로컬 노드로만 전달하여 효율적인 네트워크 트래픽 처리가 가능합니다.
결과
이 설정을 사용하면:
- NodePort(30080)를 통해 클러스터 외부에서 접근이 가능하고,
- ClusterIP(80)를 통해 클러스터 내부에서 접근할 수 있습니다.
이 방식은 외부와 내부에서 동시에 트래픽을 처리할 수 있는 환경을 제공하므로, 유연한 네트워크 설정이 가능합니다.
댓글
댓글 쓰기