주:

Oracle Cloud Infrastructure에서 Open Virtualization Network Provider를 사용하여 Oracle Linux Virtualization Manager 배치

소개

이 사용지침서에서는 팀이 기존 온프레미스 Oracle Linux Virtualization Manager 환경을 OCI(Oracle Cloud Infrastructure)로 확장하여 베어메탈 노드 플리트의 활용도를 높이는 시나리오를 살펴봅니다. Oracle Cloud의 네트워킹 기능을 OPN(Open Virtual Network)과 통합하면 FastConnect를 통해 온프레미스 리소스와 OCI에 배포된 Oracle Linux Virtualization Manager 가상 머신(VM) 간의 연결을 연결할 수 있습니다.

참고: 이 튜토리얼은 테스트 및 평가 목적으로만 제공됩니다. OCI에 대한 Oracle Linux Virtualization Manager 지원은 개발 중이며 실제로는 OCI 시스템 관리가 지원되지 않습니다. Oracle Linux Virtualization Manager에서 OVN을 사용하는 것은 기술 미리 보기를 통해 기능이 아직 개발 중임을 나타냅니다.

솔루션 개요 및 배포

솔루션 개요

다음 리소스가 포함된 새 VCN(10.0.0.0/16)이 필요합니다.

솔루션 아키텍처

솔루션 배치

BM VNIC VLAN 1000년

BM VNIC VLAN 1001년

목표

필요 조건

작업 1: Oracle Linux Virtualization Manager 호스트된 엔진 설정

먼저 보조 인터페이스를 구성합니다. 현재 인터페이스 상태는 다음과 같아야 합니다(기본 VNIC의 전용 IP 주소 무시).

