20.2. OVN-Kubernetes 아키텍처


20.2.1. OVN-Kubernetes 아키텍처 소개

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

그림 20.1. OVK-Kubernetes 아키텍처

OVN-Kubernetes 아키텍처

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

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

OVN northd, northbound 데이터베이스 및 southbound 데이터베이스는 클러스터의 각 노드에서 실행되며 대부분 해당 노드에 로컬인 정보를 포함하고 처리합니다.

OVN northbound 데이터베이스에는 클라우드 관리 시스템(CMS)에서 전달된 논리적 네트워크 구성이 있습니다. OVN northbound 데이터베이스에는 논리 포트, 논리 스위치, 논리 라우터 등으로 제공되는 현재 원하는 네트워크 상태가 포함되어 있습니다. ovn-northd (northd 컨테이너)는 OVN northbound 데이터베이스 및 OVN southbound 데이터베이스에 연결됩니다. OVN northbound 데이터베이스에서 가져온 기존 네트워크 개념의 관점에서 논리적 네트워크 구성을 OVN southbound 데이터베이스의 논리 데이터 경로로 변환합니다.

OVN southbound 데이터베이스에는 함께 연결하는 네트워크 및 바인딩 테이블에 대한 물리적 및 논리적 표현이 있습니다. 노드의 섀시 정보와 클러스터의 다른 노드에 연결하는 데 필요한 원격 전송 스위치 포트와 같은 기타 구성이 포함되어 있습니다. OVN southbound 데이터베이스에는 모든 논리 흐름도 포함되어 있습니다. 논리 흐름은 각 노드에서 실행되는 ovn-controller 프로세스와 공유되고 ovn-controller 는 이를 OpenFlow 규칙으로 전환하여 OVS( Open vSwitch)를 프로그래밍합니다.

Kubernetes 컨트롤 플레인 노드에는 별도의 노드에 두 개의 ovnkube-control-plane Pod가 포함되어 있으며 클러스터의 각 노드에 대해 IPAM(중앙 IP 주소 관리) 할당을 수행합니다. 언제든지 단일 ovnkube-control-plane Pod가 리더입니다.

