24.2. OVN-Kubernetes 아키텍처

24.2.1. OVN-Kubernetes 아키텍처 소개

다음 다이어그램은 OVN-Kubernetes 아키텍처를 보여줍니다.

그림 24.1. OVK-Kubernetes 아키텍처

OVN-Kubernetes 아키텍처

주요 구성 요소는 다음과 같습니다.

  • Cloud Management System (CMS) - OVN 통합을 위한 CMS 특정 플러그인을 제공하는 OVN용 플랫폼 특정 클라이언트입니다. 플러그인은 CMS 구성 데이터베이스에 저장된 논리적 네트워크 구성에 대한 클라우드 관리 시스템의 개념을 OVN에 의해 이해되는 중간 표현으로 변환합니다.
  • OVN Northbound 데이터베이스(nbdb) - CMS 플러그인에 의해 전달된 논리 네트워크 구성을 저장합니다.
  • OVN Southbound 데이터베이스(sbdb) - OpenVswitch(OVS) 시스템의 물리적 및 논리적 네트워크 구성 상태를 각 노드에서 바인딩하는 테이블을 포함하여 저장합니다.
  • OVN-northd - nbdbsbdb 간의 중간 클라이언트입니다. nbdb 에서 가져온 기존 네트워크 개념의 관점에서 논리 네트워크 구성을 sbdb 아래의 논리 데이터 경로 흐름으로 변환합니다. 컨테이너 이름은 northd 이고 ovnkube-master Pod에서 실행됩니다.
  • OVN-controller - sbdb 에 필요한 모든 정보 또는 업데이트에 대해 OVS 및 하이퍼바이저와 상호 작용하는 OVN 에이전트입니다. ovn-controllersbdb 에서 논리 흐름을 읽고 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 는 해당 규칙을 OpenFlow 규칙으로 Open vSwitch 로 변환합니다.

Kubernetes 컨트롤 플레인 노드에는 각각 OVN northbound 및 southbound 데이터베이스의 컨테이너를 호스팅하는 ovnkube-master Pod가 포함되어 있습니다. 모든 OVN northbound 데이터베이스는 Raft 클러스터를 구성하고 모든 southbound 데이터베이스는 별도의 Raft 클러스터를 형성합니다. 언제든지 단일 ovnkube-master 가 리더이고 다른 ovnkube-master Pod는 우선합니다.

24.2.2. OVN-Kubernetes 프로젝트의 모든 리소스 나열

OVN-Kubernetes 프로젝트에서 실행되는 리소스와 컨테이너를 찾는 것이 OVN-Kubernetes 네트워킹 구현을 이해하는 데 중요합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스합니다.
  • OpenShift CLI(oc)가 설치되어 있어야 합니다.

프로세스

  1. 다음 명령을 실행하여 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/ovn-kubernetes-master      0      55m
    configmap/ovnkube-config             1      57m
    configmap/signer-ca                  1      57m

    컨트롤 플레인 노드에서 실행되는 ovnkube- master 에는 ovnkube-master 및 ovnkube-node Pod를 배포하는 데 사용되는 두 개의 데몬 세트가 있습니다. 클러스터의 각 노드에 대해 하나의 ovnkube-node Pod가 있습니다. 이 예제에는 5개가 있으며 클러스터에 노드당 하나의 ovnkube-node 가 있으므로 클러스터에 5개의 노드가 있습니다. ovnkube-config ConfigMap 에는 온라인 마스터 및 ovnkube-node 에서 OpenShift Container Platform OVN-Kubernetes 구성이 시작됩니다. ovn-kubernetes-master ConfigMap 에는 현재 온라인 마스터 리더의 정보가 있습니다.

  2. 다음 명령을 실행하여 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는 여러 컨테이너로 구성됩니다. Pod, egressIP, 네임스페이스, 서비스, 송신 방화벽 및 네트워크 정책에 대한 클러스터 이벤트를 감시하고 northbound 데이터베이스(ovnkube-master Pod)에 작성하고 노드에 대한 Pod 서브넷 할당을 관리합니다.

  3. 다음 명령을 실행하여 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 구성을 모니터링하고 제어할 수 있습니다.

24.2.3. OVN-Kubernetes northbound 데이터베이스 콘텐츠 나열

논리 흐름 규칙을 이해하려면 northbound 데이터베이스를 검사하고 오브젝트가 논리 흐름 규칙으로 어떻게 변환되는지 이해해야 합니다. 이 절차에서는 OVN Raft 리더에 최신 정보가 있으며, 이 절차에서는 Raft 리더를 찾고 나중에 OVN northbound 데이터베이스 콘텐츠를 나열하도록 쿼리하는 방법을 설명합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스합니다.
  • OpenShift CLI(oc)가 설치되어 있어야 합니다.

