شبکه مجازی OVN

اگر شما هم مثل من علاقه زیادی به مباحث کلود داشته باشید احتمالا به این فکر کردید که بتونید سرورهای فیزیکی خودتون رو به صورت یکپارچه مدیریت کنید. اصلا کلود برای همینه که شما بتونید منابعی مثل پردازنده، رم و فضای ذخیره‌سازی رو تبدیل به نیازمندیهای پردازشی و شبکه‌ای کنید.در کلود اصولا دیگه برای هر امکانی نمیرن یه دستگاه بخرن! شما میایی یک تعداد سرور با هارد میخری و فقط با یه سوئیچ این سرورها رو به هم وصل میکنی و بعدش دیگه همه چی با نرم افزار هست.یکی از این نرم افزارها که خیلی هم قدرتمند و قوی هست و الان دیگه زیرساخت شبکه اوپن استک رو داره پشتیبانی میکنه OVN یا Open Virtual Network هست.open virtual networkدر واقع به طور ساده بخوام بگم ovn میاد برای شما گروه‌های مختلف ایجاد میکنه و میتونید سرورهای مجازی رو توی اون گروه‌ها قرار بدید. در واقع توی لایه ۲ و۳ برای شما گروه بندی انجام میده بدون اینکه بخواید ویلن داشته باشید یا کار خاصی انجام بدید یا دستگاهی مثل سوئیچ داشته باشید. البته اینم بگم که همه این کارها رو میتونید با کامندلاین یا کدنویسی انجام بدید که میشه گفت این مزیت قابل توجهیه.یه مثال بزنم و برم سراغ آموزش نصب:من اومدم دو تا سرور مجازی با قابلیت nested virtualization ساختم و در هر کدوم یک سرور مجازی راه اندازی کردم. یک سوئیچ مجازی درست کردم و اومدم دو تا پورت براش تعریف کردم و هر کدوم از سرورها رو به یک پورت اون سوئیچ زدم. الان میتونم از هرکدوم از این دو سرور اون یکی رو با آی پی داخلی پینگ بگیرم و ترافیک از طریق ovn و تانلی که براساس پروتکل GENEVE ساخته بین نودها جابجا میشه.برای نصب در محیط تستی پیشنهادم استفاده از LXD ورژن ۴ به بالا هست که بتونید توش علاوه بر کانتینر، سرور مجازی هم بسازید.پیش نیاز نصب:سه سرور مخصوص دیتابیس و کنترلر ovnدو سرور بعنوان ورکر که در طراحی واقعی سرورهای سخت افزاری هستند که سرورهای ابری روی اون قرار میگیرنبا دستورات زیر میام ۳ تا سرور کانتینری و ۲ تا سرور مجازی درست میکنم:lxc launch images:ubuntu/focal node1 lxc launch images:ubuntu/focal node2 lxc launch images:ubuntu/focal node3 lxc launch images:ubuntu/focal node4 --vm lxc launch images:ubuntu/focal node5 --vmروی node1, node2, node3 دستورات زیر رو بزنید:sudo apt install ovn-central ovn-host systemctl stop ovn-central nano /etc/default/ovn-centralو سپس محتوای زیر رو در هر نود به شکل زیر تغییر بدید:OVN_CTL_OPTS=&quot \ --db-nb-addr=<node1-ip> \ --db-nb-create-insecure-remote=yes \ --db-sb-addr=<node1-ip> \ --db-sb-create-insecure-remote=yes \ --db-nb-cluster-local-addr=<local> \ --db-sb-cluster-local-addr=<local> \ --ovn-northd-nb-db=tcp:<node1-ip>:6641,tcp:<node2-ip>:6641,tcp:<node3-ip>:6641 \ --ovn-northd-sb-db=tcp:<node1-ip>:6642,tcp:<node2-ip>:6642,tcp:<node3-ip>:6642&quotبه جای <local> آی پی سروری که داخلش دارید فایل گفته شده رو ویرایش میکنید رو میذارید.حالا دستور زیر رو در node1, node2, node3 بزنید:systemctl start ovn-centralخب الان ما یک کلاستر ovn داریم که شواهد نشون میده همه چی درسته. دستور زیر رو توی نودهای یک تا ۳ بزنید و خروجی رو بررسی کنید:ovn-sbctl showخب حالا چه کنیم؟ باید بیاییم سرورهای node4 , node5 رو بعنوان ورکر که قراره میزبان سرورهای ابری ما باشند رو به ovn وصل کنیم.sudo apt install ovn-host systemctl enable ovn-hostروی تمام نودهای ۱ تا ۵ دستور زیر رو بزنید تا Open vSwitch راه اندازی بشه:sudo ovs-vsctl set open_vswitch . external_ids:ovn-remote=tcp:<node1-ip>:6642,tcp:<node2-ip>:6642,tcp:<node3-ip>:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=<local>به جای <local> آی پی سروری که داخلش دارید دستور رو میزنید بذارید.الان شما تونستید کار بزرگی کنید. یک کلاستر شبکه دارید که توش میتونید هرچی سوئیچ و روتر دلتون خواست ایجاد کنید.بریم یه تست بزنیم. سناریو:۱- یک سوئیچ مجازی درست میکنم بنام network1۲- دو تا پورت براش تعریف میکنم۳- هر پورت رو توی نودهای ۴ و ۵ ست میکنم ببینم پینگ هم رو دارن یا نه!گام اول: یک سوئیچ مجازی درست میکنم بنام network1ovn-nbctl ls-add network1این دستور رو توی یکی از نودهای یک تا ۳ باید بزنیم اگرم میخواین روی نودهای ورکر بزنید باید آدرس دیتابیس ovn رو بدید اینطوری:ovn-nbctl ls-add network1 --db=tcp:<node1-ip>:6641گام دوم: دو تا پورت تعریف میکنمovn-nbctl lsp-add network1 vm1 ovn-nbctl lsp-add network1 vm2 ovn-nbctl lsp-set-addresses vm1 &quot40:44:00:00:00:01 192.168.0.11&quot ovn-nbctl lsp-set-addresses vm2 &quot40:44:00:00:00:02 192.168.0.12&quotگام سوم: هر پورت رو توی نودهای ۴ و ۵ ست میکنم ببینم پینگ هم رو دارن یا نه!روی node4:ovs-vsctl add-port br-int vm1 -- set Interface vm1 type=internal -- set Interface vm1 external_ids:iface-id=vm1 ip netns add vm1 ip link set vm1 netns vm1 ip netns exec vm1 ip link set vm1 address 40:44:00:00:00:01 ip netns exec vm1 ip addr add 192.168.0.11/24 dev vm1 ip netns exec vm1 ip link set vm1 upروی node5:ovs-vsctl add-port br-int vm2 -- set Interface vm2 type=internal -- set Interface vm2 external_ids:iface-id=vm2 ip netns add vm2 ip link set vm2 netns vm2 ip netns exec vm2 ip link set vm2 address 40:44:00:00:00:02 ip netns exec vm2 ip addr add 192.168.0.12/24 dev vm2 ip netns exec vm2 ip link set vm2 upشاید براتون سوال شده باشه یعنی چی این کار؟؟ اومدم بجای ساخت سرور، یه لینوکس نیم اسپیس ساختم که یعنی سرور مجازیه و توش یه اینترفیس ساختم و به ovn گفتم اینو وصل میکنم به پورت تو. مثلا توی نود۴ وصلش کردم به پورت vm1 و نود۵ به پورت vm2حالا بریم تست پینگ:روی نود ۴:ip netns exec vm1 ping 192.168.0.12 -c2و روی نود ۵:ip netns exec vm2 ping 192.168.0.11 -c2در کمال ناباوری پینگ هم رو دارن :)