Hammasi ishlaydi, to build runner VPN mehmoni ishlatadigan o'sha host soketiga muhtoj bo'lmaguncha, keyin hech kim ish nima uchun shlyuz kalitlarini o'qiy olishini tushuntira olmaydi. Hammasi bitta mashinaga o'rnatildi, chunki sig'ardi, va har bir mehmonga keng ruxsat berildi, chunki bu uni ishga tushirishning eng tez yo'li edi. Natija — ishonch chegarasi elektr kabeli bo'lgan host. Rollarni ajratish eshitilgandan kamroq mehnat talab qiladi va ularni nomlashdan boshlanadi.

Hozir hamma narsani bo'lishadigan uchta rol

VPN kirish nuqtasi, xususiy xizmatlar to'plami va build runner turli narsalarni xohlaydi. Birinchisiga ommaviy port va xususiy tomonda tor tarmoq kerak. Ikkinchisiga doimiy saqlash va ilova sirlari kerak. Uchinchisi boshqa birov yozgan kodni ishga tushiradi.

Uchalasiga bir xil ruxsat berish alomatni chalkashtirib yuboradigan narsadir, chunki keyin ularning har biri boshqalarga ta'sir qila oladi. Gipervizor soketiga yeta oladigan build ishi VPNni to'xtata oladigan ishdir. Boshqaruv tarmog'iga yo'li bor xizmat mehmoni kommutator sozlamasini o'zgartira oladi. Muammo huquqlarda, jarayonlar ro'yxati esa bu faqat ko'rinadigan joy. Avval rollarni nomlash har bir huquqqa yashash joyini beradi.

Quyidagi chizma bu bo'linish uchun boshlang'ich nuqta, yuqori mavjudlik va'dasi emas. Uni tekshiriladigan faraz deb biling, tayyor dizayn deb emas.

Uch rolni ajrating, uch jarayonni emas

Bitta hostdagi uchta mehmon uchta huquqlar to'plami va uchta tarmoq holatini beradi. Ular uchta nosozlik domenini bermaydi va dizayn buni baland ovozda aytishi kerak.

Ajratish faqat bitta mehmondagi buzilish boshqalarga avtomatik ruxsat bermasa yordam beradi, bu esa gipervizor sozlamasi, nomlash odati emas. VMni shlyuz deb atash boshqa mehmonning hostga yetishini to'xtatmaydi. Host nomi o'rniga virtual kommutator sozlamasini o'qing, keyin har bir mehmon siz o'ylagan joyda turishini tasdiqlang.

host
├─ vpn-gw      10.60.10.2/24   public 51820/udp only
├─ services    10.60.0.10/24   no route to the management network
└─ ci-runner   10.60.20.2/24   outbound only, no host socket

Topologiyani yozing va keyin uni egallab turgan asboblar bilan tekshiring. Noto'g'ri ko'prikda ko'ringan mehmon topilma, detal emas. Har qanday xizmat sozlamasini o'zgartirishdan oldin tarmoqni tuzating.

VPN mehmoni faqat o'ziga tegishli eshiklarni ochsin

Tunnel portini routerda e'lon qiling va boshqa hech narsani. Mehmonlarning boshqaruv portlari boshqaruv yo'liga tegishli, internetga emas, gipervizorning o'z interfeysi ham o'sha yerda.

Xususiy tomondagi tarmoq uzoq foydalanuvchilarga kerak bo'lgan xizmatlarga yetishi va shu yerda to'xtashi kerak. Ilova autentifikatsiyasi yoniq qoladi, chunki tunnel transport, kirish emas. VPN mehmonining marshrutlar jadvalini bitta gap bilan tasvirlash mumkin bo'lgan darajada kichik tuting. Agar uni bu qadar sodda tasvirlay olmasangiz, chegara allaqachon xiralashgan.

virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'

Hostda tinglayotgan va boshqaruvga kerak bo'lmagan har qanday narsa umuman tinglamasligi kerak. Bunga gipervizor API ham kiradi, uni ommaviy interfeysda ochiq qoldirish oson.

Build ishlari boshqa turdagi chegaraga muhtoj

CI ishi repozitoriy tomonidan boshqariladigan buyruqlarni ishga tushiradi, shuning uchun uning ishonchi kodni kim yubora olishiga bog'liq. Shell ijrochisi bu buyruqlarni hostda runner foydalanuvchisi sifatida ishga tushiradi, bu esa mavjud eng keng chegaradir.

Konteyner ijrochilari torroq, imtiyozli konteyner esa o'sha torlardan biri emas. Runnerni o'z tarmoq doirasiga ega o'z mehmonida tuting va unga faqat ish uchun zarur bo'lgan artefakt va joylashtirish ruxsatini bering. Bir martalik ishchilar saqlanadigan holatni kamaytiradi; ular yetib borish yoki sirlarning ochilishini kamaytirmaydi. Ikkisi ham hali aniq chegaralarga muhtoj.

Xizmat mehmoni ma'lumotlarga egalik qiladi, shuning uchun uning zaxira rejasi ishlashi shart. Repozitoriylar, yuklamalar va ma'lumotlar bazasini bitta jadvalda tuting. Ish holatini o'qish o'rniga tiklashni sinab ko'ring.

Uchtasi bo'lishadigan nosozlik uchun reja tuzing

Bitta host bitta nosozlik domenidir. Qayta yuklash tunnelni va har bir xususiy xizmatni bir vaqtda olib tashlaydi, ichkariga kirish yo'li esa aynan o'sha paytda eng muhim bo'ladi.

VPN mehmonga bog'liq bo'lmagan konsol ruxsatini saqlang, u jismoniy konsol, tarmoqdan tashqari boshqaruv interfeysi yoki provayder konsoli bo'lishi mumkin. Xuddi shu diskda saqlangan snapshot mustaqil nusxa emas, u o'zi himoya qiladigan mehmon ichida ishlaydigan zaxira ham emas. Keyin sovuq ishga tushishni ro'yxat sifatida emas, ketma-ketlik sifatida sinang: host, virtual tarmoqlar, tunnel yo'li va oddiy hisob ostidagi bitta nomlangan ilova.

virsh list --all
systemctl is-active libvirtd
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://10.60.0.10/
ss -ltnp | grep -E ':51820|:443'

Jarayonlar ishga tushish tartibi marshrutlar va DNS haqida hech narsani isbotlamaydi, shuning uchun birlik holatlari o'rniga yo'lni sinang. Uzoq foydalanuvchiga aslida kerak bo'lgan narsa yo'ldir.

O'xshash maqolalar