본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

플로팅 IP

원문 보기 위키 갱신

Calico는 플로팅 IP를 지원해요. Neutron 테넌트 네트워크에 플로팅 IP를 할당하려면 라우터 게이트웨이, provider 네트워크, 서브넷 준비처럼 Neutron의 표준 데이터 모델 패턴을 그대로 따르면 돼요. 이 문서는 예시 명령 시퀀스로 플로팅 IP 설정 과정을 보여 줘요.

출처: 문서

본문

Calico에는 플로팅 IP 지원이 포함되어 있어요.

플로팅 IP를 설정하려면, 일반적인 Neutron에서와 같은 패턴의 Neutron 데이터 모델 오브젝트가 필요해요. 즉:

  • 플로팅 IP의 대상이 될, 인스턴스가 붙어 있는 테넌트 네트워크

  • 그 테넌트 네트워크가 연결된 Neutron 라우터

  • 라우터의 게이트웨이로 설정되고(예: neutron router-gateway-set으로), router:external True가 지정된 provider 네트워크. 그리고 플로팅 IP가 할당될 CIDR을 가진 서브넷

  • provider 네트워크 서브넷에서 할당되어, 테넌트 네트워크에 붙은 인스턴스로 매핑되는 플로팅 IP.

예를 들면:

  1. 테넌트 네트워크와 서브넷을 만들어요.

    neutron net-create --shared calico
    neutron subnet-create --gateway 10.65.0.1 --enable-dhcp --ip-version 4 --name calico-v4 calico 10.65.0.0/24
    
  2. 그 네트워크에서 VM을 부팅해요.

    nova boot [...]
    
  3. Neutron 포트 ID를 찾아요.

    neutron port-list
    
  4. 외부 네트워크와 서브넷을 만들어요; 플로팅 IP가 여기서 할당돼요.

    neutron net-create public --router:external True
    neutron subnet-create public 172.16.1.0/24
    
  5. 테넌트 네트워크와 외부 네트워크를 연결하는 라우터를 만들어요.

    neutron router-create router1
    neutron router-interface-add router1 <tenant-subnet-id>
    neutron router-gateway-set router1 public
    
  6. 플로팅 IP를 만들고 대상 VM에 연결(associate)해요.

    neutron floatingip-create public
    neutron floatingip-associate <floatingip-id> <target-VM-port-id>
    

    그러면 Calico 에이전트들이 플로팅 IP가 인스턴스의 컴퓨트 호스트로 라우트되고, 이후 인스턴스의 고정 IP 주소로 DNAT되도록 준비해요.

  7. 컴퓨트 노드에서 다음 명령을 실행해요.

    ip r
    

    라우팅 테이블이 반환될 거예요.

    default via 10.240.0.1 dev eth0
    10.65.0.13 dev tap9a7e0868-da  scope link
    10.65.0.14 via 192.168.8.4 dev l2tpeth8-3  proto bird
    10.65.0.23 via 192.168.8.4 dev l2tpeth8-3  proto bird
    10.240.0.1 dev eth0  scope link
    172.16.1.3 dev tap9a7e0868-da  scope link
    192.168.8.0/24 dev l2tpeth8-3  proto kernel  scope link  src 192.168.8.3
    192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1
    
  8. iptables를 확인하려면 다음 명령을 실행해요.

    sudo iptables -L -n -v -t nat
    

    다음과 비슷한 출력이 반환될 거예요.

    [...]
    Chain felix-FIP-DNAT (2 references)
     pkts bytes target     prot opt in     out     source               destination
        0     0 DNAT       all  --  *      *       0.0.0.0/0            172.16.1.3           to:10.65.0.13
    
    Chain felix-FIP-SNAT (1 references)
     pkts bytes target     prot opt in     out     source               destination
        0     0 SNAT       all  --  *      *       10.65.0.13           10.65.0.13           to:172.16.1.3
    
    Chain felix-OUTPUT (1 references)
     pkts bytes target     prot opt in     out     source               destination
        1    60 felix-FIP-DNAT  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    
    Chain felix-POSTROUTING (1 references)
     pkts bytes target     prot opt in     out     source               destination
        1    60 felix-FIP-SNAT  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    
    Chain felix-PREROUTING (1 references)
     pkts bytes target     prot opt in     out     source               destination
        0     0 felix-FIP-DNAT  all  --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 DNAT       tcp  --  *      *       0.0.0.0/0            169.254.169.254      tcp dpt:80 to:127.0.0.1:8775
    [...]
    

더 알아보기 (Learn more)

OpenStack 플로팅 IP는 provider 네트워크 서브넷에서 할당되어 인스턴스로 DNAT돼요. Calico 에이전트가 라우팅과 NAT 체인(felix-FIP-DNAT/SNAT)을 자동으로 준비해 주니, ip r과 iptables로 결과를 검증하면 돼요.