주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
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
)이 필요합니다.
- 호스트된 엔진의 기본 VNIC에 사용되는 공용 서브넷 1개(
10.0.11.0/24
)입니다. - Oracle Linux 커널 기반 가상 머신(KVM) 호스트의 기본 VNIC에 사용되는 개인 서브넷 1개(
10.0.12.0/24
)입니다. - Oracle Linux Virtualization Manager 호스트 엔진과 KVM 호스트 간의 통신에 사용되는 VLAN(Virtual Local Area Network) 1000(
10.0.10.0/24
)입니다. - OVN 가상 네트워크를 OCI로 확장하는 데 사용되는 VLAN 1001(
10.0.20.0/24
)입니다. - NAT 게이트웨이 1개.
- 하나의 인터넷 게이트웨이.
- 하나의 프라이빗 경로 테이블(
0.0.0.0/0
- NAT 게이트웨이)이 있으며 이를 프라이빗 서브넷 및 VLAN 1001과 연관시킵니다. - 하나의 공용 라우트 테이블(인터넷 게이트웨이를 통한
0.0.0.0/0
)이 공용 서브넷과 연결됩니다. - 보안 목록에는 다음이 허용되어야 합니다.
- 모든 송신 연결(
0.0.0.0/0
)이 모든 프로토콜입니다. - VCN CIDR(
10.0.0.0/16
)의 모든 수신 접속입니다. - 클라이언트 PC의 모든 프로토콜에 대한 수신 연결입니다.
- 모든 송신 연결(
솔루션 배치
-
VM 인스턴스 1개를 만듭니다(권장 구성: VM.Standard.E5). Flex는 호스팅된 엔진용 Oracle Linux 8을 실행하는 2개의 OCPU/24GB RAM을 사용합니다. 보조 VNIC를 VM 인스턴스에 연결하고 VLAN 1000에 연결합니다.
-
KVM 호스트로 사용될 Oracle Linux 8을 실행하는 두 개의 BM 인스턴스(권장 구성: BM.Standard.E5.192)를 만듭니다. 각 BM 호스트에 두 개의 보조 VNIC를 연결하고 VLAN 1000 및 1001에 연결합니다.
목표
- OCI에서 Oracle Linux Virtualization Manager Release 4.5를 실행하고 VM이 OCI NAT 게이트웨이를 통해 인터넷에 액세스할 수 있도록 합니다.
필요 조건
-
Oracle Linux Virtualization Manager 호스팅 엔진은 VM(VM.Standard.E5)에서 실행할 수 있습니다. Flex(OCPU 2개/24GB RAM - 테스트됨)
-
Oracle Linux KVM(커널 기반 가상 머신) 호스트는 베어메탈(BM) 호스트(테스트된 BM.Standard.E5.192)에서 실행할 수 있습니다.
-
모든 BM 리소스는 동일한 AD(가용성 도메인)에 생성해야 합니다.
-
모든 호스트에서 Oracle Linux 8을 실행할 수 있습니다(Oracle-Linux-8.10-2024.09.30-0 - 테스트됨).
작업 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를 설치합니다.
-
ol8_baseos_latest
저장소를 사용으로 설정합니다.[root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
-
필요한 저장소를 자동으로 사용 또는 사용 안함으로 설정하는 Oracle Linux Virtualization Manager 릴리스 4.5 패키지를 설치합니다.
[root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
-
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
-
다음 명령을 실행하여 누락된 저장소를 사용으로 설정합니다.
[root@olvm-he opc]# dnf config-manager --enable <repository-name>
-
호스트에서 UEK R7를 실행 중인 경우 다음 명령을 실행합니다.
dnf install -y kernel-uek-modules-extra
-
ovirt-engine
명령을 실행하여 관리자를 설치합니다.dnf install -y ovirt-engine --allowerasing
-
다음 명령을 실행하여 엔진을 구성합니다.
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 VCN 도메인은 공개적으로 분석할 수 없습니다.
- 인스턴스에 대해 구성된 보안 목록/NSG가 포트 443에서 수신 접속을 허용하는지 확인하십시오.
Oracle Linux Virtualization Manager 호스트된 엔진 웹 콘솔에 액세스하려면 로컬 OS(운영 체제) 호스트 파일 C:\Windows\System32\drivers\etc\hosts
에 DNS 레코드를 추가할 수 있습니다.
<VM-public-IP> olvm-he.olvm.defaultvcn.oraclevcn.com
admin@ovirt
사용자 이름과 구성된 비밀번호를 사용하여 인증할 수 있습니다.
작업 3: Oracle Linux KVM(커널 기반 가상 머신) 호스트 설정
첫번째 KVM 호스트부터 시작합니다. 두번째 호스트를 구성하려면 두번째 BM 호스트에 SSH로 접속하고 동일한 명령을 실행해야 합니다. VLAN 1000 인터페이스를 설정할 때 MAC 및 IP 주소를 업데이트합니다.
-
KVM 호스트에 VLAN 1000 및 1001에 연결된 두 개의 보조 VNIC가 있는지 확인합니다.
-
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 주소입니다.
-
ol8_baseos_latest
저장소를 사용으로 설정합니다.[root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
-
필요한 저장소를 자동으로 사용 또는 사용 안함으로 설정하는 Oracle Linux Virtualization Manager 릴리스 4.5 패키지를 설치합니다.
[root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
-
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
-
다음 명령을 실행하여 누락된 저장소를 사용으로 설정합니다.
[root@kvm-1 opc]# dnf config-manager --enable <repository-name>
-
호스트에서 UEK R7를 실행 중인 경우 다음 명령을 실행합니다.
[root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
-
조종석 웹 콘솔을 활성화하고 방화벽 포트를 엽니다.
[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 개인 영역 설정
-
OCI에서 새 프라이빗 DNS 영역을 생성합니다. 자세한 내용은 Creating a Private DNS Zone를 참조하십시오.
- 영역의 이름은
olvm.demo
일 수 있습니다. - VCN의 DNS 프라이빗 뷰에 영역을 연결합니다.
- 영역의 이름은
-
두 KVM 호스트에 대해 두 개의 DNS 레코드를 만들고 변경 사항을 게시합니다.
A 10.0.10.11 kvm1.olvm.demo A 10.0.10.12 kvm2.olvm.demo
작업 5: Oracle Linux Virtualization Manager에 KVM 호스트 추가
-
Oracle Linux Virtualization Manager 웹 콘솔에 연결합니다.
-
VLAN 1000을 사용하도록 ovirtmgmt 네트워크를 업데이트합니다.
-
네트워크 및 네트워크로 이동합니다.
-
ovirtmgmt를 선택하고 Edit를 누릅니다.
-
VLAN 태그 지정 사용을 선택하고 1000을 입력한 다음 확인을 누릅니다.
-
-
KVM 호스트를 추가합니다.
-
Compute(컴퓨트) 및 Hosts(호스트)로 이동합니다.
-
새로 작성을 누르고 다음 정보를 입력합니다.
- 이름:
kvm1.olvm.demo
을 입력합니다. - 호스트 이름:
kvm1.olvm.demo.
를 입력합니다. - 인증: SSH Public Key를 선택합니다.
KVM 호스트의
/root/.ssh/authorized_keys
파일에 공용 SSH 키를 추가하고 기존 컨텐츠를 제거합니다. - 이름:
-
Ok(확인)를 누릅니다.
-
작업 6: 브라우저 신뢰할 수 있는 루트 인증 기관 목록에 Oracle Linux Virtualization Manager CA(인증 기관) 추가
-
https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA
주소에서 CA 인증서를 다운로드합니다. -
브라우저 Settings, Certificates로 이동하고 Oracle Linux Virtualization Manager CA를 신뢰할 수 있는 루트 인증 기관 목록으로 가져옵니다.
작업 7: 새 스토리지 도메인 만들기
-
KVM 호스트와 동일한 가용성 도메인 내에 새 OCI 블록 볼륨을 생성합니다.
-
블록 볼륨을 첫번째 KVM 호스트에 연결하고 Read/write - shareable을 Access로 선택합니다.
-
동일한 블록 볼륨을 두번째 KVM 호스트에 연결하고 액세스로 읽기/쓰기 - 공유 가능을 선택합니다.
-
Oracle Linux Virtualization Manager에서 새 저장소 도메인을 만듭니다.
-
Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 Storage 및 Domains(도메인)로 이동합니다.
-
새 도메인을 누르고 다음 정보를 입력합니다.
- Name:
iscsi-datavol
을 입력합니다. - 스토리지 유형: iSCSI를 선택합니다.
- 호스트:
kvm1.private.zone
를 입력합니다. - 주소:
169.254.2.2
를 입력합니다. - 포트:
3260
를 입력합니다.
- Name:
-
모두 로그인을 누릅니다.
-
검색된 대상을 확장하고 LUN ID에 대해 추가를 누릅니다.
-
새 도메인을 생성하려면 확인을 누릅니다.
-
작업 8: 새 운영 체제 이미지 업로드
-
Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 Storage 및 Disks로 이동합니다.
-
업로드 및 시작을 누릅니다.
-
OS ISO 이미지를 제공합니다. iscsi-datavol 저장소 도메인을 선택하고 Ok를 누릅니다. 자세한 내용은 Get Ubuntu Server를 참조하십시오.
작업 9: OPN(Open Virtual Network) 네트워킹 설정
-
Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 Network, Networks(네트워크)로 이동하고 New(새로 만들기)를 누릅니다.
-
다음 정보를 입력하십시오.
- 이름: 기본값을 선택합니다.
- 외부 제공자에 대해 생성을 선택합니다.
- 외부 제공자:
ovirt-provider-ovn
를 입력합니다. - 네트워크 포트 보안: 사용 안함을 선택합니다.
-
서브넷을 선택하고 다음 정보로 새 서브넷을 생성합니다.
- 이름: 기본값을 선택합니다.
- CIDR:
10.0.150.0/24
를 입력합니다. - 게이트웨이:
10.0.150.1
를 입력합니다.
-
Ok(확인)를 누릅니다.
작업 10: Oracle Linux Virtualization Manager에서 새 가상 머신 프로비전
-
Oracle Linux Virtualization Manager 웹 콘솔로 이동하여 Compute(컴퓨트), Virtual Machines(가상 머신)로 이동하고 New(새로 만들기)를 누릅니다.
-
다음 정보를 입력하십시오.
- 이름:
vm1
을 입력합니다. - 인스턴스 이미지에서 생성을 누르고 크기를 15GB로 입력합니다.
- nic1: 기본값/기본값을 선택합니다.
- 이름:
-
고급 옵션 표시를 누르고 다음 정보를 입력하고 확인을 누릅니다.
- 부트 옵션: CD 연결 -
ubuntu-24.04.1-live-server-amd64.iso
.
- 부트 옵션: CD 연결 -
-
디스크가 생성될 때까지 기다렸다가 생성된 VM을 선택하고 Run(실행)을 누른 후 VM이 시작될 때까지 기다립니다.
-
VM 콘솔에 연결하려면 Console(콘솔), Console Options(콘솔 옵션), NoVNC, Ok(확인), Console(콘솔) 순으로 이동합니다.
OS 설치를 계속합니다. 단계에서는 인터넷을 사용할 수 없습니다.
작업 11: 열린 가상 네트워크를 OCI VCN에 연결
다음 이미지에서는 Oracle Linux Virtualization Manager에서 정의해야 하는 논리적 네트워크의 그림을 볼 수 있습니다.
OCI VLAN 1001에 대한 액세스는 분산 게이트웨이 포트를 통해 제공됩니다. 자세한 내용은 How to create an Open Virtual Network distributed gateway router을 참조하십시오.
-
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.
-
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"
-
router
라는 논리적 라우터를 만듭니다.[root@olvm-he opc]# ovn-nbctl lr-add router
-
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
-
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
-
다음 명령을 실행하여 논리적 네트워크를 표시합니다.
[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"]
-
public
라는 논리적 브리지를 만듭니다.[root@olvm-he opc]# ovn-nbctl ls-add public
-
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
-
분산 라우터 포트를 사용하여
router
를public
논리적 브리지에 연결합니다.[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
-
라우터 포트(첫번째 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
-
라우터 포트의 구성을 확인합니다.
[root@olvm-he opc]# ovn-nbctl lrp-get-gateway-chassis router-public router-public-kvm1.olvm.demo 20 router-public-kvm2.olvm.demo 15
-
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
-
다음 명령을 실행하여 구성 요약을 확인합니다.
[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 호스트와 연관되어 있는지 확인할 수 있습니다. -
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
-
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
-
다음 컨텐트를 사용하여
/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()
-
다음 컨텐트를 사용하여
/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.
-
서비스를 시작합니다.
systemctl enable ovn-ha-gateway-controller.service systemctl start ovn-ha-gateway-controller.service
작업 12: OCI 네트워킹 구성을 완료합니다.
VM1의 패킷은 OCI VLAN 1001에 도달할 수 있어야 합니다. 우리의 계획은 이러한 패킷이 인터넷에 도달 할 수 있도록하는 것입니다.
-
(NAT 게이트웨이를 통해
0.0.0.0/0
경로 지정) 규칙을 사용하여 VLAN에 경로 테이블을 연결해야 합니다. -
인터넷에서 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
) -
이제 이 새 경로를 NAT 게이트웨이와 연관시키고 패킷을 전달하여 VM1에 도달할 수 있습니다.
이 단계에서는 VM1에서 인터넷에 연결할 수 있어야 합니다.
관련 링크
확인
- 작성자 - Andrei Ilas(마스터 수석 클라우드 아키텍트)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Deploy Oracle Linux Virtualization Manager using the Open Virtualization Network Provider on Oracle Cloud Infrastructure
G19503-02
December 2024