프로세스

  1. northbound 데이터베이스의 OVN Raft 리더를 찾습니다.

    참고

    Raft 리더는 최신 정보를 저장합니다.

    1. 다음 명령을 실행하여 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

    2. 임의의 마스터 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

      1
      이 Pod는 후속 조치로 식별됩니다.
      2
      리더는 2b4f로 식별됩니다.
      3
      2b4f 는 IP 주소 10.0.242.240에 있습니다.
    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 포드는 IP 주소 10.0.242.240에서 실행됩니다.

  2. 다음 명령을 실행하여 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

    다음 명령 중 일부를 사용하여 특정 구성 요소를 축소하고 집중할 수 있습니다.

  3. 다음 명령을 실행하여 논리 라우터 목록을 표시합니다.

    $ 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)

    참고

    이 출력에서 각 노드에 ovn_cluster_router 가 추가되었음을 확인할 수 있습니다.

  4. 다음 명령을 실행하여 논리 스위치 목록을 표시합니다.

    $ 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 스위치가 있음을 확인할 수 있습니다.

  5. 다음 명령을 실행하여 로드 밸런서 목록을 표시합니다.

    $ 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의 로드 밸런서는 서비스를 나타냅니다.

24.2.4. ovn-nbctl에서 northbound 데이터베이스 콘텐츠를 검사하는 명령줄 인수

다음 표에서는 ovn-nbctl 과 함께 사용하여 northbound 데이터베이스의 내용을 검사할 수 있는 명령줄 인수를 설명합니다.

표 24.2. northbound 데이터베이스 콘텐츠를 검사하는 명령줄 인수

인수설명

OVN-nbctl show

northbound 데이터베이스 콘텐츠의 개요입니다.

OVN-nbctl show <switch_or_router>

지정된 스위치 또는 라우터와 연결된 세부 정보를 표시합니다.

ovn-nbctl lr-list

논리 라우터를 표시합니다.

ovn-nbctl lrp-list <router>

ovn-nbctl lr-list 의 라우터 정보를 사용하여 라우터 포트를 표시합니다.

ovn-nbctl lr-nat-list <router>

지정된 라우터에 대한 네트워크 주소 변환 세부 정보를 표시합니다.

ovn-nbctl ls-list

논리 스위치 표시

ovn-nbctl lsp-list <switch>

ovn-nbctl ls-list 의 스위치 정보를 사용하여 스위치 포트를 표시합니다.

ovn-nbctl lsp-get-type <port>

논리 포트의 유형을 가져옵니다.

ovn-nbctl lb-list

로드 밸런서를 표시합니다.

24.2.5. OVN-Kubernetes southbound 데이터베이스 콘텐츠 나열

논리 흐름 규칙은 인프라를 나타내는 southbound 데이터베이스에 저장됩니다. 이 절차에서는 OVN Raft 리더에 최신 정보가 있으며 이 절차에서는 Raft 리더를 찾아 OVN southbound 데이터베이스 콘텐츠를 나열하는 방법을 설명합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스합니다.
  • OpenShift CLI(oc)가 설치되어 있어야 합니다.

프로세스

  1. southbound 데이터베이스의 OVN Raft 리더를 찾습니다.

    참고

    Raft 리더는 최신 정보를 저장합니다.

    1. 다음 명령을 실행하여 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

    2. 임의로 마스터 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

      1
      이 Pod는 후속 조치로 식별됩니다.
      2
      리더는 7081년으로 확인되었습니다.
      3
      7081 은 IP 주소 10.0.163.212에 있습니다.
    3. 다음 명령을 사용하여 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 포드는 IP 주소 10.0.163.212에서 실행됩니다.

  2. 다음 명령을 실행하여 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 주소는 Pod가 실행 중인 노드의 IP 주소로 변환된 다음 네트워크로 전송됩니다.

    southbound 데이터베이스에는 모든 논리 흐름이 있으며 이러한 논리 흐름은 각 노드에서 실행되는 ovn-controller 로 전송됩니다. ovn-controller 는 논리 흐름을 오픈 흐름 규칙 및 궁극적으로 OpenvSwitch 프로그램으로 변환하여 Pod가 오픈 흐름 규칙을 따르고 네트워크를 벗어나게 할 수 있도록 합니다.

    다음 명령을 실행하여 ovn-sbctl 명령으로 사용 가능한 옵션을 표시합니다.

    $ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \
    -c northd -- ovn-sbctl --help

24.2.6. ovn-sbctl에 대한 명령행 인수로 southbound 데이터베이스 콘텐츠를 검사합니다.

다음 표에서는 ovn-sbctl 에서 southbound 데이터베이스의 콘텐츠를 검사하는 데 사용할 수 있는 명령줄 인수를 설명합니다.

표 24.3. southbound 데이터베이스 콘텐츠를 검사하는 명령줄 인수

인수설명

OVN-sbctl show

