오늘도 기록하는 중 GitHub

Kubenetes

Kubernetes - Federation

YongE 2025. 5. 23. 12:02

🌐 Kubernetes Federation


🎯 Federation?

Kubernetes Federation은 단일 클러스터가 아닌 분산된 다중 클러스터 환경을 단일 제어 평면에서 관리하기 위한 표준화된 솔루션이다. 이는 여러 개의 Kubernetes 클러스터를 중앙에서 관리하고 최적화하는 기술로, 하이브리드 클라우드, 멀티 클라우드, 지리적으로 분산된 데이터 센터 운영 등에 활용되어 서비스 확장성과 가용성을 극대화할 수 있다.

Federation은 두 가지 주요 버전으로 발전해왔다. 초기 Federation v1은 클러스터 연합을 위한 기본 기능을 제공했지만, Federation v2는 Kubernetes Operator를 활용한 CRD(Custom Resource Definitions) 기반의 개선된 아키텍처를 제공한다. Federation v2는 클러스터 스코프와 네임스페이스 스코프 배포를 모두 지원하며, 더욱 유연하고 확장 가능한 구조를 갖추고 있다.

멀티 클러스터 운영의 필요성

현대 기업환경에서 멀티 클러스터 운영이 필요한 이유는 다음과 같다.

  • 하이브리드 및 멀티 클라우드 지원. AWS, Azure, GCP 등 여러 클라우드에서 서비스 운영이 가능하며 벤더 종속성을 줄일 수 있다.
  • 지역별 서비스 배포. 사용자 위치에 따라 지연 시간을 최소화하는 배포가 가능하다.
  • 리소스 분산 및 확장성 확보. 단일 클러스터의 한계를 넘어서 리소스를 유연하게 확장할 수 있다.
  • 보안 및 격리. 서로 다른 클러스터에서 워크로드를 분리하여 보안 및 안정성을 강화할 수 있다.
항목 단일 클러스터 멀티 클러스터
리소스 확장성 제한적 고도로 확장 가능
장애 복구 클러스터 장애 시 전체 서비스 영향 특정 클러스터 장애 시에도 다른 클러스터 운영 가능
클라우드 지원 단일 클라우드 중심 멀티 클라우드 및 하이브리드 환경 지원
보안 격리 네임스페이스 기반 격리 클러스터 단위의 강력한 격리

🏗️ Federation 아키텍처

Federation v2 아키텍처

Federation v2는 다음과 같은 핵심 개념으로 구성된다.

  • Type Configuration: Federation이 처리해야 할 API 유형을 선언한다.
  • Cluster Configuration: Federation이 대상으로 할 클러스터를 선언한다.
  • Template: 클러스터 간 공통 리소스 표현을 정의한다.
  • Placement: 리소스가 나타날 클러스터를 정의한다.
  • Overrides: 템플릿에 적용할 클러스터별 필드 수준 변형을 정의한다.

Federation 아키텍처 다이어그램

다음은 이해를 돕기 위한 아키텍쳐다.

┌─────────────────────────────────────────────────────────────┐
│                    Federation Control Plane                 │
│  ┌─────────────────┐  ┌─────────────────┐  ┌──────────────┐ │
│  │   Type Config   │  │ Cluster Config  │  │  Scheduler   │ │
│  └─────────────────┘  └─────────────────┘  └──────────────┘ │
│  ┌─────────────────┐  ┌─────────────────┐  ┌──────────────┐ │
│  │    Template     │  │   Placement     │  │  Overrides   │ │
│  └─────────────────┘  └─────────────────┘  └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
                                │
                ┌───────────────┼──────────────┐
                │               │              │
        ┌───────▼──────┐ ┌──────▼──────┐ ┌─────▼──────┐
        │   Cluster A  │ │  Cluster B  │ │ Cluster C  │
        │   (AWS)      │ │  (Azure)    │ │   (GCP)    │
        └──────────────┘ └─────────────┘ └────────────┘

🛠️ Federation 구축한다면?

필수 요구사항과 준비

Federation 구축을 위한 필수 도구는 다음과 같다.

  • kubectl v1.21+ (모든 클러스터에 설치한다)
  • Helm v3.8+ (호스트 클러스터에 설치한다)
  • kubefedctl (Federation 제어용 CLI 도구이다)

클러스터 federation으로 구성하는 데에 있어서 조건은 다음과 같다.

  • 호스트 클러스터: federation 제어 평면 운영을 위해 최소 2vCPU, 4GB RAM을 권장한다.
  • 멤버 클러스터: 3개 이상 권장하며 각각 kubeconfig 접근이 가능해야 한다.
  • 네트워크: 클러스터 간 상호 통신이 가능하도록 포트 443/6443을 개방해야 한다.

단계별 구축 프로세스

Kubernetes Federation 구축은 호스트 클러스터 초기화 → 멤버 클러스터 등록 → 연합 리소스 정의 → 배포 정책 설정의 단계적 프로세스를 거친다.

1단계: 호스트 클러스터 초기화

