25.2. OVN-Kubernetes 아키텍처
25.2.1. OVN-Kubernetes 아키텍처 소개
다음 다이어그램은 OVN-Kubernetes 아키텍처를 보여줍니다.
그림 25.1. OVK-Kubernetes 아키텍처
주요 구성 요소는 다음과 같습니다.
- CMS(Cloud Management System) - OVN 통합을 위한 CMS 특정 플러그인을 제공하는 OVN용 플랫폼 특정 클라이언트입니다. 플러그인은 CMS 고유의 형식으로 CMS 구성 데이터베이스에 저장된 클라우드 관리 시스템의 논리적 네트워크 구성 개념을 OVN에서 인식하는 중간 표현으로 변환합니다.
-
OVN Northbound 데이터베이스(
nbdb
) - CMS 플러그인에서 전달하는 논리 네트워크 구성을 저장합니다. -
OVN Southbound 데이터베이스(
sbdb
) - 바인딩 테이블을 포함하여 각 노드의 OVS(OpenVswitch) 시스템의 물리적 및 논리적 네트워크 구성 상태를 저장합니다. -
OVN-northd -
nbdb
와sbdb
사이의 중간 클라이언트입니다.nbdb
에서 가져온 기존 네트워크 개념의 관점에서 논리적 네트워크 구성을 그 아래의sbdb
의 논리 데이터 경로 흐름으로 변환합니다. 컨테이너 이름은northd
이며ovnkube-master
Pod에서 실행됩니다. -
OVN-controller -
sbdb
에 필요한 정보 또는 업데이트에 대해 OVS 및 하이퍼바이저와 상호 작용하는 OVN 에이전트입니다.ovn-controller
는sbdb
에서 논리 흐름을 읽고, 이를OpenFlow
흐름으로 변환하여 노드의 OVS 데몬으로 전송합니다. 컨테이너 이름은ovn-controller
이며ovnkube-node
Pod에서 실행됩니다.
OVN northbound 데이터베이스에는 클라우드 관리 시스템(CMS)에 의해 전달된 논리 네트워크 구성이 있습니다. OVN northbound 데이터베이스에는 현재 원하는 네트워크 상태가 포함되며, 논리 포트, 논리 스위치, 논리 라우터 등으로 표시됩니다. ovn-northd
(northd
컨테이너)는 OVN northbound 데이터베이스 및 OVN southbound 데이터베이스에 연결됩니다. OVN northbound 데이터베이스에서 가져온 기존 네트워크 개념의 관점에서 논리적 네트워크 구성을 OVN southbound 데이터베이스의 논리 데이터 경로로 변환합니다.
OVN southbound 데이터베이스에는 연결된 네트워크 및 바인딩 테이블에 대한 물리적 및 논리적 표현이 있습니다. 클러스터의 모든 노드는 southbound 데이터베이스에 표시되고 연결된 포트를 볼 수 있습니다. 또한 모든 논리 흐름이 포함되어 있으며 논리 흐름은 각 노드에서 실행되는 ovn-controller
프로세스와 공유되고 ovn-controller
는 이를 Open vSwitch
프로그램을 위해 OpenFlow
규칙으로 전환합니다.
Kubernetes 컨트롤 플레인 노드에는 각각 OVN northbound 및 southbound 데이터베이스의 컨테이너를 호스팅하는 ovnkube-master
Pod가 포함되어 있습니다. 모든 OVN northbound 데이터베이스는 Raft
클러스터를 형성하고 모든 southbound 데이터베이스는 별도의 Raft
클러스터를 형성합니다. 언제든지 단일 ovnkube-master
가 리더이고 다른 ovnkube-master
Pod는 팔로우입니다.
25.2.2. OVN-Kubernetes 프로젝트의 모든 리소스 나열
OVN-Kubernetes 프로젝트에서 실행되는 리소스 및 컨테이너를 찾는 것은 OVN-Kubernetes 네트워킹 구현을 이해하는 데 도움이 됩니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
다음 명령을 실행하여 OVN-Kubernetes 프로젝트에서 모든 리소스, 끝점 및
ConfigMap
을 가져옵니다.$ oc get all,ep,cm -n openshift-ovn-kubernetes
출력 예
NAME READY STATUS RESTARTS AGE pod/ovnkube-master-9g7zt 6/6 Running 1 (48m ago) 57m pod/ovnkube-master-lqs4v 6/6 Running 0 57m pod/ovnkube-master-vxhtq 6/6 Running 0 57m pod/ovnkube-node-9k9kc 5/5 Running 0 57m pod/ovnkube-node-jg52r 5/5 Running 0 51m pod/ovnkube-node-k8wf7 5/5 Running 0 57m pod/ovnkube-node-tlwk6 5/5 Running 0 47m pod/ovnkube-node-xsvnk 5/5 Running 0 57m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ovn-kubernetes-master ClusterIP None <none> 9102/TCP 57m service/ovn-kubernetes-node ClusterIP None <none> 9103/TCP,9105/TCP 57m service/ovnkube-db ClusterIP None <none> 9641/TCP,9642/TCP 57m 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= 57m daemonset.apps/ovnkube-node 5 5 5 5 5 beta.kubernetes.io/os=linux 57m NAME ENDPOINTS AGE endpoints/ovn-kubernetes-master 10.0.132.11:9102,10.0.151.18:9102,10.0.192.45:9102 57m endpoints/ovn-kubernetes-node 10.0.132.11:9105,10.0.143.72:9105,10.0.151.18:9105 + 7 more... 57m endpoints/ovnkube-db 10.0.132.11:9642,10.0.151.18:9642,10.0.192.45:9642 + 3 more... 57m NAME DATA AGE configmap/control-plane-status 1 55m configmap/kube-root-ca.crt 1 57m configmap/openshift-service-ca.crt 1 57m configmap/ovn-ca 1 57m configmap/ovnkube-config 1 57m configmap/signer-ca 1 57m
컨트롤 플레인 노드에서 실행되는
ovnkube-masters
3개와ovnkube-master
및ovnkube-node
Pod를 배포하는 데 사용되는 데몬 세트 두 개가 있습니다. 클러스터의 각 노드에 대해 하나의ovnkube-node
Pod가 있습니다.ovnkube-config
ConfigMap
에는 online-master 및ovnkube-node
에서 시작된 OpenShift Container Platform OVN-Kubernetes 구성이 있습니다.다음 명령을 실행하여
ovnkube-master
Pod의 모든 컨테이너를 나열합니다.$ oc get pods ovnkube-master-9g7zt \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
예상 출력
northd nbdb kube-rbac-proxy sbdb ovnkube-master ovn-dbchecker
ovnkube-master
Pod는 여러 컨테이너로 구성됩니다. northbound 데이터베이스(nbdb
컨테이너), southbound 데이터베이스(sbdb
컨테이너)를 호스팅하고, Pod, egressIP, 네임스페이스, 서비스, 엔드포인트, 송신 방화벽 및 네트워크 정책에 대한 클러스터 이벤트를 조사하고 이를 northbound 데이터베이스(ovnkube-master
Pod)에 쓰고 노드에 Pod 서브넷 할당을 관리합니다.다음 명령을 실행하여
ovnkube-node
Pod의 모든 컨테이너를 나열합니다.$ oc get pods ovnkube-node-jg52r \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
예상 출력
ovn-controller ovn-acl-logging kube-rbac-proxy kube-rbac-proxy-ovn-metrics ovnkube-node
ovnkube-node
Pod에는 각 OpenShift Container Platform 노드에 있는 컨테이너(ovn-controller
)가 있습니다. 각 노드의ovn-controller
는 OVN northbound를 OVN southbound 데이터베이스에 연결하여 OVN 구성에 대해 알아봅니다.ovn-controller
는 southbound를ovs-vswitchd
를 OpenFlow 컨트롤러로 연결하고 네트워크 트래픽을 제어하며 로컬ovsdb-server
에 연결하여 Open vSwitch 구성을 모니터링하고 제어할 수 있습니다.다음 명령을 실행하여 현재 선택한 OVN-Kubernetes 마스터 리더를 나열합니다.
$ oc get lease -n openshift-ovn-kubernetes
예상 출력
NAME HOLDER AGE ovn-kubernetes-master ci-ln-gz990pb-72292-rthz2-master-2 50m
25.2.3. OVN-Kubernetes northbound 데이터베이스 콘텐츠 나열
논리 흐름 규칙을 이해하려면 northbound 데이터베이스를 검사하고 어떤 오브젝트가 논리 흐름 규칙으로 어떻게 변환되는지 이해해야 합니다. 최신 정보는 OVN Raft 리더에 있으며, 이 절차에서는 Raft 리더를 찾아 나중에 OVN northbound 데이터베이스 콘텐츠를 나열하는 방법을 설명합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
northbound 데이터베이스의 OVN Raft 리더를 찾습니다.
참고Raft 리더는 최신 정보를 가장 많이 저장합니다.
다음 명령을 실행하여 Pod를 나열합니다.
$ oc get po -n openshift-ovn-kubernetes
출력 예
NAME READY STATUS RESTARTS AGE ovnkube-master-7j97q 6/6 Running 2 (148m ago) 149m ovnkube-master-gt4ms 6/6 Running 1 (140m ago) 147m ovnkube-master-mk6p6 6/6 Running 0 148m ovnkube-node-8qvtr 5/5 Running 0 149m ovnkube-node-fqdc9 5/5 Running 0 149m ovnkube-node-tlfwv 5/5 Running 0 149m ovnkube-node-wlwkn 5/5 Running 0 142m
무작위로 마스터 Pod 중 하나를 선택하고 다음 명령을 실행합니다.
$ oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnnb_db.ctl \ --timeout=3 cluster/status OVN_Northbound
출력 예
Defaulted container "northd" out of: northd, nbdb, kube-rbac-proxy, sbdb, ovnkube-master, ovn-dbchecker 1c57 Name: OVN_Northbound Cluster ID: c48a (c48aa5c0-a704-4c77-a066-24fe99d9b338) Server ID: 1c57 (1c57b6fc-2849-49b7-8679-fbf18bafe339) Address: ssl:10.0.147.219:9643 Status: cluster member Role: follower 1 Term: 5 Leader: 2b4f 2 Vote: unknown Election timer: 10000 Log: [2, 3018] Entries not yet committed: 0 Entries not yet applied: 0 Connections: ->0000 ->0000 <-8844 <-2b4f Disconnections: 0 Servers: 1c57 (1c57 at ssl:10.0.147.219:9643) (self) 8844 (8844 at ssl:10.0.163.212:9643) last msg 8928047 ms ago 2b4f (2b4f at ssl:10.0.242.240:9643) last msg 620 ms ago 3
다음 명령을 사용하여 IP 주소
10.0.242.240
에서 실행 중인ovnkube-master
Pod를 찾습니다.$ oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.242.240 | grep -v ovnkube-node
출력 예
ovnkube-master-gt4ms 6/6 Running 1 (143m ago) 150m 10.0.242.240 ip-10-0-242-240.ec2.internal <none> <none>
ovnkube-master-gt4ms
Pod는 IP 주소 10.0.242.240에서 실행됩니다.
다음 명령을 실행하여 northbound 데이터베이스의 모든 오브젝트를 표시합니다.
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl show
여기에 나열하기에는 너무 긴 출력이 표시됩니다. 목록에는 NAT 규칙, 논리 스위치, 로드 밸런서 등이 포함됩니다.
다음 명령을 실행하여
ovn-nbctl
: 명령과 함께 사용 가능한 옵션을 표시합니다.$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd ovn-nbctl --help
다음 명령 중 일부를 사용하여 특정 구성 요소에 중점을 두고 특정 구성 요소에 중점을 둘 수 있습니다.
다음 명령을 실행하여 논리 라우터 목록을 표시합니다.
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lr-list
출력 예
f971f1f3-5112-402f-9d1e-48f1d091ff04 (GR_ip-10-0-145-205.ec2.internal) 69c992d8-a4cf-429e-81a3-5361209ffe44 (GR_ip-10-0-147-219.ec2.internal) 7d164271-af9e-4283-b84a-48f2a44851cd (GR_ip-10-0-163-212.ec2.internal) 111052e3-c395-408b-97b2-8dd0a20a29a5 (GR_ip-10-0-165-9.ec2.internal) ed50ce33-df5d-48e8-8862-2df6a59169a0 (GR_ip-10-0-209-170.ec2.internal) f44e2a96-8d1e-4a4d-abae-ed8728ac6851 (GR_ip-10-0-242-240.ec2.internal) ef3d0057-e557-4b1a-b3c6-fcc3463790b0 (ovn_cluster_router)
참고이 출력에서 각 노드에 router이 있고
ovn_cluster_router
가 있음을 확인할 수 있습니다.다음 명령을 실행하여 논리 스위치 목록을 표시합니다.
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl ls-list
출력 예
82808c5c-b3bc-414a-bb59-8fec4b07eb14 (ext_ip-10-0-145-205.ec2.internal) 3d22444f-0272-4c51-afc6-de9e03db3291 (ext_ip-10-0-147-219.ec2.internal) bf73b9df-59ab-4c58-a456-ce8205b34ac5 (ext_ip-10-0-163-212.ec2.internal) bee1e8d0-ec87-45eb-b98b-63f9ec213e5e (ext_ip-10-0-165-9.ec2.internal) 812f08f2-6476-4abf-9a78-635f8516f95e (ext_ip-10-0-209-170.ec2.internal) f65e710b-32f9-482b-8eab-8d96a44799c1 (ext_ip-10-0-242-240.ec2.internal) 84dad700-afb8-4129-86f9-923a1ddeace9 (ip-10-0-145-205.ec2.internal) 1b7b448b-e36c-4ca3-9f38-4a2cf6814bfd (ip-10-0-147-219.ec2.internal) d92d1f56-2606-4f23-8b6a-4396a78951de (ip-10-0-163-212.ec2.internal) 6864a6b2-de15-4de3-92d8-f95014b6f28f (ip-10-0-165-9.ec2.internal) c26bf618-4d7e-4afd-804f-1a2cbc96ec6d (ip-10-0-209-170.ec2.internal) ab9a4526-44ed-4f82-ae1c-e20da04947d9 (ip-10-0-242-240.ec2.internal) a8588aba-21da-4276-ba0f-9d68e88911f0 (join)
참고이 출력에서 각 노드에 대해 ext 스위치와 노드 이름 자체 및 조인 스위치를 사용한 스위치가 있음을 확인할 수 있습니다.
다음 명령을 실행하여 로드 밸런서 목록을 표시합니다.
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lb-list
출력 예
UUID LB PROTO VIP IPs f0fb50f9-4968-4b55-908c-616bae4db0a2 Service_default/ tcp 172.30.0.1:443 10.0.147.219:6443,10.0.163.212:6443,169.254.169.2:6443 0dc42012-4f5b-432e-ae01-2cc4bfe81b00 Service_default/ tcp 172.30.0.1:443 10.0.147.219:6443,169.254.169.2:6443,10.0.242.240:6443 f7fff5d5-5eff-4a40-98b1-3a4ba8f7f69c Service_default/ tcp 172.30.0.1:443 169.254.169.2:6443,10.0.163.212:6443,10.0.242.240:6443 12fe57a0-50a4-4a1b-ac10-5f288badee07 Service_default/ tcp 172.30.0.1:443 10.0.147.219:6443,10.0.163.212:6443,10.0.242.240:6443 3f137fbf-0b78-4875-ba44-fbf89f254cf7 Service_openshif tcp 172.30.23.153:443 10.130.0.14:8443 174199fe-0562-4141-b410-12094db922a7 Service_openshif tcp 172.30.69.51:50051 10.130.0.84:50051 5ee2d4bd-c9e2-4d16-a6df-f54cd17c9ac3 Service_openshif tcp 172.30.143.87:9001 10.0.145.205:9001,10.0.147.219:9001,10.0.163.212:9001,10.0.165.9:9001,10.0.209.170:9001,10.0.242.240:9001 a056ae3d-83f8-45bc-9c80-ef89bce7b162 Service_openshif tcp 172.30.164.74:443 10.0.147.219:6443,10.0.163.212:6443,10.0.242.240:6443 bac51f3d-9a6f-4f5e-ac02-28fd343a332a Service_openshif tcp 172.30.0.10:53 10.131.0.6:5353 tcp 172.30.0.10:9154 10.131.0.6:9154 48105bbc-51d7-4178-b975-417433f9c20a Service_openshif tcp 172.30.26.159:2379 10.0.147.219:2379,169.254.169.2:2379,10.0.242.240:2379 tcp 172.30.26.159:9979 10.0.147.219:9979,169.254.169.2:9979,10.0.242.240:9979 7de2b8fc-342a-415f-ac13-1a493f4e39c0 Service_openshif tcp 172.30.53.219:443 10.128.0.7:8443 tcp 172.30.53.219:9192 10.128.0.7:9192 2cef36bc-d720-4afb-8d95-9350eff1d27a Service_openshif tcp 172.30.81.66:443 10.128.0.23:8443 365cb6fb-e15e-45a4-a55b-21868b3cf513 Service_openshif tcp 172.30.96.51:50051 10.130.0.19:50051 41691cbb-ec55-4cdb-8431-afce679c5e8d Service_openshif tcp 172.30.98.218:9099 169.254.169.2:9099 82df10ba-8143-400b-977a-8f5f416a4541 Service_openshif tcp 172.30.26.159:2379 10.0.147.219:2379,10.0.163.212:2379,169.254.169.2:2379 tcp 172.30.26.159:9979 10.0.147.219:9979,10.0.163.212:9979,169.254.169.2:9979 debe7f3a-39a8-490e-bc0a-ebbfafdffb16 Service_openshif tcp 172.30.23.244:443 10.128.0.48:8443,10.129.0.27:8443,10.130.0.45:8443 8a749239-02d9-4dc2-8737-716528e0da7b Service_openshif tcp 172.30.124.255:8443 10.128.0.14:8443 880c7c78-c790-403d-a3cb-9f06592717a3 Service_openshif tcp 172.30.0.10:53 10.130.0.20:5353 tcp 172.30.0.10:9154 10.130.0.20:9154 d2f39078-6751-4311-a161-815bbaf7f9c7 Service_openshif tcp 172.30.26.159:2379 169.254.169.2:2379,10.0.163.212:2379,10.0.242.240:2379 tcp 172.30.26.159:9979 169.254.169.2:9979,10.0.163.212:9979,10.0.242.240:9979 30948278-602b-455c-934a-28e64c46de12 Service_openshif tcp 172.30.157.35:9443 10.130.0.43:9443 2cc7e376-7c02-4a82-89e8-dfa1e23fb003 Service_openshif tcp 172.30.159.212:17698 10.128.0.48:17698,10.129.0.27:17698,10.130.0.45:17698 e7d22d35-61c2-40c2-bc30-265cff8ed18d Service_openshif tcp 172.30.143.87:9001 10.0.145.205:9001,10.0.147.219:9001,10.0.163.212:9001,10.0.165.9:9001,10.0.209.170:9001,169.254.169.2:9001 75164e75-e0c5-40fb-9636-bfdbf4223a02 Service_openshif tcp 172.30.150.68:1936 10.129.4.8:1936,10.131.0.10:1936 tcp 172.30.150.68:443 10.129.4.8:443,10.131.0.10:443 tcp 172.30.150.68:80 10.129.4.8:80,10.131.0.10:80 7bc4ee74-dccf-47e9-9149-b011f09aff39 Service_openshif tcp 172.30.164.74:443 10.0.147.219:6443,10.0.163.212:6443,169.254.169.2:6443 0db59e74-1cc6-470c-bf44-57c520e0aa8f Service_openshif tcp 10.0.163.212:31460 tcp 10.0.163.212:32361 c300e134-018c-49af-9f84-9deb1d0715f8 Service_openshif tcp 172.30.42.244:50051 10.130.0.47:50051 5e352773-429b-4881-afb3-a13b7ba8b081 Service_openshif tcp 172.30.244.66:443 10.129.0.8:8443,10.130.0.8:8443 54b82d32-1939-4465-a87d-f26321442a7a Service_openshif tcp 172.30.12.9:8443 10.128.0.35:8443
참고이 잘린 출력에서 많은 OVN-Kubernetes 로드 밸런서가 있음을 확인할 수 있습니다. OVN-Kubernetes의 로드 밸런서는 서비스를 나타냅니다.
25.2.4. ovn-nbctl에 대한 명령행 인수로 northbound 데이터베이스 콘텐츠를 검사합니다.
다음 표에서는 ovn-nbctl
과 함께 사용하여 northbound 데이터베이스의 콘텐츠를 검사할 수 있는 명령줄 인수를 설명합니다.
인수 | 설명 |
---|---|
| northbound 데이터베이스 콘텐츠의 개요입니다. |
| 지정된 스위치 또는 라우터와 연결된 세부 정보를 표시합니다. |
| 논리 라우터를 표시합니다. |
|
|
| 지정된 라우터의 네트워크 주소 변환 세부 정보를 표시합니다. |
| 논리 스위치 표시 |
|
|
| 논리 포트의 유형을 가져옵니다. |
| 로드 밸런서를 표시합니다. |
25.2.5. OVN-Kubernetes southbound 데이터베이스 콘텐츠 나열
논리 흐름 규칙은 인프라를 나타내는 southbound 데이터베이스에 저장됩니다. 최신 정보는 OVN Raft 리더에 있으며, 이 절차에서는 Raft 리더를 찾아 쿼리하여 OVN southbound 데이터베이스 콘텐츠를 나열하는 방법을 설명합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
southbound 데이터베이스의 OVN Raft 리더를 찾습니다.
참고Raft 리더는 최신 정보를 가장 많이 저장합니다.
다음 명령을 실행하여 Pod를 나열합니다.
$ oc get po -n openshift-ovn-kubernetes
출력 예
NAME READY STATUS RESTARTS AGE ovnkube-master-7j97q 6/6 Running 2 (134m ago) 135m ovnkube-master-gt4ms 6/6 Running 1 (126m ago) 133m ovnkube-master-mk6p6 6/6 Running 0 134m ovnkube-node-8qvtr 5/5 Running 0 135m ovnkube-node-bqztb 5/5 Running 0 117m ovnkube-node-fqdc9 5/5 Running 0 135m ovnkube-node-tlfwv 5/5 Running 0 135m ovnkube-node-wlwkn 5/5 Running 0 128m
임의로 마스터 Pod 중 하나를 선택하고 다음 명령을 실행하여 OVN southbound Raft 리더를 찾습니다.
$ oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnsb_db.ctl \ --timeout=3 cluster/status OVN_Southbound
출력 예
Defaulted container "northd" out of: northd, nbdb, kube-rbac-proxy, sbdb, ovnkube-master, ovn-dbchecker 1930 Name: OVN_Southbound Cluster ID: f772 (f77273c0-7986-42dd-bd3c-a9f18e25701f) Server ID: 1930 (1930f4b7-314b-406f-9dcb-b81fe2729ae1) Address: ssl:10.0.147.219:9644 Status: cluster member Role: follower 1 Term: 3 Leader: 7081 2 Vote: unknown Election timer: 16000 Log: [2, 2423] Entries not yet committed: 0 Entries not yet applied: 0 Connections: ->0000 ->7145 <-7081 <-7145 Disconnections: 0 Servers: 7081 (7081 at ssl:10.0.163.212:9644) last msg 59 ms ago 3 1930 (1930 at ssl:10.0.147.219:9644) (self) 7145 (7145 at ssl:10.0.242.240:9644) last msg 7871735 ms ago
다음 명령을 사용하여 IP 주소
10.0.163.212
에서 실행 중인ovnkube-master
Pod를 찾습니다.$ oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.163.212 | grep -v ovnkube-node
출력 예
ovnkube-master-mk6p6 6/6 Running 0 136m 10.0.163.212 ip-10-0-163-212.ec2.internal <none> <none>
ovnkube-master-mk6p6
Pod는 IP 주소 10.0.163.212에서 실행됩니다.
다음 명령을 실행하여 southbound 데이터베이스에 저장된 모든 정보를 표시합니다.
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- ovn-sbctl show
출력 예
Chassis "8ca57b28-9834-45f0-99b0-96486c22e1be" hostname: ip-10-0-156-16.ec2.internal Encap geneve ip: "10.0.156.16" options: {csum="true"} Port_Binding k8s-ip-10-0-156-16.ec2.internal Port_Binding etor-GR_ip-10-0-156-16.ec2.internal Port_Binding jtor-GR_ip-10-0-156-16.ec2.internal Port_Binding openshift-ingress-canary_ingress-canary-hsblx Port_Binding rtoj-GR_ip-10-0-156-16.ec2.internal Port_Binding openshift-monitoring_prometheus-adapter-658fc5967-9l46x Port_Binding rtoe-GR_ip-10-0-156-16.ec2.internal Port_Binding openshift-multus_network-metrics-daemon-77nvz Port_Binding openshift-ingress_router-default-64fd8c67c7-df598 Port_Binding openshift-dns_dns-default-ttpcq Port_Binding openshift-monitoring_alertmanager-main-0 Port_Binding openshift-e2e-loki_loki-promtail-g2pbh Port_Binding openshift-network-diagnostics_network-check-target-m6tn4 Port_Binding openshift-monitoring_thanos-querier-75b5cf8dcb-qf8qj Port_Binding cr-rtos-ip-10-0-156-16.ec2.internal Port_Binding openshift-image-registry_image-registry-7b7bc44566-mp9b8
이 상세 출력에서는 섀시 및 섀시에 연결된 포트를 보여줍니다. 이 경우 모든 라우터 포트와 호스트 네트워킹과 같이 실행되는 모든 항목이 있습니다. 모든 pod는 소스 네트워크 주소 변환(SNAT)을 사용하여 더 광범위한 네트워크와 통신합니다. 해당 IP 주소는 포드가 실행 중인 노드의 IP 주소로 변환된 다음 네트워크로 전송됩니다.
southbound 데이터베이스에 있는 섀시 정보 외에도 southbound 데이터베이스에는 모든 논리 흐름이 있으며 이러한 논리 흐름은 각 노드에서 실행되는
ovn-controller
로 전송됩니다.ovn-controller
는 논리를 공개 흐름 규칙으로 변환하고 궁극적으로OpenvSwitch
를 프로그램하여 pod가 열린 흐름 규칙을 따르고 네트워크에서 제외할 수 있도록 합니다.다음 명령을 실행하여
ovn-sbctl
명령과 함께 사용할 수 있는 옵션을 표시합니다.$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- ovn-sbctl --help
25.2.6. ovn-sbctl에 대한 명령행 인수로 southbound 데이터베이스 콘텐츠를 검사합니다.
다음 표에서는 ovn-sbctl
과 함께 southbound 데이터베이스의 콘텐츠를 검사하는 데 사용할 수 있는 명령줄 인수를 설명합니다.
인수 | 설명 |
---|---|
| southbound 데이터베이스 콘텐츠의 개요입니다. |
| 지정된 포트에 대한 southbound 데이터베이스의 콘텐츠를 나열합니다. |
| 논리 흐름을 나열합니다. |
25.2.7. OVN-Kubernetes 논리 아키텍처
OVN은 네트워크 가상화 솔루션입니다. 논리 스위치 및 라우터를 생성합니다. 이러한 스위치 및 라우터는 네트워크 토폴로지를 생성하기 위해 조정됩니다. 2 또는 5로 설정된 로그 수준을 사용하여 ovnkube-trace
를 실행하면 OVN-Kubernetes 논리 구성 요소가 노출됩니다. 다음 다이어그램에서는 OpenShift Container Platform에서 라우터 및 스위치를 연결하는 방법을 보여줍니다.
그림 25.2. OVN-Kubernetes 라우터 및 스위치 구성 요소
패킷 처리와 관련된 주요 구성 요소는 다음과 같습니다.
- 게이트웨이 라우터
-
일반적으로 L3 게이트웨이 라우터라고 하는 게이트웨이 라우터는 일반적으로 분산 라우터와 물리적 네트워크 간에 사용됩니다. 논리 패치 포트를 포함하는 게이트웨이 라우터는 물리적 위치(분산되지 않음) 또는 섀시에 바인딩됩니다. 이 라우터의 패치 포트는 ovn-southbound 데이터베이스(
ovn-sbdb
)의 l3gateway 포트라고 합니다. - 분산 논리 라우터
- 가상 시스템과 컨테이너가 연결되는 분산 논리 라우터와 논리 스위치는 각 하이퍼바이저에 효과적으로 상주합니다.
- 로컬 스위치에 가입
- 로컬 스위치 조인은 분산 라우터 및 게이트웨이 라우터를 연결하는 데 사용됩니다. 분산 라우터에 필요한 IP 주소 수를 줄입니다.
- 패치 포트가 있는 논리 스위치
- 패치 포트가 있는 논리 스위치는 네트워크 스택을 가상화하는 데 사용됩니다. 원격 논리 포트를 터널을 통해 연결합니다.
- localnet 포트가 있는 논리 스위치
- localnet 포트가 있는 논리 스위치는 OVN을 물리적 네트워크에 연결하는 데 사용됩니다. 로컬넷 포트를 사용하여 직접 연결된 물리적 L2 세그먼트에 패킷을 브리징하여 원격 논리 포트를 연결합니다.
- 패치 포트
- 패치 포트는 논리 스위치와 논리 라우터 간 연결과 피어 논리 라우터 간 연결을 나타냅니다. 단일 연결에는 이러한 연결 지점마다 한 쌍의 패치 포트가 있으며 각 포트에 하나씩 있습니다.
- l3gateway 포트
-
l3gateway 포트는 게이트웨이 라우터에 사용되는 논리 패치 포트용
ovn-sbdb
의 포트 바인딩 항목입니다. 이러한 포트는 게이트웨이 라우터 자체와 마찬가지로 섀시에 바인딩되어 있다는 팩트를 포트하기 위해 패치 포트가 아닌 l3gateway 포트라고 합니다. - localnet 포트
-
각
ovn-controller
인스턴스에서 로컬 액세스 네트워크에 연결할 수 있는 브리지된 논리 스위치에 localnet 포트가 있습니다. 이를 통해 논리 스위치에서 물리적 네트워크에 직접 연결할 수 있습니다. 논리 스위치는 단일 localnet 포트만 연결할 수 있습니다.
25.2.7.1. 로컬 호스트에 network-tools 설치
로컬 호스트에 network-tools
를 설치하여 OpenShift Container Platform 클러스터 네트워크 문제를 디버깅하는 데 필요한 툴 컬렉션을 사용할 수 있도록 합니다.
프로세스
다음 명령을 사용하여
network-tools
리포지토리를 워크스테이션에 복제합니다.$ git clone git@github.com:openshift/network-tools.git
방금 복제한 리포지토리의 디렉터리로 변경합니다.
$ cd network-tools
선택 사항: 사용 가능한 모든 명령을 나열합니다.
$ ./debug-scripts/network-tools -h
25.2.7.2. network-tools 실행
network-tools
를 실행하여 논리 스위치 및 라우터에 대한 정보를 가져옵니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
로컬 호스트에
network-tools
를 설치했습니다.
프로세스
다음 명령을 실행하여 라우터를 나열합니다.
$ ./debug-scripts/network-tools ovn-db-run-command ovn-nbctl lr-list
출력 예
Leader pod is ovnkube-master-vslqm 5351ddd1-f181-4e77-afc6-b48b0a9df953 (GR_helix13.lab.eng.tlv2.redhat.com) ccf9349e-1948-4df8-954e-39fb0c2d4d06 (GR_helix14.lab.eng.tlv2.redhat.com) e426b918-75a8-4220-9e76-20b7758f92b7 (GR_hlxcl7-master-0.hlxcl7.lab.eng.tlv2.redhat.com) dded77c8-0cc3-4b99-8420-56cd2ae6a840 (GR_hlxcl7-master-1.hlxcl7.lab.eng.tlv2.redhat.com) 4f6747e6-e7ba-4e0c-8dcd-94c8efa51798 (GR_hlxcl7-master-2.hlxcl7.lab.eng.tlv2.redhat.com) 52232654-336e-4952-98b9-0b8601e370b4 (ovn_cluster_router)
다음 명령을 실행하여 로컬net 포트를 나열합니다.
$ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=localnet
출력 예
Leader pod is ovnkube-master-vslqm _uuid : 3de79191-cca8-4c28-be5a-a228f0f9ebfc additional_chassis : [] additional_encap : [] chassis : [] datapath : 3f1a4928-7ff5-471f-9092-fe5f5c67d15c encap : [] external_ids : {} gateway_chassis : [] ha_chassis_group : [] logical_port : br-ex_helix13.lab.eng.tlv2.redhat.com mac : [unknown] nat_addresses : [] options : {network_name=physnet} parent_port : [] port_security : [] requested_additional_chassis: [] requested_chassis : [] tag : [] tunnel_key : 2 type : localnet up : false virtual_parent : [] _uuid : dbe21daf-9594-4849-b8f0-5efbfa09a455 additional_chassis : [] additional_encap : [] chassis : [] datapath : db2a6067-fe7c-4d11-95a7-ff2321329e11 encap : [] external_ids : {} gateway_chassis : [] ha_chassis_group : [] logical_port : br-ex_hlxcl7-master-2.hlxcl7.lab.eng.tlv2.redhat.com mac : [unknown] nat_addresses : [] options : {network_name=physnet} parent_port : [] port_security : [] requested_additional_chassis: [] requested_chassis : [] tag : [] tunnel_key : 2 type : localnet up : false virtual_parent : [] [...]
다음 명령을 실행하여
l3gateway
포트를 나열합니다.$ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=l3gateway
출력 예
Leader pod is ovnkube-master-vslqm _uuid : 9314dc80-39e1-4af7-9cc0-ae8a9708ed59 additional_chassis : [] additional_encap : [] chassis : 336a923d-99e8-4e71-89a6-12564fde5760 datapath : db2a6067-fe7c-4d11-95a7-ff2321329e11 encap : [] external_ids : {} gateway_chassis : [] ha_chassis_group : [] logical_port : etor-GR_hlxcl7-master-2.hlxcl7.lab.eng.tlv2.redhat.com mac : ["52:54:00:3e:95:d3"] nat_addresses : ["52:54:00:3e:95:d3 10.46.56.77"] options : {l3gateway-chassis="7eb1f1c3-87c2-4f68-8e89-60f5ca810971", peer=rtoe-GR_hlxcl7-master-2.hlxcl7.lab.eng.tlv2.redhat.com} parent_port : [] port_security : [] requested_additional_chassis: [] requested_chassis : [] tag : [] tunnel_key : 1 type : l3gateway up : true virtual_parent : [] _uuid : ad7eb303-b411-4e9f-8d36-d07f1f268e27 additional_chassis : [] additional_encap : [] chassis : f41453b8-29c5-4f39-b86b-e82cf344bce4 datapath : 082e7a60-d9c7-464b-b6ec-117d3426645a encap : [] external_ids : {} gateway_chassis : [] ha_chassis_group : [] logical_port : etor-GR_helix14.lab.eng.tlv2.redhat.com mac : ["34:48:ed:f3:e2:2c"] nat_addresses : ["34:48:ed:f3:e2:2c 10.46.56.14"] options : {l3gateway-chassis="2e8abe3a-cb94-4593-9037-f5f9596325e2", peer=rtoe-GR_helix14.lab.eng.tlv2.redhat.com} parent_port : [] port_security : [] requested_additional_chassis: [] requested_chassis : [] tag : [] tunnel_key : 1 type : l3gateway up : true virtual_parent : [] [...]
다음 명령을 실행하여 패치 포트를 나열합니다.
$ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=patch
출력 예
Leader pod is ovnkube-master-vslqm _uuid : c48b1380-ff26-4965-a644-6bd5b5946c61 additional_chassis : [] additional_encap : [] chassis : [] datapath : 72734d65-fae1-4bd9-a1ee-1bf4e085a060 encap : [] external_ids : {} gateway_chassis : [] ha_chassis_group : [] logical_port : jtor-ovn_cluster_router mac : [router] nat_addresses : [] options : {peer=rtoj-ovn_cluster_router} parent_port : [] port_security : [] requested_additional_chassis: [] requested_chassis : [] tag : [] tunnel_key : 4 type : patch up : false virtual_parent : [] _uuid : 5df51302-f3cd-415b-a059-ac24389938f7 additional_chassis : [] additional_encap : [] chassis : [] datapath : 0551c90f-e891-4909-8e9e-acc7909e06d0 encap : [] external_ids : {} gateway_chassis : [] ha_chassis_group : [] logical_port : rtos-hlxcl7-master-1.hlxcl7.lab.eng.tlv2.redhat.com mac : ["0a:58:0a:82:00:01 10.130.0.1/23"] nat_addresses : [] options : {chassis-redirect-port=cr-rtos-hlxcl7-master-1.hlxcl7.lab.eng.tlv2.redhat.com, peer=stor-hlxcl7-master-1.hlxcl7.lab.eng.tlv2.redhat.com} parent_port : [] port_security : [] requested_additional_chassis: [] requested_chassis : [] tag : [] tunnel_key : 4 type : patch up : false virtual_parent : [] [...]