20.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

    출력 예

    Warning: apps.openshift.io/v1 DeploymentConfig is deprecated in v4.14+, unavailable in v4.10000+
    NAME                                         READY   STATUS    RESTARTS       AGE
    pod/ovnkube-control-plane-65c6f55656-6d55h   2/2     Running   0              114m
    pod/ovnkube-control-plane-65c6f55656-fd7vw   2/2     Running   2 (104m ago)   114m
    pod/ovnkube-node-bcvts                       8/8     Running   0              113m
    pod/ovnkube-node-drgvv                       8/8     Running   0              113m
    pod/ovnkube-node-f2pxt                       8/8     Running   0              113m
    pod/ovnkube-node-frqsb                       8/8     Running   0              105m
    pod/ovnkube-node-lbxkk                       8/8     Running   0              105m
    pod/ovnkube-node-tt7bx                       8/8     Running   1 (102m ago)   105m
    
    NAME                                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
    service/ovn-kubernetes-control-plane   ClusterIP   None         <none>        9108/TCP            114m
    service/ovn-kubernetes-node            ClusterIP   None         <none>        9103/TCP,9105/TCP   114m
    
    NAME                          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
    daemonset.apps/ovnkube-node   6         6         6       6            6           beta.kubernetes.io/os=linux   114m
    
    NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/ovnkube-control-plane   3/3     3            3           114m
    
    NAME                                               DESIRED   CURRENT   READY   AGE
    replicaset.apps/ovnkube-control-plane-65c6f55656   3         3         3       114m
    
    NAME                                     ENDPOINTS                                               AGE
    endpoints/ovn-kubernetes-control-plane   10.0.0.3:9108,10.0.0.4:9108,10.0.0.5:9108               114m
    endpoints/ovn-kubernetes-node            10.0.0.3:9105,10.0.0.4:9105,10.0.0.5:9105 + 9 more...   114m
    
    NAME                                 DATA   AGE
    configmap/control-plane-status       1      113m
    configmap/kube-root-ca.crt           1      114m
    configmap/openshift-service-ca.crt   1      114m
    configmap/ovn-ca                     1      114m
    configmap/ovnkube-config             1      114m
    configmap/signer-ca                  1      114m

    클러스터의 각 노드에 대해 하나의 ovnkube-node Pod가 있습니다. ovnkube-config 구성 맵에는 OpenShift Container Platform OVN-Kubernetes 구성이 있습니다.

  2. 다음 명령을 실행하여 ovnkube-node Pod의 모든 컨테이너를 나열합니다.

    $ oc get pods ovnkube-node-bcvts -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes

    예상 출력

    ovn-controller ovn-acl-logging kube-rbac-proxy-node kube-rbac-proxy-ovn-metrics northd nbdb sbdb ovnkube-controller

    ovnkube-node Pod는 여러 컨테이너로 구성됩니다. northbound 데이터베이스(nbdb 컨테이너), southbound 데이터베이스(sbdb 컨테이너), north 데몬(northd 컨테이너), ovnkube -controller 컨테이너를 호스팅해야 합니다. ovnkube-controller 컨테이너는 Pod, 송신 IP, 네임스페이스, 서비스, 끝점, 송신 방화벽 및 네트워크 정책과 같은 API 오브젝트를 감시합니다. 또한 해당 노드에 사용 가능한 서브넷 풀에서 Pod IP를 할당해야 합니다.

  3. 다음 명령을 실행하여 ovnkube-control-plane Pod의 모든 컨테이너를 나열합니다.

    $ oc get pods ovnkube-control-plane-65c6f55656-6d55h -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes

    예상 출력

    kube-rbac-proxy ovnkube-cluster-manager

    ovnkube-control-plane Pod에는 각 OpenShift Container Platform 노드에 있는 컨테이너(ovnkube-cluster-manager)가 있습니다. ovnkube-cluster-manager 컨테이너는 Pod 서브넷, transit switch subnet IP 및 join switch subnet IP를 클러스터의 각 노드에 할당합니다. kube-rbac-proxy 컨테이너는 ovnkube-cluster-manager 컨테이너의 지표를 모니터링합니다.

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

각 노드는 해당 노드의 ovnkube-node Pod에서 실행되는 ovnkube-controller 컨테이너에 의해 제어됩니다. OVN 논리 네트워킹 엔티티를 이해하려면 해당 노드의 ovnkube-node Pod 내에서 컨테이너로 실행 중인 northbound 데이터베이스를 검사하여 표시하려는 노드에 있는 오브젝트를 확인해야 합니다.

사전 요구 사항

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

