본문 바로가기
Linux/OpenShift

RHOCP) OVN-Kubernetes Architecture

by LILO 2023. 7. 31.
반응형

INTRO

RHOCP(RedHat OpenShift Container Platform)에서 기본으로 제공하는 CNI는 OVN-Kubernetes입니다.

이 글에서는 OVN-Kubernetes에 대한 내용을 소개드립니다.

OVN-Kubernetes에 대한 자세한 내용은 아래의 문서를 참고 바랍니다.

 

About the OVN-Kubernetes network plugin - OVN-Kubernetes network plugin | Networking | OpenShift Container Platform 4.13

The OVN-Kubernetes network plugin is an open-source, fully-featured Kubernetes CNI plugin that uses Open Virtual Network (OVN) to manage network traffic flows. OVN is a community developed, vendor-agnostic network virtualization solution. The OVN-Kubernete

docs.openshift.com

 

 

Overlay Network란?

OVN-Kubernetes가 OVN을 기반으로 Overlay Network 구현을 제공하는 기술이어서 Overlay Network 용어를 간단하게 알아보려고 합니다.

Overlay Network란 물리적 네트워크(Underlay Network) 위에 성립되는 가상의 네트워크입니다.

Underlay Network 환경에서는 확장성이나 신규 장비 추가 등 어려움을 겪고 있었는데 이러한 한계를 가상화된 Tunnel을 통해 데이터를 전송하는 방식인 Overlay Network 기술로 극복할 수 있었습니다. (Ex. VLAN --> VXLAN)

Overlay Network는 아래의 그림과 같이 물리적 네트워킹을 기반으로 가상화하는 것이기 때문에 물리적 인프라가 구성되어 있어야 합니다.

https://static.packt-cdn.com/products/9781785888304/graphics/B04901_07_03.jpg

 

 

 

 

OVN-Kubernetes이란?

OVN-Kubernetes CNI 플러그인은 OVN을 기반으로 Overlay Network 구현을 제공해 줍니다. OVN은 선언된 네트워크 구성을 구현하기 위해 각 node에 OVS(Open vSwitch)를 구성합니다.

