본문 바로가기
IT/Network

[Network] Kubernetes 네트워크 구조 & 서비스 디스커버리

by Echinacea 2025. 2. 26.
반응형

 

 

1. Kubernetes 네트워크 개요

Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션을 관리하는 오케스트레이션 플랫폼으로, 네트워크 통신을 원활하게 하기 위해 다양한 네트워크 컴포넌트를 제공한다. 쿠버네티스 네트워크 구조를 이해하면 클러스터 내 Pod 간 통신, 외부 트래픽 처리, 서비스 디스커버리 등의 개념을 효과적으로 활용할 수 있다.

 

✅ Kubernetes 네트워크의 주요 목표

  • Pod 간 통신이 원활하게 이루어질 것 (각 Pod는 고유한 IP를 가짐)
  • 네트워크 정책(NetworkPolicy)을 통한 보안 제어 가능
  • 서비스 디스커버리를 통해 동적 애플리케이션 연결 지원
  • 로드 밸런싱을 통한 트래픽 관리 및 확장성 제공

 

 

2. Kubernetes 네트워크 구조

쿠버네티스의 네트워크는 다음과 같은 주요 컴포넌트로 구성된다.

 

🔹 1️⃣ Pod 네트워크 (Pod-to-Pod Communication)

  • 모든 Pod는 클러스터 내에서 고유한 IP를 할당받음
  • Pod 간에는 NAT(Network Address Translation) 없이 직접 통신 가능
  • CNI(Container Network Interface) 플러그인을 통해 구현
    • 대표적인 CNI: Flannel, Calico, Cilium, WeaveNet 등

 

🔹 2️⃣ 서비스 네트워크 (ClusterIP, NodePort, LoadBalancer)

  • ClusterIP: 내부에서만 접근 가능한 서비스 (기본값)
  • NodePort: 외부에서 특정 포트를 통해 접근 가능
  • LoadBalancer: 클라우드 제공업체의 로드 밸런서를 사용하여 외부 트래픽을 처리
  • Ingress: 여러 서비스에 대한 HTTP/HTTPS 라우팅을 제공하는 API Gateway 역할 수행

 

🔹 3️⃣ DNS 기반 서비스 디스커버리

  • Kubernetes는 CoreDNS를 통해 서비스 디스커버리를 제공
  • 각 서비스는 서비스명.네임스페이스.svc.cluster.local 형식의 도메인을 가짐
  • Pod는 이 도메인을 통해 다른 서비스에 접근 가능

 

 

3. Kubernetes CNI (Container Network Interface)

Kubernetes에서는 CNI 플러그인을 사용하여 네트워크 기능을 제공한다.

 

CNI 플러그인 특징

Flannel 간단한 네트워크 오버레이 (VXLAN, host-gw 지원)
Calico 네트워크 정책 지원, BGP 기반 라우팅 가능
Cilium eBPF 기반 고성능 네트워크 및 보안 정책 제공
WeaveNet 간단한 설치, 자동 네트워크 복구 기능 제공

 

 

4. Kubernetes 네트워크 정책 (NetworkPolicy)

NetworkPolicy를 사용하면 특정 Pod 간의 트래픽을 제어할 수 있다.

 

✅ 기본 개념

  • 기본적으로 쿠버네티스 Pod 간의 통신은 모두 허용됨
  • NetworkPolicy를 정의하면 특정 트래픽만 허용 가능
  • ingress (수신 트래픽) 및 egress (송신 트래픽) 제어 가능

 

✅ 예제: 특정 네임스페이스에서만 접근 허용

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-namespace-access
  namespace: my-namespace
spec:
  podSelector:
    matchLabels:
      app: my-app
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              name: trusted-namespace

 

 

5. 서비스 디스커버리와 DNS

Kubernetes에서 서비스 디스커버리는 자동화된 방식으로 동작하며, CoreDNS를 활용하여 클러스터 내에서 Pod 간 통신을 지원한다.

 

✅ 서비스 디스커버리 방식

  1. 환경 변수 기반: Pod가 실행될 때 서비스의 IP와 포트가 환경 변수로 주입됨
  2. DNS 기반 (권장 방법): CoreDNS를 통해 my-service.default.svc.cluster.local과 같은 형식으로 조회 가능

 

✅ DNS 조회 예제

nslookup my-service.default.svc.cluster.local

 

 

6. Ingress 컨트롤러를 활용한 트래픽 관리

쿠버네티스에서는 Ingress를 사용하여 외부 트래픽을 내부 서비스로 라우팅할 수 있다.

 

✅ 주요 기능

  • HTTP/HTTPS 트래픽을 특정 서비스로 전달
  • 도메인 기반 라우팅 지원
  • TLS(SSL) 인증서 적용 가능

 

✅ 간단한 Ingress 예제

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

 

 

7. 결론

쿠버네티스 네트워크는 Pod-to-Pod 통신, 서비스 디스커버리, 로드 밸런싱, 네트워크 정책 적용 등의 기능을 제공하며, 이를 활용하여 안정적이고 확장 가능한 애플리케이션을 구축할 수 있다.

CNI 플러그인을 선택하여 네트워크를 구성할 수 있음

NetworkPolicy를 활용해 보안을 강화할 수 있음

CoreDNS 기반의 서비스 디스커버리를 활용 가능

Ingress 컨트롤러를 활용하여 트래픽을 효과적으로 라우팅 가능

쿠버네티스 네트워크를 최적화하면 애플리케이션 성능을 향상시키고, 보안을 강화할 수 있다

 

반응형

댓글