클러스터에서 ovn nbctl 또는 sbctl 명령을 실행하려면 관련 노드의 nbdb 또는 sbdb 컨테이너에 원격 쉘을 열어야 합니다.

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

    $ oc get po -n openshift-ovn-kubernetes

    출력 예

    NAME                                     READY   STATUS    RESTARTS      AGE
    ovnkube-control-plane-8444dff7f9-4lh9k   2/2     Running   0             27m
    ovnkube-control-plane-8444dff7f9-5rjh9   2/2     Running   0             27m
    ovnkube-node-55xs2                       8/8     Running   0             26m
    ovnkube-node-7r84r                       8/8     Running   0             16m
    ovnkube-node-bqq8p                       8/8     Running   0             17m
    ovnkube-node-mkj4f                       8/8     Running   0             26m
    ovnkube-node-mlr8k                       8/8     Running   0             26m
    ovnkube-node-wqn2m                       8/8     Running   0             16m

  2. 선택 사항: 노드 정보가 있는 Pod를 나열하려면 다음 명령을 실행합니다.

    $ oc get pods -n openshift-ovn-kubernetes -owide

    출력 예

    NAME                                     READY   STATUS    RESTARTS      AGE   IP           NODE                                       NOMINATED NODE   READINESS GATES
    ovnkube-control-plane-8444dff7f9-4lh9k   2/2     Running   0             27m   10.0.0.3     ci-ln-t487nnb-72292-mdcnq-master-1         <none>           <none>
    ovnkube-control-plane-8444dff7f9-5rjh9   2/2     Running   0             27m   10.0.0.4     ci-ln-t487nnb-72292-mdcnq-master-2         <none>           <none>
    ovnkube-node-55xs2                       8/8     Running   0             26m   10.0.0.4     ci-ln-t487nnb-72292-mdcnq-master-2         <none>           <none>
    ovnkube-node-7r84r                       8/8     Running   0             17m   10.0.128.3   ci-ln-t487nnb-72292-mdcnq-worker-b-wbz7z   <none>           <none>
    ovnkube-node-bqq8p                       8/8     Running   0             17m   10.0.128.2   ci-ln-t487nnb-72292-mdcnq-worker-a-lh7ms   <none>           <none>
    ovnkube-node-mkj4f                       8/8     Running   0             27m   10.0.0.5     ci-ln-t487nnb-72292-mdcnq-master-0         <none>           <none>
    ovnkube-node-mlr8k                       8/8     Running   0             27m   10.0.0.3     ci-ln-t487nnb-72292-mdcnq-master-1         <none>           <none>
    ovnkube-node-wqn2m                       8/8     Running   0             17m   10.0.128.4   ci-ln-t487nnb-72292-mdcnq-worker-c-przlm   <none>           <none>

  3. 포드로 이동하여 다음 명령을 실행하여 northbound 데이터베이스를 확인합니다.

    $ oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2
  4. 다음 명령을 실행하여 northbound 데이터베이스의 모든 오브젝트를 표시합니다.

    $ ovn-nbctl show

    출력은 여기에 나열하기에는 너무 길 수 있습니다. 목록에는 NAT 규칙, 논리 스위치, 로드 밸런서 등이 포함됩니다.

    다음 선택적 명령 중 일부를 사용하여 특정 구성 요소에 대한 범위를 좁히고 집중할 수 있습니다.

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

      $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \
      -c northd -- ovn-nbctl lr-list

      출력 예

      45339f4f-7d0b-41d0-b5f9-9fca9ce40ce6 (GR_ci-ln-t487nnb-72292-mdcnq-master-2)
      96a0a0f0-e7ed-4fec-8393-3195563de1b8 (ovn_cluster_router)

      참고

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

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

      $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \
      -c nbdb -- ovn-nbctl ls-list

      출력 예

      bdd7dc3d-d848-4a74-b293-cc15128ea614 (ci-ln-t487nnb-72292-mdcnq-master-2)
      b349292d-ee03-4914-935f-1940b6cb91e5 (ext_ci-ln-t487nnb-72292-mdcnq-master-2)
      0aac0754-ea32-4e33-b086-35eeabf0a140 (join)
      992509d7-2c3f-4432-88db-c179e43592e5 (transit_switch)

      참고

      이 출력에서 노드 이름 자체와 조인 스위치를 사용하여 각 노드에 대해 ext 스위치가 있음을 확인할 수 있습니다.

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

      $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \
      -c nbdb -- ovn-nbctl lb-list

      출력 예

      UUID                                    LB                  PROTO      VIP                     IPs
      7c84c673-ed2a-4436-9a1f-9bc5dd181eea    Service_default/    tcp        172.30.0.1:443          10.0.0.3:6443,169.254.169.2:6443,10.0.0.5:6443
      4d663fd9-ddc8-4271-b333-4c0e279e20bb    Service_default/    tcp        172.30.0.1:443          10.0.0.3:6443,10.0.0.4:6443,10.0.0.5:6443
      292eb07f-b82f-4962-868a-4f541d250bca    Service_openshif    tcp        172.30.105.247:443      10.129.0.12:8443
      034b5a7f-bb6a-45e9-8e6d-573a82dc5ee3    Service_openshif    tcp        172.30.192.38:443       10.0.0.3:10259,10.0.0.4:10259,10.0.0.5:10259
      a68bb53e-be84-48df-bd38-bdd82fcd4026    Service_openshif    tcp        172.30.161.125:8443     10.129.0.32:8443
      6cc21b3d-2c54-4c94-8ff5-d8e017269c2e    Service_openshif    tcp        172.30.3.144:443        10.129.0.22:8443
      37996ffd-7268-4862-a27f-61cd62e09c32    Service_openshif    tcp        172.30.181.107:443      10.129.0.18:8443
      81d4da3c-f811-411f-ae0c-bc6713d0861d    Service_openshif    tcp        172.30.228.23:443       10.129.0.29:8443
      ac5a4f3b-b6ba-4ceb-82d0-d84f2c41306e    Service_openshif    tcp        172.30.14.240:9443      10.129.0.36:9443
      c88979fb-1ef5-414b-90ac-43b579351ac9    Service_openshif    tcp        172.30.231.192:9001     10.128.0.5:9001,10.128.2.5:9001,10.129.0.5:9001,10.129.2.4:9001,10.130.0.3:9001,10.131.0.3:9001
      fcb0a3fb-4a77-4230-a84a-be45dce757e8    Service_openshif    tcp        172.30.189.92:443       10.130.0.17:8440
      67ef3e7b-ceb9-4bf0-8d96-b43bde4c9151    Service_openshif    tcp        172.30.67.218:443       10.129.0.9:8443
      d0032fba-7d5e-424a-af25-4ab9b5d46e81    Service_openshif    tcp        172.30.102.137:2379     10.0.0.3:2379,10.0.0.4:2379,10.0.0.5:2379
                                                                  tcp        172.30.102.137:9979     10.0.0.3:9979,10.0.0.4:9979,10.0.0.5:9979
      7361c537-3eec-4e6c-bc0c-0522d182abd4    Service_openshif    tcp        172.30.198.215:9001     10.0.0.3:9001,10.0.0.4:9001,10.0.0.5:9001,10.0.128.2:9001,10.0.128.3:9001,10.0.128.4:9001
      0296c437-1259-410b-a6fd-81c310ad0af5    Service_openshif    tcp        172.30.198.215:9001     10.0.0.3:9001,169.254.169.2:9001,10.0.0.5:9001,10.0.128.2:9001,10.0.128.3:9001,10.0.128.4:9001
      5d5679f5-45b8-479d-9f7c-08b123c688b8    Service_openshif    tcp        172.30.38.253:17698     10.128.0.52:17698,10.129.0.84:17698,10.130.0.60:17698
      2adcbab4-d1c9-447d-9573-b5dc9f2efbfa    Service_openshif    tcp        172.30.148.52:443       10.0.0.4:9202,10.0.0.5:9202
                                                                  tcp        172.30.148.52:444       10.0.0.4:9203,10.0.0.5:9203
                                                                  tcp        172.30.148.52:445       10.0.0.4:9204,10.0.0.5:9204
                                                                  tcp        172.30.148.52:446       10.0.0.4:9205,10.0.0.5:9205
      2a33a6d7-af1b-4892-87cc-326a380b809b    Service_openshif    tcp        172.30.67.219:9091      10.129.2.16:9091,10.131.0.16:9091
                                                                  tcp        172.30.67.219:9092      10.129.2.16:9092,10.131.0.16:9092
                                                                  tcp        172.30.67.219:9093      10.129.2.16:9093,10.131.0.16:9093
                                                                  tcp        172.30.67.219:9094      10.129.2.16:9094,10.131.0.16:9094
      f56f59d7-231a-4974-99b3-792e2741ec8d    Service_openshif    tcp        172.30.89.212:443       10.128.0.41:8443,10.129.0.68:8443,10.130.0.44:8443
      08c2c6d7-d217-4b96-b5d8-c80c4e258116    Service_openshif    tcp        172.30.102.137:2379     10.0.0.3:2379,169.254.169.2:2379,10.0.0.5:2379
                                                                  tcp        172.30.102.137:9979     10.0.0.3:9979,169.254.169.2:9979,10.0.0.5:9979
      60a69c56-fc6a-4de6-bd88-3f2af5ba5665    Service_openshif    tcp        172.30.10.193:443       10.129.0.25:8443
      ab1ef694-0826-4671-a22c-565fc2d282ec    Service_openshif    tcp        172.30.196.123:443      10.128.0.33:8443,10.129.0.64:8443,10.130.0.37:8443
      b1fb34d3-0944-4770-9ee3-2683e7a630e2    Service_openshif    tcp        172.30.158.93:8443      10.129.0.13:8443
      95811c11-56e2-4877-be1e-c78ccb3a82a9    Service_openshif    tcp        172.30.46.85:9001       10.130.0.16:9001
      4baba1d1-b873-4535-884c-3f6fc07a50fd    Service_openshif    tcp        172.30.28.87:443        10.129.0.26:8443
      6c2e1c90-f0ca-484e-8a8e-40e71442110a    Service_openshif    udp        172.30.0.10:53          10.128.0.13:5353,10.128.2.6:5353,10.129.0.39:5353,10.129.2.6:5353,10.130.0.11:5353,10.131.0.9:5353

      참고

      이 잘린 출력에서는 많은 OVN-Kubernetes 로드 밸런서가 있음을 확인할 수 있습니다. OVN-Kubernetes의 로드 밸런서는 서비스를 나타냅니다.

  5. 다음 명령을 실행하여 ovn-nbctl: 명령과 함께 사용 가능한 옵션을 표시합니다.

    $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \
    -c nbdb ovn-nbctl --help

