Bir laboratoriya serveri, üç etimad rolu, bir nasazlıq domeni
VPN girişi, özəl xidmətlər və CI işləri hətta bir serverdə ayrı səlahiyyətlər tələb edir. Rolları ayırın, şəbəkələri təcrid edin, konsol bərpasını saxlayın.
Hər şey işləyir, ta ki build runner VPN qonağının istifadə etdiyi host soketinə ehtiyac duyana qədər, və sonra heç kim işin nə üçün şlüzün açarlarını oxuya bildiyini izah edə bilməz. Hər şey bir maşına quraşdırılmışdı, çünki belə sığdı, və hər qonağa geniş giriş verilmişdi, çünki bu, onu işə salmağın ən sürətli yolu idi. Nəticə etimad sərhədi elektrik kabeli olan bir hostdur. Rolları ayırmaq göründüyündən az işdir və onları adlandırmaqla başlayır.
Hazırda hər şeyi paylaşan üç rol
VPN girişi, özəl xidmətlər toplusu və build runner fərqli şeylər istəyir. Birincisi açıq port və dar özəl tərəf şəbəkəsi tələb edir. İkincisi davamlı yaddaş və tətbiq sirləri tələb edir. Üçüncüsü başqasının yazdığı kodu icra edir.
Hər üçünə eyni girişi vermək simptomu qarışıq edən şeydir, çünki bundan sonra onlardan hər hansı biri digərlərinə təsir edə bilər. Hipervisor soketinə çata bilən build işi VPN-i dayandıra bilən işdir. İdarəetmə şəbəkəsinə marşrutu olan xidmət qonağı kommutator konfiqurasiyasını dəyişə bilər. Səlahiyyətlər problemdir və proses siyahısı yalnız bunun göründüyü yerdir. Rolları əvvəlcə adlandırmaq hər səlahiyyətə yaşayacaq bir yer verir.
Aşağıdakı eskiz həmin bölgü üçün başlanğıc nöqtəsidir, yüksək əlçatanlıq vədi deyil. Ona yoxlanılacaq fərziyyə kimi baxın, hazır dizayn kimi deyil.
Üç proses deyil, üç rol ayırın
Bir hostda üç qonaq üç səlahiyyət dəsti və üç şəbəkə mövqeyi verir. Onlar üç nasazlıq domeni vermir və dizayn bunu ucadan deməlidir.
Ayrılma yalnız bir qonaqdakı kompromis digərlərinə avtomatik səlahiyyət vermədikdə kömək edir və bu, adlandırma konvensiyası deyil, hipervisor parametridir. VM-i şlüz adlandırmaq başqa qonağın hosta çatmasına mane olmur. Host adı yerinə virtual kommutator konfiqurasiyasını oxuyun, sonra hər qonağın düşündüyünüz yerdə oturduğunu təsdiqləyin.
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
Topologiyanı yazın və sonra ona sahib olan alətlərlə yoxlayın. Yanlış körpüdə görünən qonaq detal deyil, tapıntıdır. Hər hansı xidmət konfiqurasiyasını dəyişməzdən əvvəl şəbəkəni düzəldin.
VPN qonağı yalnız sahib olduğu qapıları açsın
Tunel portunu marşrutlaşdırıcıda dərc edin və başqa heç nə etməyin. Qonaq idarəetmə portları idarəetmə yolunda olmalıdır, internetdə deyil, və hipervisorun öz interfeysi də orada olmalıdır.
Özəl tərəf şəbəkəsi uzaq istifadəçilərin ehtiyac duyduğu xidmətlərə çatmalı və orada dayanmalıdır. Tətbiq autentifikasiyası işlək qalır, çünki tunel nəqliyyatdır, giriş deyil. VPN qonağının marşrut cədvəlini bir cümlə ilə təsvir etmək üçün kifayət qədər kiçik saxlayın. Əgər onu bu qədər sadə təsvir edə bilmirsinizsə, sərhəd artıq bulanıb.
virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'
Hostda dinləyən və idarəetmə üçün lazım olmayan hər şey ümumiyyətlə dinləməməlidir. Bura hipervisor API-si də daxildir və onu açıq interfeysdə açıq saxlamaq asandır.
Build işləri fərqli növ sərhəd tələb edir
CI işi repozitoriya ilə idarə olunan əmrləri icra edir, ona görə də onun etimadı kodu kimin itələyə bildiyindən asılıdır. Shell icraçısı həmin əmrləri hostda runner istifadəçisi kimi icra edir və bu, mövcud ən geniş sərhəddir.
Konteyner icraçıları daha dardır və imtiyazlı konteyner dar olanlardan deyil. Runner-i öz şəbəkə əhatəsi olan öz qonağında saxlayın və ona yalnız işlərin tələb etdiyi artefakt və yerləşdirmə girişini verin. Birdəfəlik işçilər saxlanan vəziyyəti azaldır; onlar əlçatanlığı və ya sirlərin açılmasını azaltmır. Hər ikisi hələ də açıq məhdudiyyətlər tələb edir.
Xidmətlər qonağı məlumatlara sahibdir, ona görə də onun ehtiyat planı işləməli olan plandır. Repozitoriyaları, yükləmələri və verilənlər bazasını eyni cədvəldə saxlayın. İş statusunu oxumaq yerinə bərpanı sınaqdan keçirin.
Hər üçünün paylaşdığı nasazlıq üçün plan qurun
Bir host bir nasazlıq domenidir. Yenidən başlatma tuneli və hər özəl xidməti eyni anda silir və məhz o anda içəri yol ən çox lazım olur.
VPN qonağından asılı olmayan konsol girişini saxlayın: fiziki konsol, bantdankənar idarəetmə interfeysi və ya provayder konsolu. Eyni diskdə saxlanan snapshot müstəqil surət deyil, qoruduğu qonağın içində işləyən ehtiyat da deyil. Sonra soyuq başlanğıcı yoxlama siyahısı kimi deyil, ardıcıllıq kimi sınayın: host, virtual şəbəkələr, tunel yolu və adi hesab altında bir adlı tətbiq.
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'
Proses başlanğıclarının sırası marşrutlar və DNS haqqında heç nə sübut etmir, ona görə də vahid vəziyyətləri yerinə yolu sınayın. Yol uzaq istifadəçinin həqiqətən ehtiyac duyduğu şeydir.