쿠버네티스를 여러 온프레미스 환경(각각 공인 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. 구현 단계 요약
- 네트워크 설계:
- 각 사이트에 고유한 CIDR 할당 (
10.244.0.0/16
,10.245.0.0/16
) - 사이트 간 VPN 설정
- 각 사이트에 고유한 CIDR 할당 (
- 클러스터 배포:
- kubeadm/kops로 각 사이트에 클러스터 생성
- 서비스 메시 통합:
- Istio 설치 및 멀티 클러스터 구성
- 글로벌 로드밸런싱:
- Cloudflare GeoDNS + MetalLB 설정
- 모니터링:
- 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
이 접근법을 통해 물리적으로 분산된 온프레미스 환경을 논리적으로 통합한 쿠버네티스 인프라를 구축할 수 있습니다. 😊