20.2.4. northbound 데이터베이스 콘텐츠를 검사하기 위한 ovn-nbctl의 명령줄 인수

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

참고

콘텐츠를 확인하려는 포드에서 원격 쉘을 열고 ovn-nbctl 명령을 실행합니다.

표 20.1. 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

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

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

각 노드는 해당 노드의 ovnkube-node Pod에서 실행되는 ovnkube-controller 컨테이너에 의해 제어됩니다. OVN 논리 네트워킹 엔티티를 이해하려면 해당 노드의 ovnkube-node Pod 내에서 컨테이너로 실행 중인 northbound 데이터베이스를 검사하여 표시하려는 노드에 있는 오브젝트를 확인해야 합니다.

사전 요구 사항

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

클러스터에서 ovn nbctl 또는 sbctl 명령을 실행하려면 관련 노드의 nbdb 또는 sbdb 컨테이너에 원격 쉘을 열어야 합니다.

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

    $ oc get po -n openshift-ovn-kubernetes

    출력 예

    NAME                                     READY   STATUS    RESTARTS      AGE
    ovnkube-control-plane-8444dff7f9-4lh9k   2/2     Running   0             27m
    ovnkube-control-plane-8444dff7f9-5rjh9   2/2     Running   0             27m
    ovnkube-node-55xs2                       8/8     Running   0             26m
    ovnkube-node-7r84r                       8/8     Running   0             16m
    ovnkube-node-bqq8p                       8/8     Running   0             17m
    ovnkube-node-mkj4f                       8/8     Running   0             26m
    ovnkube-node-mlr8k                       8/8     Running   0             26m
    ovnkube-node-wqn2m                       8/8     Running   0             16m

  2. 선택 사항: 노드 정보가 있는 Pod를 나열하려면 다음 명령을 실행합니다.

    $ oc get pods -n openshift-ovn-kubernetes -owide

    출력 예

    NAME                                     READY   STATUS    RESTARTS      AGE   IP           NODE                                       NOMINATED NODE   READINESS GATES
    ovnkube-control-plane-8444dff7f9-4lh9k   2/2     Running   0             27m   10.0.0.3     ci-ln-t487nnb-72292-mdcnq-master-1         <none>           <none>
    ovnkube-control-plane-8444dff7f9-5rjh9   2/2     Running   0             27m   10.0.0.4     ci-ln-t487nnb-72292-mdcnq-master-2         <none>           <none>
    ovnkube-node-55xs2                       8/8     Running   0             26m   10.0.0.4     ci-ln-t487nnb-72292-mdcnq-master-2         <none>           <none>
    ovnkube-node-7r84r                       8/8     Running   0             17m   10.0.128.3   ci-ln-t487nnb-72292-mdcnq-worker-b-wbz7z   <none>           <none>
    ovnkube-node-bqq8p                       8/8     Running   0             17m   10.0.128.2   ci-ln-t487nnb-72292-mdcnq-worker-a-lh7ms   <none>           <none>
    ovnkube-node-mkj4f                       8/8     Running   0             27m   10.0.0.5     ci-ln-t487nnb-72292-mdcnq-master-0         <none>           <none>
    ovnkube-node-mlr8k                       8/8     Running   0             27m   10.0.0.3     ci-ln-t487nnb-72292-mdcnq-master-1         <none>           <none>
    ovnkube-node-wqn2m                       8/8     Running   0             17m   10.0.128.4   ci-ln-t487nnb-72292-mdcnq-worker-c-przlm   <none>           <none>

  3. 포드로 이동하여 southbound 데이터베이스를 확인합니다.

    $ oc rsh -c sbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2
  4. 다음 명령을 실행하여 southbound 데이터베이스의 모든 오브젝트를 표시합니다.

    $ ovn-sbctl show

    출력 예

    Chassis "5db31703-35e9-413b-8cdf-69e7eecb41f7"
        hostname: ci-ln-9gp362t-72292-v2p94-worker-a-8bmwz
        Encap geneve
            ip: "10.0.128.4"
            options: {csum="true"}
        Port_Binding tstor-ci-ln-9gp362t-72292-v2p94-worker-a-8bmwz
    Chassis "070debed-99b7-4bce-b17d-17e720b7f8bc"
        hostname: ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Encap geneve
            ip: "10.0.128.2"
            options: {csum="true"}
        Port_Binding k8s-ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Port_Binding rtoe-GR_ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Port_Binding openshift-monitoring_alertmanager-main-1
        Port_Binding rtoj-GR_ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Port_Binding etor-GR_ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Port_Binding cr-rtos-ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Port_Binding openshift-e2e-loki_loki-promtail-qcrcz
        Port_Binding jtor-GR_ci-ln-9gp362t-72292-v2p94-worker-b-svmp6
        Port_Binding openshift-multus_network-metrics-daemon-mkd4t
        Port_Binding openshift-ingress-canary_ingress-canary-xtvj4
        Port_Binding openshift-ingress_router-default-6c76cbc498-pvlqk
        Port_Binding openshift-dns_dns-default-zz582
        Port_Binding openshift-monitoring_thanos-querier-57585899f5-lbf4f
        Port_Binding openshift-network-diagnostics_network-check-target-tn228
        Port_Binding openshift-monitoring_prometheus-k8s-0
        Port_Binding openshift-image-registry_image-registry-68899bd877-xqxjj
    Chassis "179ba069-0af1-401c-b044-e5ba90f60fea"
        hostname: ci-ln-9gp362t-72292-v2p94-master-0
        Encap geneve
            ip: "10.0.0.5"
            options: {csum="true"}
        Port_Binding tstor-ci-ln-9gp362t-72292-v2p94-master-0
    Chassis "68c954f2-5a76-47be-9e84-1cb13bd9dab9"
        hostname: ci-ln-9gp362t-72292-v2p94-worker-c-mjf9w
        Encap geneve
            ip: "10.0.128.3"
            options: {csum="true"}
        Port_Binding tstor-ci-ln-9gp362t-72292-v2p94-worker-c-mjf9w
    Chassis "2de65d9e-9abf-4b6e-a51d-a1e038b4d8af"
        hostname: ci-ln-9gp362t-72292-v2p94-master-2
        Encap geneve
            ip: "10.0.0.4"
            options: {csum="true"}
        Port_Binding tstor-ci-ln-9gp362t-72292-v2p94-master-2
    Chassis "1d371cb8-5e21-44fd-9025-c4b162cc4247"
        hostname: ci-ln-9gp362t-72292-v2p94-master-1
        Encap geneve
            ip: "10.0.0.3"
            options: {csum="true"}
        Port_Binding tstor-ci-ln-9gp362t-72292-v2p94-master-1

    이 자세한 출력은 섀시 및 섀시에 연결된 포트를 보여줍니다. 이 경우 모든 라우터 포트와 호스트 네트워킹과 같이 실행되는 모든 항목이 표시됩니다. 모든 Pod는 소스 네트워크 주소 변환(SNAT)을 사용하여 광범위한 네트워크에 통신합니다. 해당 IP 주소는 Pod가 실행 중인 노드의 IP 주소로 변환된 다음 네트워크로 전송됩니다.

    southbound 데이터베이스에 있는 섀시 정보 외에도 southbound 데이터베이스에는 모든 논리 흐름이 있으며 이러한 논리 흐름은 각 노드에서 실행되는 ovn-controller 로 전송됩니다. ovn-controller 는 논리를 공개 흐름 규칙으로 변환하고 궁극적으로 OpenvSwitch 를 프로그램하여 pod가 열린 흐름 규칙을 따르고 네트워크에서 제외할 수 있도록 합니다.

  5. 다음 명령을 실행하여 ovn-sbctl 명령과 함께 사용할 수 있는 옵션을 표시합니다.

    $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \
    -c sbdb ovn-sbctl --help

