Contrail의 구성 요소
Contrail 아키텍처는 네트워크 구성 플레인 및 네트워크 컨트롤 플레인 기능을 수행하는 포드와 네트워크 데이터 플레인 기능을 수행하는 포드로 구성됩니다.
-
네트워크 구성 플레인은 Contrail이 리소스를 관리하고 나머지 Kubernetes 컨트롤 플레인과 상호 작용할 수 있도록 지원하는 기능을 나타냅니다.
-
네트워크 컨트롤 플레인은 Contrail의 모든 기능을 갖춘 SDN 기능을 나타냅니다. BGP를 사용하여 다른 컨트롤러와 통신하고 XMPP를 사용하여 작업자 노드의 분산 데이터 플레인 구성 요소와 통신합니다.
-
네트워크 데이터 플레인은 모든 노드, 특히 워크로드가 상주하는 작업자 노드의 패킷 전송 및 수신 기능을 나타냅니다.
구성 및 컨트롤 플레인 기능을 수행하는 Pod는 Kubernetes 컨트롤 플레인 노드에 상주합니다. 데이터 플레인 기능을 수행하는 Pod는 Kubernetes 컨트롤 플레인 노드와 Kubernetes 작업자 노드 모두에 상주합니다.
표 1 에는 다양한 Contrail 구성 요소가 설명되어 있습니다.
Pod 이름 | 위치 | 설명 | |
---|---|---|---|
구성 플레인 | contrail-k8s-apiserver | 컨트롤 플레인 노드 | 이 포드는 모든 Contrail 리소스를 관리하기 위한 진입점인 집계된 API 서버입니다. 일반 kube-apiserver에 APIService로 등록된다. 일반 kube-apiserver는 처리를 위해 모든 네트워크 관련 요청을 contrail-k8s-apiserver로 전달합니다. Kubernetes 컨트롤 플레인 노드당 하나의 contrail-k8s-apiserver Pod가 있습니다. |
contrail-k8s-controller | 컨트롤 플레인 노드 | 이 포드는 Kubernetes 제어 루프 기능을 수행하여 네트워킹 리소스를 조정합니다. 네트워킹 리소스를 지속적으로 모니터링하여 리소스의 실제 상태가 의도한 상태와 일치하는지 확인합니다. Kubernetes 컨트롤 플레인 노드당 하나의 contrail-k8s-controller 포드가 있습니다. |
|
contrail-k8s-kubemanager | 컨트롤 플레인 노드 | 이 포드는 Kubernetes 리소스와 Contrail 리소스 간의 인터페이스입니다. kube-apiserver에서 서비스 및 네임스페이스와 같은 일반 Kubernetes 리소스의 변경 사항을 감시하고 네트워킹 리소스에 영향을 미치는 모든 변경 사항에 대해 조치를 취합니다. 단일 클러스터 구축에는 Kubernetes 컨트롤 플레인 노드당 하나의 contrail-k8s-kubemanager 포드가 있습니다. 다중 클러스터 구축에서는 모든 분산 워크로드 클러스터에 대해 하나의 contrail-k8s-kubemanager 포드가 추가로 있습니다. |
|
컨트롤 플레인 | contrail-control | 컨트롤 플레인 노드 | 이 Pod는 구성을 작업자 노드에 전달하고 경로 학습 및 배포를 수행합니다. kube-apiserver에서 네트워크 컨트롤 플레인에 영향을 미치는 모든 것을 감시한 다음, BGP 피어 및/또는 vRouter 에이전트(XMPP를 통해)와 적절하게 통신합니다. Kubernetes 컨트롤 플레인 노드당 하나의 contrail-control 포드가 있습니다. |
데이터 플레인 | contrail-vrouter-nodes | 작업자 노드 | 이 포드에는 vRouter 에이전트와 vRouter 자체가 포함되어 있습니다. vRouter 에이전트는 Contrail 컨트롤러와 상호 작용할 때 로컬 vRouter를 대신하여 작동합니다. 노드당 하나의 에이전트가 있습니다. 에이전트는 다음 기능을 수행하기 위해 두 개의 Contrail 컨트롤러와 XMPP 세션을 설정합니다.
vRouter는 함께 배치된 Pod 및 워크로드에 대한 패킷 송수신 기능을 제공합니다. CNI 플러그인 기능을 제공합니다. |
contrail-vrouter-masters | 컨트롤 플레인 노드 | 이 포드는 contrail-vrouter-nodes 포드와 동일한 기능을 제공하지만 컨트롤 플레인 노드에 상주합니다. | |
참고:
네트워크 구성 플레인과 네트워크 컨트롤 플레인을 구성하는 구성 요소를 통칭하여 Contrail 컨트롤러라고 합니다. |
그림 1 은 쿠버네티스 클러스터의 맥락에서 이러한 구성 요소를 보여준다. 명확성을 위해, 그리고 혼란을 줄이기 위해, 그림은 쿠버네티스 컨트롤 플레인 노드의 데이터 플레인 팟(Pod)을 보여주지 않는다.
릴리스 22.2부터 Contrail은 OpenShift에서 실행할 때 기본적으로 자체 etcd 데이터베이스를 사용합니다. 이전 릴리스와 업스트림 Kubernetes에서 실행되는 모든 Contrail 릴리스에서 Contrail은 메인 Kubernetes etcd 데이터베이스를 사용합니다.
kube-apiserver는 클러스터에 대한 쿠버네티스 REST API 호출의 진입점이다. 모든 네트워킹 요청을 Contrail API 호출의 진입점인 contrail-k8s-apiserver로 전달합니다. contrail-k8s-apiserver는 수신 네트워킹 요청을 해당 Contrail 객체에 대한 REST API 호출로 변환합니다. 경우에 따라 이러한 호출로 인해 Contrail 컨트롤러가 하나 이상의 작업자 노드에 있는 vRouter 에이전트로 XMPP 메시지를 전송하거나 BGP 메시지(표시되지 않음)를 다른 컨트롤 플레인 노드 또는 외부 라우터로 전송할 수 있습니다. 이러한 XMPP 및 BGP 메시지는 일반 Kubernetes 노드 간 통신 외부로 전송됩니다.
contrail-k8s-kubemanager(클러스터) 구성 요소는 다중 클러스터 구축에만 있습니다. 다양한 배포 유형에 대한 자세한 내용은 배포 모델을 참조하십시오.
그림 2 는 세 개의 컨트롤 플레인 노드가 상호 작용하는 방식을 보여줍니다. Kubernetes 구성 요소는 REST를 사용하여 서로 통신합니다. Contrail 컨트롤러는 일반 Kubernetes REST 인터페이스 외부에서 iBGP를 사용하여 서로 경로를 교환합니다. 모든 컨트롤 플레인 노드는 클러스터의 다른 모든 컨트롤 플레인 노드와 동일합니다. 모든 작업자 노드는 클러스터의 다른 모든 작업자 노드와 동일합니다. 중복성을 위해 작업자 노드의 vRouter 에이전트는 항상 두 개의 Contrail 컨트롤러와 XMPP 통신을 설정합니다.