infra

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

leopard4 2025. 4. 6. 17:46

쿠버네티스를 여러 온프레미스 환경(각각 공인 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

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