20.2.6. southbound 데이터베이스 콘텐츠를 검사하는 ovn-sbctl의 명령줄 인수

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

참고

콘텐츠를 확인하려는 포드에서 원격 쉘을 열고 ovn-sbctl 명령을 실행합니다.

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

OVN-sbctl show

특정 노드에 표시된 대로 southbound 데이터베이스 콘텐츠에 대한 개요입니다.

ovn-sbctl list Port_Binding <port>

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

OVN-sbctl dump-flows

논리 흐름을 나열합니다.

20.2.7. OVN-Kubernetes 논리 아키텍처

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

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

OVN-Kubernetes 논리 아키텍처

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

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

20.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

20.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

    출력 예

    944a7b53-7948-4ad2-a494-82b55eeccf87 (GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99)
    84bd4a4c-4b0b-4a47-b0cf-a2c32709fc53 (ovn_cluster_router)

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

    $ ./debug-scripts/network-tools ovn-db-run-command \
    ovn-sbctl find Port_Binding type=localnet

    출력 예

    _uuid               : d05298f5-805b-4838-9224-1211afc2f199
    additional_chassis  : []
    additional_encap    : []
    chassis             : []
    datapath            : f3c2c959-743b-4037-854d-26627902597c
    encap               : []
    external_ids        : {}
    gateway_chassis     : []
    ha_chassis_group    : []
    logical_port        : br-ex_ci-ln-54932yb-72292-kd676-worker-c-rzj99
    mac                 : [unknown]
    mirror_rules        : []
    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

    출력 예

    _uuid               : 5207a1f3-1cf3-42f1-83e9-387bbb06b03c
    additional_chassis  : []
    additional_encap    : []
    chassis             : ca6eb600-3a10-4372-a83e-e0d957c4cd92
    datapath            : f3c2c959-743b-4037-854d-26627902597c
    encap               : []
    external_ids        : {}
    gateway_chassis     : []
    ha_chassis_group    : []
    logical_port        : etor-GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99
    mac                 : ["42:01:0a:00:80:04"]
    mirror_rules        : []
    nat_addresses       : ["42:01:0a:00:80:04 10.0.128.4"]
    options             : {l3gateway-chassis="84737c36-b383-4c83-92c5-2bd5b3c7e772", peer=rtoe-GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99}
    parent_port         : []
    port_security       : []
    requested_additional_chassis: []
    requested_chassis   : []
    tag                 : []
    tunnel_key          : 1
    type                : l3gateway
    up                  : true
    virtual_parent      : []
    
    _uuid               : 6088d647-84f2-43f2-b53f-c9d379042679
    additional_chassis  : []
    additional_encap    : []
    chassis             : ca6eb600-3a10-4372-a83e-e0d957c4cd92
    datapath            : dc9cea00-d94a-41b8-bdb0-89d42d13aa2e
    encap               : []
    external_ids        : {}
    gateway_chassis     : []
    ha_chassis_group    : []
    logical_port        : jtor-GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99
    mac                 : [router]
    mirror_rules        : []
    nat_addresses       : []
    options             : {l3gateway-chassis="84737c36-b383-4c83-92c5-2bd5b3c7e772", peer=rtoj-GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99}
    parent_port         : []
    port_security       : []
    requested_additional_chassis: []
    requested_chassis   : []
    tag                 : []
    tunnel_key          : 2
    type                : l3gateway
    up                  : true
    virtual_parent      : []
    
    [...]

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

    $ ./debug-scripts/network-tools ovn-db-run-command \
    ovn-sbctl find Port_Binding type=patch

    출력 예

    _uuid               : 785fb8b6-ee5a-4792-a415-5b1cb855dac2
    additional_chassis  : []
    additional_encap    : []
    chassis             : []
    datapath            : f1ddd1cc-dc0d-43b4-90ca-12651305acec
    encap               : []
    external_ids        : {}
    gateway_chassis     : []
    ha_chassis_group    : []
    logical_port        : stor-ci-ln-54932yb-72292-kd676-worker-c-rzj99
    mac                 : [router]
    mirror_rules        : []
    nat_addresses       : ["0a:58:0a:80:02:01 10.128.2.1 is_chassis_resident(\"cr-rtos-ci-ln-54932yb-72292-kd676-worker-c-rzj99\")"]
    options             : {peer=rtos-ci-ln-54932yb-72292-kd676-worker-c-rzj99}
    parent_port         : []
    port_security       : []
    requested_additional_chassis: []
    requested_chassis   : []
    tag                 : []
    tunnel_key          : 1
    type                : patch
    up                  : false
    virtual_parent      : []
    
    _uuid               : c01ff587-21a5-40b4-8244-4cd0425e5d9a
    additional_chassis  : []
    additional_encap    : []
    chassis             : []
    datapath            : f6795586-bf92-4f84-9222-efe4ac6a7734
    encap               : []
    external_ids        : {}
    gateway_chassis     : []
    ha_chassis_group    : []
    logical_port        : rtoj-ovn_cluster_router
    mac                 : ["0a:58:64:40:00:01 100.64.0.1/16"]
    mirror_rules        : []
    nat_addresses       : []
    options             : {peer=jtor-ovn_cluster_router}
    parent_port         : []
    port_security       : []
    requested_additional_chassis: []
    requested_chassis   : []
    tag                 : []
    tunnel_key          : 1
    type                : patch
    up                  : false
    virtual_parent      : []
    [...]

20.2.8. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.