먼저 Federation 제어 평면을 호스팅할 클러스터를 초기화한다.

# kubefed-config ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: kubefed-config
  namespace: kube-system
data:
  kubefed.yaml: |
    apiVersion: federation/v1beta1
    kind: Federation
    metadata:
      name: federation
    spec:
      clusters:
      - clusterName: cluster1
        serverAddressByClientCIDRs:
        - clientCIDR: 0.0.0.0/0
          serverAddress: https://10.0.1.1:6443
      - clusterName: cluster2
        serverAddressByClientCIDRs:
        - clientCIDR: 0.0.0.0/0
          serverAddress: https://10.0.2.1:6443

2단계: kubefedctl 설치 및 클러스터 조인

kubefedctl 도구를 사용하여 클러스터를 Federation에 등록한다.

# kubefedctl을 사용한 클러스터 조인
kubefedctl join cluster1 --cluster-context cluster1 --host-cluster-context federation-host
kubefedctl join cluster2 --cluster-context cluster2 --host-cluster-context federation-host

# 조인된 클러스터 확인
kubectl get kubefedclusters -n kube-federation-system

3단계: 연합 리소스 정의

연합된 리소스를 정의하여 여러 클러스터에 배포한다.

# 연합 Deployment 예제
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
  name: nginx
  namespace: default
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
  placement:
    clusters:
    - name: cluster1
    - name: cluster2
  overrides:
  - clusterName: cluster1
    clusterOverrides:
    - path: spec.replicas
      value: 5

🌐 네트워크 및 보안 관리

멀티 클러스터 네트워킹 전략

Federation 환경에서는 클러스터 간 네트워크 연결과 서비스 디스커버리가 중요하다.

  • 서비스 메시(Istio, Linkerd): TLS 암호화, 트래픽 라우팅, 장애 복구 자동화를 제공한다.
  • Multi-cluster Ingress: 클러스터 간 로드 밸런싱 및 DNS 관리를 담당한다.
  • Submariner: 멀티 클러스터 간 VPN을 구축하여 네트워크 통합을 지원한다.

보안 강화 방안

멀티 클러스터 보안 전략은 다음과 같다.

  • Zero Trust 보안 모델 적용: 모든 클러스터 간 통신을 기본적으로 불신하고 검증한다.
  • RBAC 및 IAM 적용: 역할 기반 접근 제어와 통합 인증 관리를 구현한다.
  • 클러스터 간 네트워크 보안 정책 강화: Network Policy를 통한 트래픽 제어를 수행한다.
  • mTLS 암호화: 서비스 간 상호 TLS 인증을 통한 보안을 강화한다.

🔧 운영 환경 고려사항

실제 운영 환경에서 다음과 같은 고려사항이 있다.

  1. 점진적 롤아웃: 카나리 배포 전략으로 초기 소수 클러스터에만 적용한다.
  2. 자동화 파이프라인: Argo CD 등과 연동해 CI/CD 통합을 구현한다.
  3. 크로스 클러스터 모니터링: Thanos/Prometheus 연동 설정을 통한 통합 모니터링을 구축한다.
  4. 재해 복구 계획: 지역 간 장애 조치 시뮬레이션을 정기적으로 수행한다.

⚡ Federation 도구

Federation과 관련된 여러 도구가 있다. 간단히 존재만 알아두고자 한다.

다양한 관리 도구

도구 설명
KubeFed (Kubernetes Federation) 여러 Kubernetes 클러스터를 중앙에서 관리할 수 있도록 지원한다
Istio Multi-Cluster 서비스 메시를 활용한 트래픽 관리 및 보안 강화를 지원한다
Submariner Kubernetes 클러스터 간 VPN 연결을 위한 오픈소스 솔루션이다
Red Hat Advanced Cluster Management 엔터프라이즈급 멀티 클러스터 관리 솔루션이다

⁉️ 생각


개념 자체는 어렵지 않다. "규모가 커진 관리 체계"라 이해하면 편하다. Docker 컨테이너를 여러 개 다룰 땐 Docker-compose가 있고, 여러 개 Docker 클러스터를 다룰 땐 Docker Swarm이 있고, 더 규모 있는 서비스를 효율적으로 운용할 필요가 있을 땐 쿠버네티스가 있다. 결국 플랫폼에 상관없이 다중 쿠버네티스 클러스터를 다루기 위한 도구인 것이다.

흥미 + 실습 겸 배우기는 했지만 여러 개의 쿠버네티스 클러스터를 운용할 만큼 규모 있는 서비스가 얼마나 될까 싶다. 그렇다고 벤더 종속성을 낮추기 위해 도입하는 것은 배보다 배꼽이 더 큰 결과가 될 것이다. 수십만 명 규모의 사용자를 유치한 상태에서 앞으로도 사용자가 단계적으로 증가한다는 가정(또는 확신) 하에 특정 플랫폼에 종속되지 않으려고 한다는 시나리오라면 충분히 도입할 만하다. 그게 아니라면 운영 비용이 낭비될 것이다.

반응형