본문 바로가기
infra

여러 온프레미스 환경(각각 공인 IP 보유)에서 **단일 논리적 클러스터**로 운영하려는 시나리오

by leopard4 2025. 4. 6.

쿠버네티스를 여러 온프레미스 환경(각각 공인 IP 보유)에서 단일 논리적 클러스터로 운영하려는 시나리오입니다. 이는 멀티 클러스터 아키텍처 또는 하이브리드 클러스터 구축과 관련이 있습니다. 체계적으로 설명드리겠습니다.


1. 기본 개념: 멀티 클러스터 vs. 단일 클러스터

유형 설명 사용 사례
단일 클러스터 하나의 컨트롤 플레인으로 모든 노드 관리 단일 데이터센터 내 고밀도 워크로드
멀티 클러스터 여러 독립된 클러스터를 논리적으로 통합 지역 분산, 고가용성, 온프레미스+클라우드 혼합

2. 목표 달성을 위한 3가지 접근법

2.1. 네트워크 통합 (VPN/전용선)

  • 구성 방법:
    • WireGuard/OpenVPN으로 사이트 간 프라이빗 네트워크 연결 설정
    • CNI 구성:
      # Calico CNI 설정 예시 (IP 대역 분리)
      apiVersion: crd.projectcalico.org/v1
      kind: IPPool
      metadata:
        name: site1-pool
      spec:
        cidr: 10.244.0.0/16
        natOutgoing: true
      ---
      apiVersion: crd.projectcalico.org/v1
      kind: IPPool
      metadata:
        name: site2-pool
      spec:
        cidr: 10.245.0.0/16
        natOutgoing: true
    • 문제점:
      • 네트워크 지연 및 분할 브레인(split-brain) 위험
      • 노드 간 통신 오버헤드 증가

2.2. 클러스터 페더레이션 (Kubernetes Federation)

  • 구성 도구:
    • kubefed (공식 페더레이션 도구)
    • Cluster API (클러스터 라이프사이클 관리)
  • 동작 원리:
    # 클러스터 페더레이션 설정 예시
    kubefedctl join cluster1 --cluster-context=site1-context
    kubefedctl join cluster2 --cluster-context=site2-context
    • 통합 리소스 관리:
      apiVersion: types.kubefed.io/v1beta1
      kind: FederatedDeployment
      metadata:
        name: my-app
        namespace: default
      spec:
        template:
          replicas: 3
        placement:
          clusters:
          - name: site1
          - name: site2

2.3. 서비스 메시 (Service Mesh)

  • 구성 도구:
    • Istio Multi-Cluster
    • Linkerd
  • 구성 예시:
    # Istio 멀티 클러스터 설정 (공유 제어 플레인)
    istioctl install --set profile=demo -y
    kubectl apply -f istio-remote-config.yaml
    • 트래픽 라우팅:
      apiVersion: networking.istio.io/v1alpha3
      kind: ServiceEntry
      metadata:
        name: remote-service
      spec:
        hosts:
        - "service.site2.cluster.local"
        endpoints:
        - address: 203.0.113.45  # site2 클러스터 공인 IP
        ports:
        - number: 80
          name: http

3. 실제 구현 예시

3.1. Istio를 이용한 멀티 클러스터 서비스 라우팅

1. 클라이언트 → Istio Ingress Gateway (공인 IP: 203.0.113.40)
2. Istio Pilot → 서비스 레지스트리 (site1/sie2 클러스터 정보)
3. 트래픽 라우팅 → site2 클러스터의 서비스 (203.0.113.45:30000)

3.2. MetalLB를 이용한 크로스 클러스터 로드밸런싱

# MetalLB 구성 예시 (BGP 모드)
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    peers:
    - peer-address: 192.168.1.1  # 사이트1 라우터
      peer-asn: 64512
      my-asn: 64513
    - peer-address: 192.168.2.1  # 사이트2 라우터
      peer-asn: 64514
      my-asn: 64515

4. 핵심 고려 사항

요소 설명 해결 방안
네트워크 격리 각 사이트의 파드/서비스 CIDR 중복 방지 CNI 플러그인으로 IP 대역 분리
서비스 디스커버리 크로스 클러스터 서비스 조회 Istio/Consul로 글로벌 서비스 레지스트리 구축
트래픽 관리 지연 시간 최소화 GeoDNS + HTTP 헤더 기반 라우팅
보안 클러스터 간 통신 암호화 mTLS (Istio) 또는 IPsec 터널

5. 구현 단계 요약

  1. 네트워크 설계:
    • 각 사이트에 고유한 CIDR 할당 (10.244.0.0/16, 10.245.0.0/16)
    • 사이트 간 VPN 설정
  2. 클러스터 배포:
    • kubeadm/kops로 각 사이트에 클러스터 생성
  3. 서비스 메시 통합:
    • Istio 설치 및 멀티 클러스터 구성
  4. 글로벌 로드밸런싱:
    • Cloudflare GeoDNS + MetalLB 설정
  5. 모니터링:
    • Prometheus/Grafana로 클러스터 간 메트릭 수집

6. 검증 방법

# 클러스터1에서 클러스터2 서비스 호출
kubectl exec -ti pod-in-cluster1 -- curl http://service.cluster2.local

# Istio 서비스 엔드포인트 확인
kubectl get serviceentry -n istio-system

# MetalLB 할당 IP 확인
kubectl get services -n metallb-system

7. 추천 도구

  • 네트워크: WireGuard, Calico, MetalLB
  • 서비스 메시: Istio, Linkerd
  • 페더레이션: Rancher, Kubefed
  • 모니터링: Prometheus Operator, Grafana

이 접근법을 통해 물리적으로 분산된 온프레미스 환경을 논리적으로 통합한 쿠버네티스 인프라를 구축할 수 있습니다. 😊