[Flannel 오픈소스 파헤치기 #03 ] - tencentVPC

Jisu·2024년 11월 15일
0

배경

클라우드 클럽 Flannel 오픈소스 분석 주차! extension 패키지에 이어 tencentVPC 패키지 분석을 이어서 진행한다.


tencentVPC

Amazon에서 AWS로 클라우드 분야로 사업 확장을 했다면.. 중국의 텐센트 그룹도 Tencent Cloud로 클라우드 사업을 하고 있다. 텐센트 그룹은 알고 있었지만 클라우드 까지 하다니! 세상엔 생각보다 많은 클라우드 기업이 있고 클라우드 시장이 참 크다고 느껴진다.

tencentVPC 패키지는 텐센트 클라우드의 VPC 환경에서 Flannel을 사용하기 위한 로직들이 담긴 패키지이다!

일반적인 쿠버네티스 환경에서 Flannel을 설치한다면 Flannel이 서브넷 할당부터 라우팅까지 모든 것을 직접 관리하게 된다. 그러나 텐센트같은 클라우드 서비스에 Flannel을 설치하면 VPC, 서브넷 등 네트워크 인프라는 클라우드에서 관리하고 Flannel은 해당 서브넷에 라우팅 규칙만 추가하면 된다.

예를 들자면 아래와 같다.

[일반 Flannel (vxlan 등)]
Pod A (10.1.1.2) -> Container Network -> VXLAN -> Container Network -> Pod B (10.1.2.3)

[Tencent VPC Flannel]
Pod A (10.1.1.2) -> VPC Route Table -> Node B -> Pod B (10.1.2.3)
[초기 상태]
VPC: 10.0.0.0/16
Node A: 10.0.1.10
Node B: 10.0.1.20

[Flannel 설정 후]
Node A가 192.168.1.0/24 서브넷 할당받음
↓
VPC 라우트 테이블에 규칙 추가:
Destination: 192.168.1.0/24 → Gateway: 10.0.1.10 (Node A의 IP)

그래서 tencentVPC 패키지에서 TencentVPCBackend를 만들고 RegisterNetwork 라는 메소드를 통해 등록하는게 거의 전부이다. 전반적인 코드 흐름은 아래와 같다

[TencentVPC 백엔드 초기화]
       ↓
[네트워크 등록 과정]
     |  →  1. VPC 설정 파싱 (AccessKeyID, AccessKeySecret)
     |  →  2. 서브넷 매니저로부터 리스 획득
     |  →  3. 텐센트 클라우드 메타데이터 획득
            - VM Region
            - VPC ID
     ↓
[라우팅 테이블 설정]
     |  →  1. VPC의 라우팅 테이블 조회
     |  →  2. 기존 라우트 확인
     |  →  3. 필요시 새 라우트 생성
            - 대상: 할당받은 서브넷
            - 게이트웨이: 현재 노드의 IP

RegisterNetwork

핵심이 되는 함수이다.

func (be *TencentVpcBackend) RegisterNetwork(ctx context.Context, wg *sync.WaitGroup, config *subnet.Config) (backend.Network, error) {

실제 코드를 보면 다소 직관적인데 아래와 같은 절차를 따른다.

  1. VPC 설정 파싱: 인증 정보 (access key, secret key) 서브넷 정보를 가져온다
  2. subnet 할당받기: Flannel의 서브넷 매니저를 통해 서브넷을 할당받는다. 이 때 도 역시 AcquireLease 메소드를 사용!
  3. 라우팅 테이블 관리: VPC 라우팅 테이블을 조회하고, 필요한 경우 새로운 라우팅 규칙을 생성
  4. 네트워크 반환: 설정이 완료되면 SimpleNetwork 객체를 반환

요약하면 Tencent Cloud VPC의 라우팅 테이블에 Flannel 서브넷 → 노드 게이트웨이 규칙을 추가하여.. 파드가 다른 파드로 패킷을 보낼 수 있도록 만들어준다!

profile
기술 공유를 즐기는 DevOps Engineer 장지수입니다.

0개의 댓글