호스트 라우트
Neutron 서브넷에 "host routes"를 설정하면 인스턴스 라우팅 테이블에 DHCP로 라우트가 주입돼요. Calico에서는 host route의 next hop이 반드시 로컬 하이퍼바이저를 가리켜야 한다는 규칙이 있는데, 이 문서는 그 이유와 멀티 NIC 인스턴스에서의 활용법을 다뤄요.
출처: 문서
본문
Neutron은 서브넷에 "host routes"를 설정할 수 있게 해 주고, 각 host route는 다음으로 이루어져요
- IP 목적지 프리픽스
- 그 프리픽스로 라우팅하기 위한 next hop IP.
인스턴스가 시작되어 그 서브넷에서 IP를 받으면, Neutron이 DHCP를 통해 인스턴스의 라우팅 테이블에 그 라우트들이 설정되도록 준비해요.
Calico에서는 host route의 next hop IP가 로컬 호스트여야 해요
Calico는 host routes를 지원하지만, host route는 next hop IP가 로컬 하이퍼바이저를 나타낼 때만 Calico와 일관된다는 점이 중요해요. 그 이유는 Calico 설정에서 로컬 하이퍼바이저가 인스턴스의 모든 데이터를 항상 라우팅하기 때문에, 어떤 목적지로 가는 데이터에 대한 next hop IP도 항상 하이퍼바이저이기 때문이에요. 인스턴스의 라우팅 테이블에 다른 next hop IP를 가진 라우트가 있으면, 그 next hop IP 주소는 사실상 무시되고 데이터는 암시된 라우터를 통과하지 않을 가능성이 높아요; 대신 데이터는 먼저 하이퍼바이저로 가고, 그다음 하이퍼바이저의 라우팅 테이블이 그 지점부터 다음 IP 홉을 결정해요.
구체적으로, 각 host route의 next hop IP는 원하는 인스턴스 NIC가 붙어 있고 그 NIC가 IP 주소를 받은 서브넷의 게이트웨이 IP여야 해요 — 여기서 '원하는 인스턴스 NIC'란 그 host route에 대한 데이터가 통과하기를 원하는 NIC를 뜻해요. Calico의 사용 방식에서는 서브넷 게이트웨이 IP가 로컬 하이퍼바이저를 나타내요. 인스턴스가 보내는 데이터는 항상 그곳으로 라우팅되기 때문이에요.
참고: Calico는 그 서브넷이 사용되는 모든 컴퓨트 호스트에서, 로컬 컴퓨트 호스트를 나타내는 데 서브넷 게이트웨이 IP를 사용함으로써 불필요한 IP 사용을 피해요. 처음에는 이상하게 들릴 수 있지만, 게이트웨이 IP 주소로 데이터가 전송되거나 수신되는 일이 없기 때문에 동작해요; 게이트웨이 IP는 인스턴스에서 컴퓨트 호스트로 가는 첫 IP 홉의 next hop 주소로만 쓰이고, 이후 컴퓨트 호스트가 자신의 라우팅 테이블에 따라 데이터를 필요한 곳으로 다시 라우팅해요. 이는 곧 게이트웨이 IP 주소가 일반적으로 이해되는 의미에서 실제로 각 인스턴스의 기본 게이트웨이 역할을 한다는 뜻이기도 해요.
Calico에서 host routes는 언제 유용할까요?
인스턴스에 NIC가 여러 개 있고, 특정 프리픽스로 가는 데이터에 어떤 NIC를 사용할지 지정하고 싶을 때 host routes가 유용해요.
인스턴스에 NIC가 여러 개 있으면, 그중 하나의 NIC를 통해서만 기본 라우트를 가져야 하고, 다른 NIC를 통해서는 비기본(non-default) 라우트로 적절한 트래픽을 보내야 해요. Neutron host routes를 사용하면 그 비기본 라우트를 만들 수 있어요; 또는 인스턴스 안에서 수동으로 설정할 수도 있어요.
예를 들어 인스턴스의 eth0이 게이트웨이 10.65.0.1인 서브넷에, eth1이 게이트웨이 11.8.0.1인 서브넷에 붙어 있고, 기본 라우트가 eth0을 통한다고 해 봐요. 그러면 다음 같은 host route를
11.11.0.0/16,11.8.0.1
서브넷에 설정해서, 11.11.0.0/16으로 가는 데이터가 eth1을 통해 나가야 한다고 말할 수 있어요. 인스턴스의 라우팅 테이블은 이렇게 될 거예요:
default via 10.65.0.1 dev eth0
10.65.0.0/24 dev eth0
11.8.0.0/24 dev eth1
11.11.0.0/16 via 11.8.0.1 dev eth1
인스턴스에 네트워크 연결이 하나뿐이라서 NIC가 하나뿐이라면, host routes는 데이터 라우팅 방식에 어떤 영향도 줄 수 없어요. 그래서 설정해도 도움이 되지 않아요 (해롭지는 않지만). 인스턴스의 라우팅 테이블이 무슨 말을 하든, 데이터는 유일한 NIC로 나가야 하고, 항상 호스트에서 레이어 2가 종단되어 호스트의 라우팅 테이블에 따라 재라우팅돼요. 호스트의 라우팅 테이블이 인스턴스가 보내고 싶어 하는 모든 목적지를 커버해야 한다는 요건이 있는데, host routes는 그에 아무것도 더하지 않아요.
더 알아보기 (Learn more)
host route의 next hop은 항상 서브넷 게이트웨이 IP, 즉 로컬 하이퍼바이저를 가리켜야 해요. 멀티 NIC 인스턴스에서 특정 프리픽스를 특정 NIC로 보낼 때 유용하고, NIC가 하나뿐이라면 설정해도 효과가 없어요.