southbound 데이터베이스 콘텐츠 개요.

OVN-sbctl list Port_Binding <port>

지정된 포트에 대한 southbound 데이터베이스의 내용을 나열합니다.

OVN-sbctl dump-flows

논리 흐름을 나열합니다.

24.2.7. OVN-Kubernetes 논리 아키텍처

OVN은 네트워크 가상화 솔루션입니다. 논리 스위치 및 라우터를 생성합니다. 이러한 스위치 및 라우터는 모든 네트워크 토폴로지를 생성하기 위해 고충됩니다. 로그 수준이 2 또는 5로 설정된 ovnkube-trace 를 실행하면 OVN-Kubernetes 논리 구성 요소가 노출됩니다. 다음 다이어그램에서는 OpenShift Container Platform에서 라우터 및 스위치가 연결된 방법을 보여줍니다.

그림 24.2. OVN-Kubernetes 라우터 및 스위치 구성 요소

OVN-Kubernetes 논리 아키텍처

패킷 처리와 관련된 주요 구성 요소는 다음과 같습니다.

게이트웨이 라우터
L3 게이트웨이 라우터라고도 하는 게이트웨이 라우터는 일반적으로 분산 라우터와 물리적 네트워크 간에 사용됩니다. 논리 패치 포트를 포함한 게이트웨이 라우터는 물리적 위치(분산되지 않음) 또는 섀시에 바인딩됩니다. 이 라우터의 패치 포트는 ovn-southbound 데이터베이스(ovn-sbdb)에서 l3gateway 포트라고 합니다.
분산 논리 라우터
분산 논리 라우터와 그 뒤에 논리 스위치, 가상 시스템 및 컨테이너가 연결되는 논리 스위치는 각 하이퍼바이저에 효과적으로 상주합니다.
로컬 스위치에 가입
조인 로컬 스위치는 분산 라우터 및 게이트웨이 라우터를 연결하는 데 사용됩니다. 분산 라우터에 필요한 IP 주소 수를 줄입니다.
패치 포트가 있는 논리 스위치
패치 포트가 있는 논리 스위치는 네트워크 스택을 가상화하는 데 사용됩니다. 원격 논리 포트를 터널을 통해 연결합니다.
localnet 포트가 있는 논리 스위치
localnet 포트가 있는 논리 스위치는 OVN을 물리적 네트워크에 연결하는 데 사용됩니다. localnet 포트를 사용하여 직접 연결된 물리적 L2 세그먼트에 패킷을 브리징하여 원격 논리 포트를 연결합니다.
패치 포트
패치 포트는 논리 스위치와 논리 라우터와 피어 논리 라우터 간의 연결을 나타냅니다. 단일 연결에는 이러한 연결 시점에 각각 하나씩의 패치 포트가 있습니다.
l3gateway 포트
l3gateway 포트는 게이트웨이 라우터에서 사용되는 논리 패치 포트에 대한 ovn-sbdb 의 포트 바인딩 항목입니다. 이러한 포트는 게이트웨이 라우터 자체와 마찬가지로 섀시에 바인딩된다는 사실을 나타내기 위해 패치 포트가 아닌 l3gateway 포트라고 합니다.
Localnet 포트
로컬net 포트는 브리지된 논리 스위치에 있으며 각 ovn-controller 인스턴스에서 로컬에 액세스할 수 있는 네트워크에 연결할 수 있습니다. 이를 통해 논리 스위치에서 물리적 네트워크에 직접 연결할 수 있습니다. 논리 스위치에는 하나의 localnet 포트만 연결할 수 있습니다.

24.2.7.1. 로컬 호스트에 network-tools 설치

로컬 호스트에 network-tools 를 설치하여 OpenShift Container Platform 클러스터 네트워크 문제를 디버깅하는 데 사용할 수 있는 툴 컬렉션을 만듭니다.

프로세스

  1. 다음 명령을 사용하여 network-tools 리포지토리를 워크스테이션에 복제합니다.

    $ git clone git@github.com:openshift/network-tools.git
  2. 방금 복제한 리포지토리의 디렉터리로 변경합니다.

    $ cd network-tools
  3. 선택 사항: 사용 가능한 모든 명령을 나열합니다.

    $ ./debug-scripts/network-tools -h

24.2.7.2. network-tools 실행

network-tools 를 실행하여 논리 스위치 및 라우터에 대한 정보를 가져옵니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 클러스터에 로그인합니다.
  • 로컬 호스트에 network-tools 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 라우터를 나열합니다.

    $ ./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)

  2. 다음 명령을 실행하여 localnet 포트를 나열합니다.

    $ ./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      : []
    
    [...]

  3. 다음 명령을 실행하여 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      : []
    
    [...]

  4. 다음 명령을 실행하여 패치 포트를 나열합니다.

    $ ./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      : []
    
    [...]

24.2.8. 추가 리소스