[root@olvm-he opc]# ifconfig
    enp0s5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
            inet 10.0.11.189  netmask 255.255.255.0  broadcast 10.0.11.255
            inet6 fe80::17ff:fe10:3ae0  prefixlen 64  scopeid 0x20<link>
            ether 02:00:17:10:3a:e0  txqueuelen 1000  (Ethernet)
            RX packets 10199  bytes 176890375 (168.6 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 6954  bytes 1777090 (1.6 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether 02:00:17:11:02:0c  txqueuelen 1000  (Ethernet)
            RX packets 19  bytes 6498 (6.3 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 166  bytes 28164 (27.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 80  bytes 6320 (6.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 80  bytes 6320 (6.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

VLAN 1000에서 두번째 인터페이스 enp1s0를 구성합니다.

[root@olvm-he opc]# nmcli connection add type ethernet con-name enp1s0 ifname enp1s0 ipv4.method manual ipv4.address '10.0.10.5/24' ipv4.gateway '10.0.10.1'

이제 Oracle Linux Virtualization Manager 릴리스 4.5를 설치합니다.

  1. ol8_baseos_latest 저장소를 사용으로 설정합니다.

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. 필요한 저장소를 자동으로 사용 또는 사용 안함으로 설정하는 Oracle Linux Virtualization Manager 릴리스 4.5 패키지를 설치합니다.

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. dnf 명령을 실행하여 필요한 저장소가 사용으로 설정되었는지 확인합니다.

    [root@olvm-he opc]# dnf clean all
    [root@olvm-he opc]# dnf repolist
    

    다음 저장소를 사용으로 설정해야 합니다.

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (VDSM의 경우) ol8_UEKR7
  4. 다음 명령을 실행하여 누락된 저장소를 사용으로 설정합니다.

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. 호스트에서 UEK R7를 실행 중인 경우 다음 명령을 실행합니다.

    dnf install -y kernel-uek-modules-extra
    
  6. ovirt-engine 명령을 실행하여 관리자를 설치합니다.

    dnf install -y ovirt-engine --allowerasing
    
  7. 다음 명령을 실행하여 엔진을 구성합니다.

    engine-setup
    

각 구성 단계에 대해 공식 설치 설명서에서 권장 사항을 확인할 수 있습니다. 자세한 내용은 엔진 구성 옵션을 참조하십시오.

작업 2: Oracle Linux Virtualization Manager 웹 콘솔 액세스

Oracle Linux Virtualization Manager가 성공적으로 설치된 경우 콘솔에 웹 액세스 정보가 표시되어야 합니다.

http://olvm-he.olvm.defaultvcn.oraclevcn.com:80/ovirt-engine
https://olvm-he.olvm.defaultvcn.oraclevcn.com:443/ovirt-engine.

주:

Oracle Linux Virtualization Manager 호스트된 엔진 웹 콘솔에 액세스하려면 로컬 OS(운영 체제) 호스트 파일 C:\Windows\System32\drivers\etc\hosts에 DNS 레코드를 추가할 수 있습니다.

<VM-public-IP> olvm-he.olvm.defaultvcn.oraclevcn.com

admin@ovirt 사용자 이름과 구성된 비밀번호를 사용하여 인증할 수 있습니다.

OLVM 웹 콘솔

작업 3: Oracle Linux KVM(커널 기반 가상 머신) 호스트 설정

첫번째 KVM 호스트부터 시작합니다. 두번째 호스트를 구성하려면 두번째 BM 호스트에 SSH로 접속하고 동일한 명령을 실행해야 합니다. VLAN 1000 인터페이스를 설정할 때 MAC 및 IP 주소를 업데이트합니다.

  1. KVM 호스트에 VLAN 1000 및 1001에 연결된 두 개의 보조 VNIC가 있는지 확인합니다.

    VNIC 요약

  2. VLAN 1000에서 보조 VNIC를 설정합니다.

    [root@kvm-1 opc]# nmcli connection add type vlan con-name ens340np0.1000 ifname ens340np0.1000 vlan.parent ens340np0 vlan.id 1000
    [root@kvm-1 opc]# nmcli connection modify ens340np0.1000 ethernet.cloned-mac-address 02:00:17:14:AA:20 ipv4.addresses '10.0.10.11/24' ipv4.gateway '10.0.10.1' ipv4.method manual
    

    참고:

    • 02:00:17:14:AA:20는 첫번째 KVM 호스트에 대한 VLAN 1000 VNIC의 MAC 주소입니다(두번째 KVM 호스트에서 ens340np0.1000 인터페이스를 설정할 때 올바른 MAC 주소를 사용해야 함).
    • 10.0.10.11/24는 VLAN 1000에서 첫번째 KVM 호스트에 사용할 IP 주소입니다.
    • 10.0.10.12/24는 VLAN 1000에서 두번째 KVM 호스트에 사용할 IP 주소입니다.
  3. ol8_baseos_latest 저장소를 사용으로 설정합니다.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. 필요한 저장소를 자동으로 사용 또는 사용 안함으로 설정하는 Oracle Linux Virtualization Manager 릴리스 4.5 패키지를 설치합니다.

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. dnf 명령을 실행하여 필요한 저장소가 사용으로 설정되었는지 확인합니다.

    [root@kvm-1 opc]# dnf clean all
    [root@kvm-1 opc]# dnf repolist
    

    다음 저장소를 사용으로 설정해야 합니다.

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (VDSM의 경우) ol8_UEKR7
  6. 다음 명령을 실행하여 누락된 저장소를 사용으로 설정합니다.

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. 호스트에서 UEK R7를 실행 중인 경우 다음 명령을 실행합니다.

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. 조종석 웹 콘솔을 활성화하고 방화벽 포트를 엽니다.

    [root@kvm-1 opc]# systemctl enable --now cockpit.socket
    [root@kvm-1 opc]# firewall-cmd --permanent --zone=public --add-service=cockpit
    [root@kvm-1 opc]# firewall-cmd --reload
    

작업 4: DNS 개인 영역 설정

  1. OCI에서 새 프라이빗 DNS 영역을 생성합니다. 자세한 내용은 Creating a Private DNS Zone를 참조하십시오.

    • 영역의 이름은 olvm.demo일 수 있습니다.
    • VCN의 DNS 프라이빗 뷰에 영역을 연결합니다.
  2. 두 KVM 호스트에 대해 두 개의 DNS 레코드를 만들고 변경 사항을 게시합니다.

    A 10.0.10.11 kvm1.olvm.demo
    A 10.0.10.12 kvm2.olvm.demo
    

    DNS 레코드

작업 5: Oracle Linux Virtualization Manager에 KVM 호스트 추가

  1. Oracle Linux Virtualization Manager 웹 콘솔에 연결합니다.

  2. VLAN 1000을 사용하도록 ovirtmgmt 네트워크를 업데이트합니다.

    1. 네트워크네트워크로 이동합니다.

    2. ovirtmgmt를 선택하고 Edit를 누릅니다.

    3. VLAN 태그 지정 사용을 선택하고 1000을 입력한 다음 확인을 누릅니다.

  3. KVM 호스트를 추가합니다.

    1. Compute(컴퓨트)Hosts(호스트)로 이동합니다.

    2. 새로 작성을 누르고 다음 정보를 입력합니다.

      • 이름: kvm1.olvm.demo을 입력합니다.
      • 호스트 이름: kvm1.olvm.demo.를 입력합니다.
      • 인증: SSH Public Key를 선택합니다.

      KVM 호스트의 /root/.ssh/authorized_keys 파일에 공용 SSH 키를 추가하고 기존 컨텐츠를 제거합니다.

    3. Ok(확인)를 누릅니다.

    KVM 호스트

작업 6: 브라우저 신뢰할 수 있는 루트 인증 기관 목록에 Oracle Linux Virtualization Manager CA(인증 기관) 추가

  1. https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA 주소에서 CA 인증서를 다운로드합니다.

  2. 브라우저 Settings, Certificates로 이동하고 Oracle Linux Virtualization Manager CA를 신뢰할 수 있는 루트 인증 기관 목록으로 가져옵니다.

작업 7: 새 스토리지 도메인 만들기

  1. KVM 호스트와 동일한 가용성 도메인 내에 새 OCI 블록 볼륨을 생성합니다.

    새 블록 볼륨

  2. 블록 볼륨을 첫번째 KVM 호스트에 연결하고 Read/write - shareableAccess로 선택합니다.

    블록 볼륨 읽기/쓰기 설정

  3. 동일한 블록 볼륨을 두번째 KVM 호스트에 연결하고 액세스읽기/쓰기 - 공유 가능을 선택합니다.

  4. Oracle Linux Virtualization Manager에서 새 저장소 도메인을 만듭니다.

    1. Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 StorageDomains(도메인)로 이동합니다.

    2. 새 도메인을 누르고 다음 정보를 입력합니다.

      • Name: iscsi-datavol을 입력합니다.
      • 스토리지 유형: iSCSI를 선택합니다.
      • 호스트: kvm1.private.zone를 입력합니다.
      • 주소: 169.254.2.2를 입력합니다.
      • 포트: 3260를 입력합니다.
    3. 모두 로그인을 누릅니다.

    4. 검색된 대상을 확장하고 LUN ID에 대해 추가를 누릅니다.

    5. 새 도메인을 생성하려면 확인을 누릅니다.

작업 8: 새 운영 체제 이미지 업로드

  1. Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 StorageDisks로 이동합니다.

  2. 업로드시작을 누릅니다.

  3. OS ISO 이미지를 제공합니다. iscsi-datavol 저장소 도메인을 선택하고 Ok를 누릅니다. 자세한 내용은 Get Ubuntu Server를 참조하십시오.

    새 ISO 업로드

작업 9: OPN(Open Virtual Network) 네트워킹 설정

  1. Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 Network, Networks(네트워크)로 이동하고 New(새로 만들기)를 누릅니다.

  2. 다음 정보를 입력하십시오.

    • 이름: 기본값을 선택합니다.
    • 외부 제공자에 대해 생성을 선택합니다.
    • 외부 제공자: ovirt-provider-ovn를 입력합니다.
    • 네트워크 포트 보안: 사용 안함을 선택합니다.

    새 OVN 네트워크

  3. 서브넷을 선택하고 다음 정보로 새 서브넷을 생성합니다.

    • 이름: 기본값을 선택합니다.
    • CIDR: 10.0.150.0/24를 입력합니다.
    • 게이트웨이: 10.0.150.1를 입력합니다.

    ovn 서브넷 설정

  4. Ok(확인)를 누릅니다.

작업 10: Oracle Linux Virtualization Manager에서 새 가상 머신 프로비전

  1. Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 Compute(컴퓨트), Virtual Machines(가상 머신)로 이동하고 New(새로 만들기)를 누릅니다.

  2. 다음 정보를 입력하십시오.

    • 이름: vm1을 입력합니다.
    • 인스턴스 이미지에서 생성을 누르고 크기15GB로 입력합니다.
    • nic1: 기본값/기본값을 선택합니다.
  3. 고급 옵션 표시를 누르고 다음 정보를 입력하고 확인을 누릅니다.

    • 부트 옵션: CD 연결 - ubuntu-24.04.1-live-server-amd64.iso.

    새 VM

  4. 디스크가 생성될 때까지 기다렸다가 생성된 VM을 선택하고 Run(실행)을 누른 후 VM이 시작될 때까지 기다립니다.

  5. VM 콘솔에 연결하려면 Console(콘솔), Console Options(콘솔 옵션), NoVNC, Ok(확인), Console(콘솔) 순으로 이동합니다.

    OS 설치를 계속합니다. 단계에서는 인터넷을 사용할 수 없습니다.

작업 11: 열린 가상 네트워크를 OCI VCN에 연결

다음 이미지에서는 Oracle Linux Virtualization Manager에서 정의해야 하는 논리적 네트워크의 그림을 볼 수 있습니다.

OVN 네트워킹 다이어그램

OCI VLAN 1001에 대한 액세스는 분산 게이트웨이 포트를 통해 제공됩니다. 자세한 내용은 How to create an Open Virtual Network distributed gateway router을 참조하십시오.

  1. KVM 호스트에서 세번째 VNIC를 구성합니다.

    nmcli connection add type vlan con-name ens340np0.1001 ifname ens340np0.1001 vlan.parent ens340np0 vlan.id 1001
       
    nmcli connection modify ens340np0.1001 ethernet.cloned-mac-address <VNIC-MAC> ipv4.method disabled ipv6.method disabled
       
    # replace the <VNIC-MAC> with the MAC address associated with the VNIC connected to VLAN 1001.
    
  2. Oracle Linux Virtualization Manager 엔진에서 다음 명령을 실행하여 현재 설정을 표시합니다.

    [root@olvm-he opc]# ovn-nbctl show
    switch 9364e7ce-87a9-4bc4-b044-b973e3288bcd (ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea)
        port 35bfefc5-8a7e-4f17-b508-587d764875ba
            addresses: ["56:6f:4b:b2:00:01 dynamic"]
    [root@olvm-he opc]# ovn-sbctl show
    Chassis kvm2.olvm.demo
        hostname: kvm-2.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.12"
            options: {csum="true"}
    Chassis kvm1.olvm.demo
        hostname: kvm-1.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.11"
            options: {csum="true"}
        Port_Binding "35bfefc5-8a7e-4f17-b508-587d764875ba"
    
  3. router라는 논리적 라우터를 만듭니다.

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Oracle Linux Virtualization Manager Default 브리지에 연결하기 위한 라우터 포트를 만듭니다.

    [root@olvm-he opc]# ovn-nbctl lrp-add router router-ovirt-default 40:44:00:00:00:03 10.0.150.1/24
    
  5. Default 브리지를 라우터에 연결합니다.

    [root@olvm-he opc]# ovn-nbctl lsp-add ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea ovirt-default-router
    [root@olvm-he opc]# ovn-nbctl lsp-set-type ovirt-default-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-addresses ovirt-default-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-options ovirt-default-router router-port=router-ovirt-default
    
  6. 다음 명령을 실행하여 논리적 네트워크를 표시합니다.

    [root@olvm-he opc]# ovn-nbctl show
    switch 9364e7ce-87a9-4bc4-b044-b973e3288bcd (ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea)
        port ovirt-default-router
            type: router
            router-port: router-ovirt-default
        port 35bfefc5-8a7e-4f17-b508-587d764875ba
            addresses: ["56:6f:4b:b2:00:01 dynamic"]
    router b4bd08bc-d8c0-43c8-b27e-83e6e1f3b940 (router)
        port router-ovirt-default
            mac: "40:44:00:00:00:03"
            networks: ["10.0.150.1/24"]
    
  7. public라는 논리적 브리지를 만듭니다.

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. provider 네트워크를 통해 로컬 KVM 호스트 포트를 논리적 브리지 public에 연결할 준비를 합니다.

    [root@olvm-he opc]# ovn-nbctl lsp-add public ln-public
    [root@olvm-he opc]# ovn-nbctl lsp-set-type ln-public localnet
    [root@olvm-he opc]# ovn-nbctl lsp-set-addresses ln-public unknown
    [root@olvm-he opc]# ovn-nbctl lsp-set-options ln-public network_name=provider
    
  9. 분산 라우터 포트를 사용하여 routerpublic 논리적 브리지에 연결합니다.

    [root@olvm-he opc]# ovn-nbctl lrp-add router router-public 02:00:17:0F:D1:16 10.0.20.10/24
    [root@olvm-he opc]# ovn-nbctl lsp-add public public-router
    [root@olvm-he opc]# ovn-nbctl lsp-set-type public-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-addresses public-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-options public-router router-port=router-public
    
  10. 라우터 포트(첫번째 KVM 호스트의 높은 우선 순위)의 일정을 잡습니다.

    [root@olvm-he opc]# ovn-nbctl lrp-set-gateway-chassis router-public kvm1.olvm.demo 20
    [root@olvm-he opc]# ovn-nbctl lrp-set-gateway-chassis router-public kvm2.olvm.demo 15
    
  11. 라우터 포트의 구성을 확인합니다.

    [root@olvm-he opc]# ovn-nbctl lrp-get-gateway-chassis router-public
    router-public-kvm1.olvm.demo    20
    router-public-kvm2.olvm.demo    15
    
  12. OCI VLAN 게이트웨이를 통해 0.0.0.0/0에 대한 다음 홉을 정의합니다.

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. 다음 명령을 실행하여 구성 요약을 확인합니다.

    [root@olvm-he opc]# ovn-nbctl show
    switch a7ce3f64-44e2-4a60-993b-b2d230a13212 (public)
        port public-router
            type: router
            router-port: router-public
        port ln-public
            type: localnet
            addresses: ["unknown"]
    switch 9364e7ce-87a9-4bc4-b044-b973e3288bcd (ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea)
        port ovirt-default-router
            type: router
            router-port: router-ovirt-default
        port 35bfefc5-8a7e-4f17-b508-587d764875ba
            addresses: ["56:6f:4b:b2:00:01 dynamic"]
    router b4bd08bc-d8c0-43c8-b27e-83e6e1f3b940 (router)
        port router-ovirt-default
            mac: "40:44:00:00:00:03"
            networks: ["10.0.150.1/24"]
        port router-public
            mac: "02:00:17:0F:D1:16"
            networks: ["10.0.20.10/24"]
            gateway chassis: [kvm1.olvm.demo kvm2.olvm.demo]
    [root@olvm-he opc]# ovn-sbctl show
    Chassis kvm2.olvm.demo
        hostname: kvm-2.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.12"
            options: {csum="true"}
    Chassis kvm1.olvm.demo
        hostname: kvm-1.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.11"
            options: {csum="true"}
        Port_Binding cr-router-public
        Port_Binding "35bfefc5-8a7e-4f17-b508-587d764875ba"
    

    kvm1.olvm.demo 섹션의 Port_Binding cr-router-public에서 라우터 포트가 첫번째 KVM 호스트와 연관되어 있는지 확인할 수 있습니다.

  14. VLAN 1001에 연결된 KVM 호스트의 로컬 인터페이스를 provider 네트워크에 매핑합니다.

    [root@kvm-1 opc]# ovs-vsctl set open . external-ids:ovn-cms-options="enable-chassis-as-gw=true"
    [root@kvm-1 opc]# ovs-vsctl set open . external-ids:ovn-bridge-mappings=provider:br-provider
    [root@kvm-1 opc]# ovs-vsctl --may-exist add-br br-provider
    [root@kvm-1 opc]# ovs-vsctl --may-exist add-port br-provider ens340np0.1001
    [root@kvm-1 opc]# ovs-vsctl set open . external-ids:ovn-chassis-mac-mappings=br-provider:02:00:17:0F:D1:16
        
    [root@kvm-2 opc]# ovs-vsctl set open . external-ids:ovn-cms-options="enable-chassis-as-gw=true"
    [root@kvm-2 opc]# ovs-vsctl set open . external-ids:ovn-bridge-mappings=provider:br-provider
    [root@kvm-2 opc]# ovs-vsctl --may-exist add-br br-provider
    [root@kvm-2 opc]# ovs-vsctl --may-exist add-port br-provider ens340np0.1001
    [root@kvm-2 opc]# ovs-vsctl set open . external-ids:ovn-chassis-mac-mappings=br-provider:02:00:17:08:08:A5
    
  15. OCI VLAN은 VLAN에 연결된 장치와 연관된 MAC 주소에만 프레임을 제공합니다.

    NAT를 사용하지 않는 경우 논리적 라우터 포트의 소유자가 변경될 경우 활성 섀시의 MAC 주소와 일치하도록 논리적 라우터 포트 MAC 주소를 업데이트해야 합니다.

    다음 서비스가 이 작업을 처리합니다. 섀시 MAC 주소 매핑으로 Open Virtual Network SB 데이터베이스를 업데이트합니다(스위치오버 컨트롤러 기능에 필요).

    [root@olvm-he opc]# ovn-sbctl set chassis kvm1.olvm.demo external_ids:ovn-chassis-mac-mappings=br-provider:02:00:17:0F:D1:16 #replace with the MAC address of the VLAN1001 VNIC on KVM1 host
    [root@olvm-he opc]# ovn-sbctl set chassis kvm2.olvm.demo external_ids:ovn-chassis-mac-mappings=br-provider:02:00:17:08:08:A5 #replace with the MAC address of the the VLAN1001 VNIC on KVM2 host
    
  16. 다음 컨텐트를 사용하여 /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py라는 파일을 생성합니다.

    import logging
    import os
    import sys
    import traceback
        
    from ovsdbapp.backend.ovs_idl import connection
    from ovsdbapp.backend.ovs_idl import idlutils
    from ovsdbapp.schema.ovn_southbound import impl_idl as impl_sbidl
    from ovsdbapp.schema.ovn_northbound import impl_idl as impl_nbidl
    from ovsdbapp.backend.ovs_idl import event as row_event
    from threading import Event
        
        
    stdout_handler = logging.StreamHandler(stream=sys.stdout)
        
    logging.basicConfig(
        level=logging.INFO, 
        format='%(processName)s %(threadName)s:	%(asctime)s - %(name)s - %(module)s - %(levelname)s - %(message)s',
        handlers = [stdout_handler]
    )
        
    logger = logging.getLogger('main')
        
        
    OVN_MONITORED_LOGICAL_PORT = os.environ.get('OVN_MONITORED_LOGICAL_PORT', '')
        
    if not OVN_MONITORED_LOGICAL_PORT:
        logger.info("No distributed router port name found. Check if the `OVN_MONITORED_LOGICAL_PORT` is defined.")
        sys.exit(1)
        
    conn_sb = "unix:/var/run/ovn/ovnsb_db.sock"
    conn_nb = "unix:/var/run/ovn/ovnnb_db.sock"
        
    class PortBindingEvent(row_event.RowEvent):
        """
        Port_Binding event
        """
        
        def __init__(self, monitored_logical_port):
            table = 'Port_Binding'
            self.monitored_logical_port = monitored_logical_port
            events = (self.ROW_UPDATE)
            super().__init__(events, table, None)
            self.event_name = self.__class__.__name__
        
        def match_fn(self, event, row, old):
            try:
                # Check if the event is for the distributed gateway port.
                if row.logical_port != self.monitored_logical_port:
                    return False
        
                # Check if chassis data is present and the chassis field was modified.
                logger.debug(f"Event match_fn with row: {row.__repr__} | old: {old.__dict__}")
                if len(row.chassis) and old._data.get("chassis", None):
                    logger.info(f"The monitored router port has been allocated to a new chassis: {row.chassis[0].name}")
                    return True
        
            except Exception as e:
                logger.error(traceback.format_exc())
            return False
        
        def run(self, event, row, old):
            # Determine the MAC address that should be used in the new chassis
            chassis_config = api_sb.db_get("Chassis", row.chassis[0].name, "other_config").execute()
            logger.debug(f"current chassis_config: {chassis_config}")
        
            # Fetching the new chassis MAC address
            new_chassis_mac = chassis_config.get("ovn-chassis-mac-mappings", "")[-17:]
            logger.debug(f"New chassis MAC: {new_chassis_mac}")
            if not new_chassis_mac:
                logger.error('The chassis MAC mappings has not been defined in the OVN SB database.')
                logger.error('Please update the chassis MAP mappings using the command:')
                logger.error('ovn-sbctl set chassis <chassis-name> external_ids:ovn-chassis-mac-mappings="<ext-br>:02:00:17:04:C2:99"')
                logger.error('Could not update the distributed routed port MAC address.')
                return
        
            # Fetching the distributed port name
            port_name = row.options.get('distributed-port')
            logger.debug(f"Port Name: {port_name}")
        
            # Updating the router port MAC Address
            api_nb.db_set("Logical_Router_Port", port_name, ("mac", new_chassis_mac)).execute()
            logger.info(f"MAC address for the router port {port_name} has been updated to: {new_chassis_mac}")
        
    class BaseOvnSbIdl(connection.OvsdbIdl):
        def __init__(self, remote, schema, **kwargs):
        
            event = PortBindingEvent(OVN_MONITORED_LOGICAL_PORT)
            self.notify_handler = row_event.RowEventHandler()
            self.notify_handler.watch_event(event)
        
            super(BaseOvnSbIdl, self).__init__(remote, schema, **kwargs)
        
        def notify(self, event, row, updates=None):
            self.notify_handler.notify(event, row, updates)
        
        
    i_sb = BaseOvnSbIdl.from_server(conn_sb, 'OVN_Southbound')
    i_nb = connection.OvsdbIdl.from_server(conn_nb, 'OVN_Northbound')
        
    # The ovsdbapp Connection object
    try:
        c_sb = connection.Connection(idl=i_sb, timeout=3)
        c_nb = connection.Connection(idl=i_nb, timeout=3)
    except Exception as e:
        logger.error(f'Unable to connect to the OVN databases: {traceback.format_exc()}')
        sys.exit(1)
        
    # The OVN_Northbound API implementation object
        
    api_sb = impl_sbidl.OvnSbApiIdlImpl(c_sb)
    api_nb = impl_nbidl.OvnNbApiIdlImpl(c_nb)
        
    logger.info(f'Started monitoring the distributed logical port: {OVN_MONITORED_LOGICAL_PORT}')
        
    Event().wait()
    
  17. 다음 컨텐트를 사용하여 /etc/systemd/system/ovn-ha-gateway-controller.service라는 파일을 생성합니다.

    [Unit]
    Description=oVirt HA Gateway port controller
    Requires=ovsdb-server.service
    After=ovsdb-server.service
        
    [Service]
    Environment="OVN_MONITORED_LOGICAL_PORT=cr-router-port"
    Type=simple
    ExecStart=/usr/libexec/platform-python /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py
    ExecStop=
    Restart=always
    RestartSec=10
        
    [Install]
    WantedBy=multi-user.target
    Enable and start the service.
    
  18. 서비스를 시작합니다.

    systemctl enable ovn-ha-gateway-controller.service
    systemctl start ovn-ha-gateway-controller.service
    

작업 12: OCI 네트워킹 구성을 완료합니다.

VM1의 패킷은 OCI VLAN 1001에 도달할 수 있어야 합니다. 우리의 계획은 이러한 패킷이 인터넷에 도달 할 수 있도록하는 것입니다.

  1. (NAT 게이트웨이를 통해 0.0.0.0/0 경로 지정) 규칙을 사용하여 VLAN에 경로 테이블을 연결해야 합니다.

    블란렛

  2. 인터넷에서 VM1으로 돌아가는 트래픽의 경우 CIDR 10.0.150.0/24에 대한 경로 지정을 처리해야 합니다. VLAN 1001에 대한 외부 IP를 정의해야 합니다. 논리적 라우터 포트 10.0.20.10과 연관된 IP 주소입니다.

    외부 액세스

    이 IP 주소를 정의하면 다음 규칙을 사용하여 새 경로 지정 테이블을 생성합니다. ( 경로 10.0.150.0/24 - 10.0.20.10)

    올밤 RT

  3. 이제 이 새 경로를 NAT 게이트웨이와 연관시키고 패킷을 전달하여 VM1에 도달할 수 있습니다.

    NAT GW 경로 연관

    이 단계에서는 VM1에서 인터넷에 연결할 수 있어야 합니다.

    핑 테스트

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.