Calico가 해석하는 Neutron API 호출
OpenStack 배포에서 Calico는 특정 Neutron API 동작을 수신해 해석한 뒤, 그 결과를 네트워크에 반영해요. Neutron이 허용하는 기능의 상당 부분보다 훨씬 단순한 순수 L3 모델이라는 점 때문에, 모든 호출이 다른 백엔드에서와 똑같이 동작하지는 않아요. 이 문서는 네트워크, 서브넷, 포트, 보안 그룹, Horizon 동작까지 각 API 호출이 네트워크에 어떤 영향을 주는지 하나씩 정리해요.
출처: 문서
본문
OpenStack 배포에서 동작할 때 Calico는 특정 Neutron API 동작을 수신하고 해석해, 그 내용을 네트워크에 프로그래밍해요. 그런데 Calico는 Neutron이 일반적으로 허용하는 것 중 상당 부분보다 훨씬 단순하고(IP 주소 지정과 연결성 참고) 순수 레이어 3 모델이기 때문에(Calico 데이터 경로 참고), 모든 Neutron API 호출이 다른 백엔드에서처럼 동일한 효과를 내지는 않아요.
이 문서는 전체 범위의 Neutron API 호출을 상세히 다루고, 각 호출이 네트워크에 주는 효과를 설명해요. Neutron API가 사용하는 다양한 객체를 나열하는 기준으로 OpenStack의 Networking API v2.0 문서를 사용해요. Neutron이 일반적으로 기대하는 바에 대해서는 해당 문서를 참고하세요.
추가로 이 문서에는 Horizon 동작을 간단히 다루는 섹션도 있어요.
네트워크
네트워크는 Neutron의 기본 네트워킹 개념이에요. Neutron 네트워크는 기능상 물리 네트워크와 거의 동등하게 간주돼요. 즉, 단일 레이어 2 연결 그래프를 정의해요.
바닐라 Neutron에서는 네트워크가 언더레이 네트워크에 캡슐화되거나 직접 매핑되는 등 다양한 방식으로 언더레이에 매핑될 수 있어요.
일반적으로 Neutron 네트워크는 모든 테넌트가 만들 수 있어요. 관리자 테넌트는 보통 플로팅 IP를 제공하기 위해 언더레이 물리 네트워크에 직접 매핑되는 공용 Neutron 네트워크를 만들고, 다른 테넌트는 필요에 따라 자신만의 프라이빗 Neutron 네트워크를 만들어요.
Calico에서는 모든 트래픽이 L3이고 라우팅되기 때문에, L2 연결 도메인으로서의 Neutron 네트워크 역할은 유용하지 않아요. 그래서 Calico에서 Neutron 네트워크는 단순히 서브넷을 담는 컨테이너예요. Calico 배포에서 Neutron 네트워크를 구성하는 운영자를 위한 베스트 프랙티스는 OpenStack 설정에 있어요.
비관리자 테넌트가 자신만의 Neutron 네트워크를 만드는 것은 유용하지 않아요. Calico는 비관리자 테넌트도 Neutron 네트워크를 만들도록 허용하지만, 일반적으로 관리자는 Neutron 쿼터를 사용해 비관리자 테넌트가 이렇게 하지 못하게 막는 게 좋아요.
API에서의 네트워크 생성 이벤트는 Calico에서 no-op 이벤트예요. 성공(2XX) 응답은 보내지만 실제 프로그래밍은 일어나지 않아요.
확장 속성: 프로바이더 네트워크
Neutron 프로바이더 네트워크는 Calico 배포에서 사용되지 않아요. 프로바이더 네트워크 확장 속성을 설정해도 효과가 없어요. Neutron 프로바이더 네트워크가 왜 필요 없는지는 IP 주소 지정과 연결성을 참고하세요.
서브넷
Neutron 서브넷은 Neutron 네트워크의 자식 객체예요. 바닐라 Neutron에서 서브넷은 하나의 Neutron 네트워크에 연결된 IP 주소와 기타 네트워크 구성(예: DNS 서버)의 모음이에요. 하나의 Neutron 네트워크에 여러 Neutron 서브넷이 연결될 수 있고, 각 Neutron 서브넷은 IPv4 또는 IPv6 주소 블록을 나타내요.
Calico 배포에서 Neutron 서브넷을 구성하는 베스트 프랙티스는 OpenStack 설정에 있어요.
Calico에서는 Neutron 서브넷의 이런 역할이 그대로 유지돼요. Neutron 서브넷에 연결된 모든 속성은 다음을 제외하면 유지되고 의미를 가져요.
-
host_routes컴퓨트 노드가 VM을 빠져나간 트래픽을 즉시 라우팅하기 때문에 이것들은 효과가 없어요.
포트
바닐라 Neutron에서 포트는 VM에서 단일 레이어 2 Neutron 네트워크로의 연결을 나타내요. Calico 배포에서는 이 객체의 의미가 바뀌어요. 대신 포트는 VM에서 Calico가 Neutron 안에 구축한 공유 레이어 3 네트워크로의 연결이에요.
다음을 제외하면 포트의 모든 속성은 평소처럼 동작해요.
-
network_id네트워크 ID는 여전히 포트가 붙는 Neutron 네트워크를 결정하고, 따라서 어떤 Neutron 서브넷에 배치되는지도 여전히 결정해요. 하지만 위의 안내대로, 포트가 배치되는 Neutron 네트워크는 배포 내 어느 머신과 통신할 수 있는지에는 영향을 주지 않아요.
확장 속성: 포트 바인딩 속성
binding:host-id 속성은 평소처럼 동작해요. 다른 속성에는 다음 안내가 적용돼요.
-
binding:profileCalico에서는 사용되지 않아요.
-
binding:vnic_type이 필드를 사용한다면 반드시
normal로 설정해야 해요. 다른 값으로 설정하면 Calico가 올바르게 동작하지 않아요!
쿼터
Neutron 쿼터는 변함없이 동작해요.
대부분의 배포에서는 거의 모든 Neutron 객체에 대해 비관리자 테넌트의 쿼터를 0으로 설정하는 것을 권해요. 자세한 내용은 OpenStack 설정을 참고하세요.
보안 그룹
바닐라 OpenStack에서 보안 그룹은 개별 포트에 패킷 필터링 처리를 제공해요. 포트가 발생시킬 수 있는 트래픽을 제한하는 데 쓸 수 있어요.
Calico에서 보안 그룹은 동일한 기능을 모두 가지고 있어요. 게다가 바닐라 OpenStack에서 Neutron 네트워크가 제공하던 연결 제한 기능까지 담당해요.
보안 그룹의 모든 속성은 Calico에서도 변함없어요.
플로팅 IP
플로팅 IP는 지원돼요. 자세한 내용은 플로팅 IP를 참고하세요.
Neutron 라우터
Calico는 Neutron 데이터 모델에 Router 객체가 있든 없든, 모든 Neutron 네트워크 사이에 기본적으로 연결성을 제공해요. 더 자세한 설명은 상세 시맨틱을 참고하세요. 특정 Neutron 네트워크의 격리가 필요하다면 보안 그룹 규칙으로 표현하는 것을 권해요.
QoS
Calico for OpenStack은 일부 Neutron QoS 정책 필드를 구현해요. 대역폭 제한 규칙의 max_kbps와 max_burst_kbps 필드, 패킷 레이트 제한 규칙의 max_kpps 필드가 그 대상이에요. Calico는 이 규칙들의 direction 필드도 존중하기 때문에, ingress와 egress 방향에 대해 이 한도를 각각 독립적으로 설정할 수 있어요.
SECONDARY:
max_burst_kbps가 버스트 *비율(rate)*을 설정하려는 것인지 버스트 *크기(size)*를 설정하려는 것인지는 불명확해요. Calico는 이것을 버스트 비율로 해석하고, 버스트 크기 구성을 위한neutron.conf필드는 존중해요.
이 외에도 새로운 Calico Neutron 드라이버 설정(클러스터 전역, neutron.conf에 설정)이 있어요.
[calico] max_ingress_connections_per_port— Neutron 포트별 최대 ingress 연결 수를 제한해요.[calico] max_egress_connections_per_port— Neutron 포트별 최대 egress 연결 수를 제한해요.[calico] ingress_burst_kbits— 0이 아니라면, ingress 방향에서 peakrate 시점에 허용되는 최대 버스트를 구성해요.[calico] egress_burst_kbits— 0이 아니라면, egress 방향에서 peakrate 시점에 허용되는 최대 버스트를 구성해요.[calico] ingress_minburst_bytes— 0이 아니라면, ingress 방향에서 peakrate 데이터의 최소 버스트 크기를 구성해요.[calico] egress_minburst_bytes— 0이 아니라면, egress 방향에서 peakrate 데이터의 최소 버스트 크기를 구성해요.
Load Balancer as a Service
Load Balancer as a Service(LBaaS)는 Calico 네트워크에서 동작하지 않아요. 생성하려는 시도는 실패해요.
SECONDARY: 향후 Calico 버전에서 LBaaS가 동작할 가능성은 있어요. 이 항목을 지켜봐 주세요.
Horizon
Horizon은 Neutron API의 옵션을 반영한 다양한 프로비저닝 동작을 제공해요. 이 섹션은 그것들을 나열하고, 사용할 수 있는지 여부와 세부 주의점이 있는 경우 그 내용을 알려줘요.
세부 내용 대부분은 이 섹션에 담지 않고 위의 관련 Neutron API 섹션에 두었어요. 더 자세한 내용은 해당 섹션을 참고하세요.
섹션: Project
탭: Compute -> Instances
인스턴스를 띄울 때는 네트워크가 아니라 보안 그룹이 도달 가능성을 결정한다는 점을 기억해요. 외부 IP가 필요한지 내부 IP가 필요한지에 따라 네트워크를 고르고, 클라우드에서 통신하고 싶은 대상 머신에 따라 보안 그룹을 고르면 돼요. 자세한 내용은 IP 주소 지정과 연결성을 참고하세요.
탭: Compute -> Access & Security
위에서 언급했듯이, 각 테넌트는 자신의 연결성이 적절히 구성되도록 보안 그룹을 설정해야 해요.
탭: Network -> Network Topology
'Create Network' 버튼에 대해서는 네트워크 섹션을, 'Create Router' 버튼에 대해서는 레이어 3 라우팅 섹션을 참고하세요.
탭: Network -> Networks
네트워크와 서브넷에 대해서는 네트워크와 서브넷 섹션을 참고하세요.
탭: Network -> Routers
Calico 네트워크에서 라우터는 쓸모가 없기 때문에 테넌트가 라우터를 만들지 못하게 해야 해요. 자세한 내용은 레이어 3 라우팅을 참고하세요.
섹션: Admin
탭: System Panel -> Networks
일반 운영 과정에서 관리자가 네트워킹 구성을 변경할 일은 없을 거예요. 다만 초기 네트워크 설정 때는 이 패널을 사용해 변경할 수 있어요. 설정 방법의 세부 내용은 IP 주소 지정과 연결성을 참고하세요.
탭: System Panel -> Routers
관리자도 라우터를 만들면 안 돼요. Calico 네트워크에서 라우터는 쓸모가 없거든요. 자세한 내용은 레이어 3 라우팅을 참고하세요.
더 알아보기 (Learn more)
Calico는 Neutron의 여러 API를 순수 L3 모델에 맞게 재해석해요. 네트워크는 서브넷의 컨테이너로, 보안 그룹은 연결 제한의 주역으로 동작한다는 점, 그리고 라우터와 LBaaS는 쓸모가 없다는 점이 핵심이에요.