Contrail 구성 요소
Contrail 아키텍처는 네트워크 구성 플레인 및 네트워크 컨트롤 플레인 기능을 수행하는 포드와 네트워크 데이터 플레인 기능을 수행하는 포드로 구성됩니다.
-
네트워크 구성 플레인은 Contrail이 리소스를 관리하고 다른 Kubernetes 컨트롤 플레인과 상호 작용할 수 있도록 하는 기능을 말합니다.
-
네트워크 컨트롤 플레인은 Contrail의 완전한 기능을 갖춘 SDN 기능을 나타냅니다. BGP를 사용하여 다른 컨트롤러 및 XMPP와 통신하여 작업자 노드의 분산 데이터 플레인 구성 요소와 통신합니다.
-
네트워크 데이터 플레인은 모든 노드, 특히 워크로드가 상주하는 작업자 노드의 패킷 송수신 기능을 나타냅니다.
구성 및 컨트롤 플레인 기능을 수행하는 포드는 Kubernetes 컨트롤 플레인 노드에 있습니다. 데이터 플레인 기능을 수행하는 포드는 Kubernetes 컨트롤 플레인 노드와 Kubernetes 작업자 노드 모두에 있습니다.
표 1 에서는 다양한 Contrail 구성 요소를 설명합니다.
Pod 이름 | 위치 | 설명 | |
---|---|---|---|
구성 플레인 | Contrail-k8s-apiserver | 컨트롤 플레인 노드 | 이 포드는 모든 Contrail 리소스를 관리하기 위한 진입점인 어그리게이션 API 서버입니다. APIService로 정규 Kube-apiserver에 등록되었습니다. 일반 Kube-apiserver는 모든 네트워크 관련 요청을 처리할 수 있도록 Contrail-k8s-apiserver로 전달합니다. Kubernetes 컨트롤 플레인 노드당 하나의 contrail-k8s-apiserver pod가 있습니다. |
Contrail-k8s 컨트롤러 | 컨트롤 플레인 노드 | 이 포드는 네트워킹 리소스를 조정하기 위해 Kubernetes 제어 루프 기능을 수행합니다. 네트워킹 리소스를 지속적으로 모니터링하여 리소스의 실제 상태가 의도한 상태와 일치하는지 확인합니다. Kubernetes 컨트롤 플레인 노드당 하나의 contrail-k8s-controller pod가 있습니다. |
|
Contrail-k8s-kubemanager | 컨트롤 플레인 노드 | 이 포드는 Kubernetes 리소스와 Contrail 리소스 간의 인터페이스입니다. 서비스 및 네임스페이스와 같은 정규 Kubernetes 리소스의 변경 사항을 시청하고 네트워킹 리소스에 영향을 미치는 변경 사항에 대해 조치를 강구합니다. 단일 클러스터 구축에는 Kubernetes 컨트롤 플레인 노드당 하나의 contrail-k8s-kubemanager 포드가 있습니다. 다중 클러스터 구축에는 모든 분산 워크로드 클러스터에 대해 Contrail-k8s-kubemanager 포드가 하나 더 있습니다. |
|
컨트롤 플레인 | Contrail-Control | 컨트롤 플레인 노드 | 이 포드는 구성을 작업자 노드에 전달하고 경로 학습 및 배포를 수행합니다. Kube-apiserver가 네트워크 컨트롤 플레인에 영향을 미치는 것을 지켜본 다음 BGP 피어 및/또는 vRouter 에이전트(XMPP를 통해)와 적절히 통신합니다. Kubernetes 컨트롤 플레인 노드당 하나의 Contrail-control pod가 있습니다. |
데이터 플레인 | Contrail-vrouter-nodes | 작업자 노드 | 이 포드에는 vRouter 에이전트와 vRouter 자체가 포함됩니다. vRouter 에이전트는 Contrail 컨트롤러와 상호 작용할 때 로컬 vRouter를 대신하여 작동합니다. 노드당 하나의 에이전트가 있습니다. 에이전트는 두 개의 Contrail 컨트롤러와 함께 XMPP 세션을 설정하여 다음 기능을 수행합니다.
vRouter는 공동 위치 포드 및 워크로드에 대한 패킷 송수신 기능을 제공합니다. CNI 플러그인 기능을 제공합니다. |
Contrail-vrouter-master | 컨트롤 플레인 노드 | 이 포드는 contrail-vrouter-nodes pod와 동일한 기능을 제공하지만 컨트롤 플레인 노드에 있습니다. | |
참고:
네트워크 구성 플레인과 네트워크 컨트롤 플레인을 구성하는 구성 요소를 Contrail 컨트롤러라고 합니다. |
그림 1 은 Kubernetes 클러스터의 맥락에서 이러한 구성 요소를 보여줍니다. 명료하고 혼란을 줄이기 위해 이 그림은 Kubernetes 컨트롤 플레인 노드의 데이터 플레인 포드를 표시하지 않습니다.

릴리스 22.2부터 Contrail은 OpenShift에서 실행될 때 기본적으로 자체적인 등 데이터베이스를 사용합니다. 이전 릴리스 및 업스트림 Kubernetes에서 실행되는 모든 Contrail 릴리스에서 Contrail은 기본 Kubernetes 등 데이터베이스를 사용합니다.
Kube-apiserver는 클러스터에 대한 Kubernetes REST API 호출의 진입점입니다. Contrail API 호출의 진입점인 Contrail-k8s-apiserver로 모든 네트워킹 요청을 지시합니다. Contrail-k8s-apiserver는 수신 네트워킹 요청을 REST API 호출로 변환하여 해당 Contrail 객체로 변환합니다. 어떤 경우에는 이러한 호출로 인해 Contrail 컨트롤러가 하나 이상의 작업자 노드의 vRouter 에이전트에 XMPP 메시지를 전송하거나 BGP 메시지(표시되지 않음)를 다른 컨트롤 플레인 노드 또는 외부 라우터로 전송할 수 있습니다. 이러한 XMPP 및 BGP 메시지는 일반 Kubernetes 노드 투 노드 통신 외부에서 전송됩니다.
Contrail-k8s-kubemanager(클러스터) 구성 요소는 다중 클러스터 구축에만 존재합니다. 다양한 유형의 구축에 대한 자세한 내용은 구축 모델을 참조하십시오.
그림 2는 컨트롤 플레인 노드 3개가 상호 작용하는 방식을 보여줍니다. Kubernetes 구성 요소는 REST를 사용하여 서로 통신합니다. Contrail 컨트롤러는 일반 Kubernetes REST 인터페이스 외부의 iBGP를 사용하여 경로를 교환합니다. 모든 컨트롤 플레인 노드는 클러스터의 다른 모든 컨트롤 플레인 노드와 동일합니다. 모든 작업자 노드는 클러스터의 다른 모든 작업자 노드와 동일합니다. 이중화를 위해 작업자 노드의 vRouter 에이전트는 항상 두 개의 Contrail 컨트롤러와 XMPP 통신을 설정합니다.
