Isang lab server, tatlong papel ng tiwala, isang domain ng pagkabigo
Ang pasukan ng VPN, mga pribadong serbisyo at mga trabahong CI ay nangangailangan ng hiwalay na pribilehiyo kahit sa isang server. Hatiin ang mga papel, ihiwalay ang mga network at panatilihin ang pagbawi sa console.
Gumagana ang lahat hanggang sa kailanganin ng build runner ang parehong host socket na ginagamit ng bisitang VPN, at wala nang makapagpapaliwanag kung bakit mababasa ng isang trabaho ang mga susi ng gateway. Na-install ang lahat sa isang makina dahil kasya ito, at binigyan ng malawak na access ang bawat bisita dahil iyon ang pinakamabilis na paraan para mapagana ito. Ang resulta ay isang host na ang hangganan ng tiwala ay ang kable ng kuryente. Ang paghahati ng mga papel ay kailangan ng mas kaunting trabaho kaysa sa tunog nito, at nagsisimula ito sa pagbibigay ng pangalan sa kanila.
Tatlong papel na kasalukuyang nagbabahagi ng lahat
Isang pasukan ng VPN, isang pangkat ng pribadong serbisyo at isang build runner ay gustong magkaiba ang mga bagay. Ang una ay nangangailangan ng pampublikong port at makitid na network sa pribadong panig. Ang pangalawa ay nangangailangan ng permanenteng imbakan at mga lihim ng aplikasyon. Ang pangatlo ay nagpapatakbo ng code na isinulat ng ibang tao.
Ang pagbibigay ng parehong access sa tatlo ang dahilan kung bakit nakakalito ang sintomas, sapagkat pagkatapos ay maaaring makaapekto ang alinman sa kanila sa iba pa. Ang trabahong build na nakakaabot sa socket ng hypervisor ay trabahong makakapagpahinto ng VPN. Ang bisitang serbisyo na may ruta patungo sa network ng pamamahala ay makapagbabago ng konpigurasyon ng switch. Ang problema ay ang mga pribilehiyo, at ang listahan ng proseso ay tanging lugar kung saan ito lumilitaw. Ang pagbibigay ng pangalan sa mga papel muna ay nagbibigay sa bawat pribilehiyo ng matitirahan.
Ang balangkas sa ibaba ay panimulang punto para sa paghahating iyon, hindi pangako ng mataas na pagiging magagamit. Ituring itong haypotesis na kailangang patunayan, hindi bilang tapos na disenyo.
Hatiin ang tatlong papel, hindi tatlong proseso
Tatlong bisita sa isang host ay nagbibigay ng tatlong pangkat ng pribilehiyo at tatlong posisyon sa network. Hindi sila nagbibigay ng tatlong domain ng pagkabigo, at dapat itong sabihin ng disenyo nang malakas.
Ang paghihiwalay ay makakatulong lamang kung ang pagkasira ng isang bisita ay hindi kusang nagbibigay ng access sa iba, at iyon ay isang setting ng hypervisor, hindi isang kaugalian sa pagbibigay ng pangalan. Ang pagtawag sa isang VM na gateway ay hindi pumipigil sa isa pang bisita na maabot ang host. Basahin ang konpigurasyon ng virtual switch sa halip na ang hostname, pagkatapos ay tiyakin na ang bawat bisita ay nakaupo kung saan mo inaasahan.
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
Isulat ang topolohiya at pagkatapos ay patunayan ito gamit ang mga kasangkapang nagmamay-ari nito. Ang bisitang lumilitaw sa maling tulay ay isang natuklasan, hindi isang detalye. Itama ang network bago baguhin ang anumang konpigurasyon ng serbisyo.
Hayaang buksan ng bisitang VPN ang mga pintuang pag-aari nito lamang
Ilathala ang port ng tunnel sa router at wala nang iba. Ang mga port ng pamamahala ng bisita ay nabibilang sa isang daan ng pamamahala, hindi sa internet, at doon din nabibilang ang interface ng hypervisor mismo.
Ang network sa pribadong panig ay dapat makaabot sa mga serbisyong kailangan ng malalayong gumagamit at doon huminto. Nananatiling bukas ang pagpapatunay ng aplikasyon, dahil ang tunnel ay transportasyon at hindi pag-login. Panatilihing sapat na maliit ang talahanayan ng ruta ng bisitang VPN upang mailarawan ito sa isang pangungusap. Kung hindi mo ito mailarawan nang ganoon kasimple, malabo na ang hangganan.
virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'
Anumang nakikinig sa host na hindi kailangan para sa pamamahala ay hindi dapat makinig kahit kaunti. Kasama rito ang API ng hypervisor, na madaling maiwang nakalantad sa isang pampublikong interface.
Ang mga trabahong build ay nangangailangan ng ibang uri ng hangganan
Ang trabahong CI ay nagpapatakbo ng mga utos na kontrolado ng repository, kaya ang tiwala nito ay nakadepende sa kung sino ang makakapag-push ng code. Ang shell executor ay nagpapatakbo ng mga utos na iyon bilang gumagamit ng runner sa host, na siyang pinakamalawak na hangganang magagamit.
Ang mga container executor ay mas makitid, at ang isang privileged container ay hindi isa sa mga makitid. Panatilihin ang runner sa sarili nitong bisita na may sariling saklaw ng network, at bigyan lamang ito ng access sa artifact at deployment na kailangan ng mga trabaho. Binabawasan ng mga disposable worker ang itinatagong estado; hindi nila binabawasan ang maabot o ang pagkakalantad ng mga lihim. Pareho pa rin silang nangangailangan ng malinaw na limitasyon.
Ang bisitang serbisyo ang nagmamay-ari ng data, kaya ang plano nito sa backup ang dapat gumana. Panatilihin ang mga repository, upload at database sa parehong iskedyul. Subukan ang isang pagbawi sa halip na basahin ang katayuan ng trabaho.
Magplano para sa pagkabigong pinagsasaluhan ng tatlo
Ang isang host ay isang domain ng pagkabigo. Ang isang reboot ay nag-aalis ng tunnel at bawat pribadong serbisyo sa parehong sandali, at iyon ang eksaktong panahong pinakamahalaga ang isang daan papasok.
Panatilihin ang access sa console na hindi umaasa sa bisitang VPN, maging pisikal na console man iyon, isang interface ng pamamahala sa labas ng banda, o console ng provider. Ang snapshot na nakaimbak sa parehong disk ay hindi malayang kopya, at gayundin ang backup na tumatakbo sa loob ng bisitang pinoprotektahan nito. Pagkatapos ay subukan ang malamig na pagsisimula bilang isang pagkakasunod-sunod, hindi bilang isang listahan: host, mga virtual network, daan ng tunnel at isang pinangalanang aplikasyon sa ilalim ng ordinaryong account.
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'
Ang pagkakasunod-sunod ng pagsisimula ng proseso ay walang pinapatunayan tungkol sa mga ruta at DNS, kaya subukan ang daan sa halip na ang mga kalagayan ng unit. Ang daan ang tunay na kailangan ng isang malalayong gumagamit.