※ CNI(Container Network Interface): 컨테이너의 Network Interface를 설정할 수 있도록 도와주는 라이브러리 등으로 구성  (https://github.com/containernetworking/cni)
※ OVN(Open Virtual Network): OVS에 대한 가상 네트워킹을 제공하는 오픈소스 SDN
  ( OVN을 이용하여 스위치, 라우터 등 네트워크를 구성할 수 있음 )
※ OVS(OpenVSwitch): Virtual 스위치로 VM들 간의 트래픽 통합, 격리, 보안을 위한 기능을 제공하는 SW

OVN-Kubernetes는 각 노드에서 데몬을 실행하고 모든 노드에 실행되는 DB 및 OVN Controller 용도의 daemonset이 존재합니다. 이 부분을 확인하기 위해 openshit-ovn-kubernetes 네임스페이스에 실행중인 모든 리소스를 조회합니다.

ovnkube-master, ovnkube-node라는 daemonset이 실행되고 있습니다.

# oc get all,ep,cm -n openshift-ovn-kubernetes
NAME                       READY   STATUS    RESTARTS       AGE
pod/ovnkube-master-6n5xq   6/6     Running   7 (4d3h ago)   5d9h
pod/ovnkube-master-7z7sc   6/6     Running   10             5d9h
pod/ovnkube-master-rhxsh   6/6     Running   7              5d9h
pod/ovnkube-node-gmjrk     5/5     Running   9 (4d3h ago)   5d9h
pod/ovnkube-node-j4kpl     5/5     Running   9 (4d3h ago)   5d9h
pod/ovnkube-node-jqn7k     5/5     Running   1 (2d ago)     2d
pod/ovnkube-node-lswzh     5/5     Running   1 (2d ago)     2d
pod/ovnkube-node-lvlnl     5/5     Running   9 (4d3h ago)   5d9h
pod/ovnkube-node-njnpf     5/5     Running   1 (2d ago)     2d
pod/ovnkube-node-qgwlj     5/5     Running   9 (4d3h ago)   5d8h
pod/ovnkube-node-zbx2t     5/5     Running   9 (4d3h ago)   5d8h

NAME                            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
service/ovn-kubernetes-master   ClusterIP   None         <none>        9102/TCP            5d9h
service/ovn-kubernetes-node     ClusterIP   None         <none>        9103/TCP,9105/TCP   5d9h
service/ovnkube-db              ClusterIP   None         <none>        9641/TCP,9642/TCP   5d9h

NAME                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                                                 AGE
daemonset.apps/ovnkube-master   3         3         3       3            3           beta.kubernetes.io/os=linux,node-role.kubernetes.io/master=   5d9h
daemonset.apps/ovnkube-node     8         8         8       8            8           beta.kubernetes.io/os=linux                                   5d9h

NAME                              ENDPOINTS                                                               AGE
endpoints/ovn-kubernetes-master   192.168.56.32:9102,192.168.56.33:9102,192.168.56.34:9102                5d9h
endpoints/ovn-kubernetes-node     192.168.56.32:9105,192.168.56.33:9105,192.168.56.34:9105 + 13 more...   5d9h
endpoints/ovnkube-db              192.168.56.32:9642,192.168.56.33:9642,192.168.56.34:9642 + 3 more...    5d9h

NAME                                 DATA   AGE
configmap/control-plane-status       1      5d9h
configmap/kube-root-ca.crt           1      5d9h
configmap/openshift-service-ca.crt   1      5d9h
configmap/ovn-ca                     1      5d9h
configmap/ovnkube-config             1      5d9h
configmap/signer-ca                  1      5d9h

ovnkube-master, ovnkube-node라는 daemonset이 실행되고 있습니다.

이 demonset에 대한 pod가 어떠한 역할을 하는지 파악하기 위해 불특정 node 1개에 접속하여 crictl ps 명령을 통해 OVN을 이용한 Container가 무엇인지 확인합니다.

ovn-controller, db(sbdb, nbdb) 등이 실행중인 것으로 확인되었습니다.

<ControlPlane(master) node>
# ssh core@master1 "sudo crictl ps -a |egrep 'POD|Running' |egrep 'POD|ovn'"
CONTAINER           IMAGE                                                                                                                    CREATED             STATE               NAME                                          ATTEMPT             POD ID              POD
50c21a746d392       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             ovnkube-master                                2                   25e915db9cc03       ovnkube-master-6n5xq
dd9bb0e0fab49       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             ovn-dbchecker                                 1                   25e915db9cc03       ovnkube-master-6n5xq
47f61a947b11b       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             sbdb                                          1                   25e915db9cc03       ovnkube-master-6n5xq
9b7512aa0a4c9       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             ovn-acl-logging                               3                   c2b231fef79fb       ovnkube-node-j4kpl
a5ed3036d01c9       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             ovn-controller                                3                   c2b231fef79fb       ovnkube-node-j4kpl
684f143a80fdc       2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf                                                         3 days ago          Running             kube-rbac-proxy                               1                   25e915db9cc03       ovnkube-master-6n5xq
643951a19ec89       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             ovnkube-node                                  1                   c2b231fef79fb       ovnkube-node-j4kpl
ac3bbc08b7217       2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf                                                         3 days ago          Running             kube-rbac-proxy-ovn-metrics                   1                   c2b231fef79fb       ovnkube-node-j4kpl
f4382a2422aa5       2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf                                                         3 days ago          Running             kube-rbac-proxy                               1                   c2b231fef79fb       ovnkube-node-j4kpl
357e488419f39       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             nbdb                                          1                   25e915db9cc03       ovnkube-master-6n5xq
2eabfc8cb5295       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                         3 days ago          Running             northd


<Compute(worker) node>
# ssh core@worker1 "sudo crictl ps -a |egrep 'POD|Running' |egrep 'POD|ovn'"
CONTAINER           IMAGE                                                                                                                         CREATED             STATE               NAME                                 ATTEMPT             POD ID              POD
0546ec5331178       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                              3 days ago          Running             ovn-acl-logging                      3                   6bc4e017cf305       ovnkube-node-zbx2t
865dcacb2af8d       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                              3 days ago          Running             ovn-controller                       3                   6bc4e017cf305       ovnkube-node-zbx2t
46d12d490f13d       419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f                                                              3 days ago          Running             ovnkube-node                         1                   6bc4e017cf305       ovnkube-node-zbx2t
c925974b20309       2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf                                                              3 days ago          Running             kube-rbac-proxy-ovn-metrics          1                   6bc4e017cf305       ovnkube-node-zbx2t
f4bfa77540f6b       2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf                                                              3 days ago          Running             kube-rbac-proxy                      1                   6bc4e017cf305       ovnkube-node-zbx2t

위에 실행중인 daemonset을 실행하기 위해 사용중인 Container를 무엇인지 확인하기 위해 OVN-Kubernetes의 Architecture를 확인합니다.

구성 요소 설명
CMS(Cloud Management System) 클러스터용 네트워킹을 설정하기 위해 OVN 리소스를 관리하는 플러그인
OVN/CMS plugin CMS 구성 DB에 CMS 관련 형식으로 저장된 논리 네트워크 구성에 대한 CMS 개념을 OVN에서 이해할 수 있는 표현으로 변환함 
OVN Northbound database (nbdb) CMS 플러그인이 전달한 논리 네트워크 구성을 저장
OVN Southbound database (sbdb) 바인딩하는 테이블(논리 네트워크 구성 요소들의 위치, 물리네트워크 link 등)을 포함하여 각 노드의 OVS 시스템에 대한 물리 네트워크 및 논리 네트워크의 구성 상태를 저장 
ovn-northd nbdb와 sbdb를 연결하는 중간 클라이언트
ovn-controller sbdb에 필요한 모든 정보 또는 업데이트를 위해 OVS 및 Hypervisor와 상호 작용하는 OVN 에이전트

https://docs.openshift.com/container-platform/4.13/networking/ovn_kubernetes_network_provider/ovn-kubernetes-architecture-assembly.html

 

아래의 그림에서 클러스터의 OVN-Kubernetes 논리적 아키텍처를 확인합니다.

스위치와 라우터는 상호 연결되어 네트워크 토폴로지를 생성합니다. 아래의 그림은 라우터와 스위치가 연결하는 방법을 파악할 수 있습니다.

https://docs.openshift.com/container-platform/4.13/networking/ovn_kubernetes_network_provider/ovn-kubernetes-architecture-assembly.html

반응형