NodePort vs ClusterIP on Kubernetes, 쿠버네티스 서비스

Kubernetes(k8s)에 대해 전문가 수준의 이해를 돕기 위해 몇 가지 중요한 개념을 설명드리겠습니다. Kubernetes는 컨테이너화된 애플리케이션을 자동화하고 관리하는 오픈 소스 플랫폼입니다. 다음은 Kubernetes 전문가가 이해해야 할 핵심 주제들입니다.

1. Kubernetes의 핵심 컴포넌트

  • Pod: Kubernetes의 기본 배포 단위로, 하나 이상의 컨테이너를 포함합니다.
  • Node: 애플리케이션이 실행되는 물리적 또는 가상 머신입니다.
  • Cluster: 여러 노드가 모인 집합으로, 전체적으로 애플리케이션을 실행하는 단위입니다.
  • Control Plane: Kubernetes 클러스터를 관리하는 중앙 관리 엔티티입니다. 주요 구성

Kubernetes에서 NodePortClusterIP를 동시에 지원하는 설정을 만들기 위해서는 Kubernetes Service를 사용하는 것이 핵심입니다. NodePort는 클러스터 외부에서 접근할 수 있도록 하며, ClusterIP는 클러스터 내부에서 접근할 수 있게 해줍니다.

Kubernetes의 Service는 기본적으로 하나의 방식으로 트래픽을 전달하지만, 하나의 애플리케이션에 대해 여러 방식으로 접근을 제공하는 방법은 가능합니다. 여기에서는 하나의 Service를 NodePortClusterIP로 동시에 사용하는 설정을 구성하는 방법을 설명드리겠습니다.

설정 방법

  1. 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 타입은 내부적으로 NodePortClusterIP를 함께 사용할 수 있도록 설정됩니다. 외부에서 직접 NodePort로 접근할 수 있으며, 내부적으로는 ClusterIP로도 접근이 가능합니다.
  • ports: 여러 포트를 설정할 수 있습니다. 여기서는 ClusterIP 포트와 NodePort 포트를 각각 설정했습니다.
  • nodePort: 외부에서 접근할 수 있는 고정 포트입니다.
  • externalTrafficPolicy: Local: 트래픽을 로컬 노드로만 전달하여 효율적인 네트워크 트래픽 처리가 가능합니다.

결과

이 설정을 사용하면:

  • NodePort(30080)를 통해 클러스터 외부에서 접근이 가능하고,
  • ClusterIP(80)를 통해 클러스터 내부에서 접근할 수 있습니다.

이 방식은 외부와 내부에서 동시에 트래픽을 처리할 수 있는 환경을 제공하므로, 유연한 네트워크 설정이 가능합니다.

댓글

이 블로그의 인기 게시물

Using the MinIO API via curl

Install and run an FTP server using Docker

PYTHONPATH, Python 모듈 환경설정

Elasticsearch Ingest API

How to checkout branch of remote git, 깃 리모트 브랜치 체크아웃

Fundamentals of English Grammar #1

You can use Sublime Text from the command line by utilizing the subl command

How to start computer vision ai

Catch multiple exceptions in Python

git 명령어