[k8s] DNS, iptable 업데이트 타이밍

succeeding·2025년 3월 18일

[k8s] 개발자가 꼭 알아야 할 k8s DNS, iptable 업데이트 타이밍

위 글을 보고 정리한 글

Prerequisite

Node

  • k8s 클러스터의 worker 머신
  • 실제 물리 서버이거나 가상 머신일 수 있음
  • AWS EKS 에서는 보통 ec2 로 실행됨

Pod

  • 하나 이상의 컨테이너의 그룹
  • k8s 에서 배포할 수 있는 가장 작은 단위
  • pod 내의 컨테이너들은 동일한 노드에서 실행되며, localhost 로 통신할 수 있음
  • 주 컨테이너와 보조 컨테이너(sidecar)를 하나의 pod 로 묶어서 배포하기도 함. 주로 sidecar 에선 로그 수집, 프록시 등을 수행.

Service

Kubernetes의 Service는 클러스터 내에서 pod들을 하나의 논리적 그룹으로 묶어 일정한 네트워크 정책과 엔드포인트를 제공하는 오브젝트입니다. 아래에 Service의 역할, 사용 사례, 그리고 사용하는 경우에 대해 자세히 설명합니다.

Service의 주요 역할

  • 안정적인 네트워크 접속점 제공:
    pod들은 동적으로 생성되고 사라지며 IP 주소가 변경될 수 있습니다. Service는 이러한 변화에도 불구하고 일정한 IP 주소와 DNS 이름을 제공하여 클라이언트가 pod에 안정적으로 접근할 수 있도록 합니다.

  • 로드 밸런싱:
    Service는 여러 pod로의 트래픽을 자동으로 분산시켜 부하를 균등하게 처리할 수 있도록 합니다. 이로 인해 단일 pod에 과부하가 걸리는 것을 방지하고, 애플리케이션의 가용성을 높입니다.

  • 서비스 디스커버리:
    Kubernetes 내부의 DNS 시스템과 연동되어, Service 이름으로 접근할 수 있도록 합니다. 이를 통해 다른 애플리케이션이나 마이크로서비스가 해당 Service를 쉽게 찾고 통신할 수 있습니다.

  • 네트워크 정책 적용:
    Service는 pod들에 대한 접근 제어와 네트워크 정책을 적용할 수 있는 단위로 작용하며, 보안적인 측면에서도 중요한 역할을 합니다.

Service의 종류와 유즈 케이스

Kubernetes에서는 다양한 종류의 Service를 제공하며, 각각의 상황에 맞게 사용됩니다.

  • ClusterIP (기본 타입):

    • 역할: 클러스터 내부 전용 IP 주소를 부여하여 내부 통신에 사용됩니다.
    • 사용 사례: 클러스터 내의 마이크로서비스 간 통신이나 내부 데이터베이스 접근 등, 외부 노출이 필요 없는 경우.
  • NodePort:

    • 역할: 클러스터의 모든 노드에 동일한 고정 포트를 열어 외부에서 접근할 수 있도록 합니다.
    • 사용 사례: 외부에서 직접 노드의 IP와 포트를 통해 서비스에 접근할 때 사용하거나, 간단한 외부 노출이 필요할 때 사용합니다.
  • LoadBalancer:

    • 역할: 클라우드 환경(예: AWS, GCP, Azure)에서 외부 로드 밸런서를 생성하여, 외부 트래픽을 자동으로 분산시킵니다.
    • 사용 사례: 프로덕션 환경에서 외부 사용자에게 서비스를 제공할 때, 안정적인 외부 접근과 고가용성이 요구되는 경우.
  • ExternalName:

    • 역할: DNS 이름을 외부의 서비스로 매핑합니다.
    • 사용 사례: 클러스터 내부에서 외부 서비스를 투명하게 접근할 필요가 있을 때 사용합니다.

언제 Service를 사용해야 할까?

  • 동적인 pod 관리:
    Deployment나 ReplicaSet을 통해 생성된 pod들이 동적으로 변동하는 경우, 외부 클라이언트나 다른 내부 서비스가 안정적으로 이들에 접근하기 위해 Service를 사용합니다.

  • 로드 분산 필요:
    여러 인스턴스의 pod들 사이에 트래픽을 균등하게 분산시켜야 할 때, Service는 내장된 로드 밸런싱 기능을 제공하여 이를 해결합니다.

  • 서비스 디스커버리 및 DNS:
    복잡한 마이크로서비스 아키텍처에서는 각 서비스가 다른 서비스의 위치를 알아야 합니다. Service는 클러스터 내부 DNS 이름을 통해 이를 쉽게 관리할 수 있게 도와줍니다.

  • 보안 및 네트워크 정책:
    네트워크 접근을 제어하거나 특정 서비스에 대한 정책을 적용할 때 Service는 중요한 관리 단위로 사용됩니다.

결론적으로, Kubernetes Service는 pod의 동적 특성을 보완하고, 안정적인 네트워크 연결 및 트래픽 분산, 그리고 서비스 디스커버리 등의 다양한 기능을 제공하는 핵심적인 컴포넌트입니다. 이러한 기능 덕분에 마이크로서비스 아키텍처에서 복잡한 네트워크 통신을 효율적으로 관리할 수 있습니다.

0개의 댓글