Нэг лабораторийн сервер, гурван итгэлийн үүрэг, нэг алдааны домэйн
VPN-ийн орох хэсэг, хувийн үйлчилгээ, CI ажлуудад нэг сервер дээр ч тусдаа эрх хэрэгтэй. Үүргүүдийг салгаж, сүлжээг тусгаарлаж, консолоор сэргээхийг хадгал.
Бүх зүйл бүтээцийн гүйцэтгэгч VPN зочны ашигладаг ижил хост сокетыг шаардах хүртэл ажилладаг ба тэгэхэд ажил яагаад гарцын түлхүүрүүдийг уншиж чадахыг хэн ч тайлбарлаж чадахгүй. Бүгдийг нэг машин дээр суулгасан, учир нь багтсан, мөн зочин бүрд өргөн хандалт олгосон, учир нь ажиллуулах хамгийн хурдан зам нь тэр байсан. Үр дүн нь итгэлийн хил нь цахилгааны кабель болсон хост юм. Үүргүүдийг салгах нь сонсогдохоос бага ажил бөгөөд тэднийг нэрлэхээс эхэлдэг.
Одоо бүгдийг хуваалцдаг гурван үүрэг
VPN-ийн орох хэсэг, хувийн үйлчилгээний багц, бүтээцийн гүйцэтгэгч өөр өөр зүйл хүсдэг. Эхнийх нь нийтийн порт, хувийн талд нарийн сүлжээ хэрэгтэй. Хоёр дахь нь байнгын хадгалалт, програмын нууц хэрэгтэй. Гурав дахь нь өөр хэн нэгний бичсэн кодыг гүйцэтгэдэг.
Гурвуулаад ижил хандалт өгөх нь шинж тэмдгийг ойлгомжгүй болгодог, учир нь тэгэхэд тэдний аль нь ч бусдад нөлөөлж чадна. Хипервизорын сокотод хүрч чадах бүтээцийн ажил нь VPN-ийг зогсоож чадах ажил юм. Удирдлагын сүлжээ рүү маршруттай үйлчилгээний зочин свичийн тохиргоог өөрчилж чадна. Эрх нь асуудал бөгөөд процессын жагсаалт нь зөвхөн тэр гарч буй газар юм. Үүргүүдийг эхлээд нэрлэх нь эрх бүрт амьдрах газар өгдөг.
Доорх ноорог нь тэр хуваалтын эхлэл бөгөөд өндөр боломжийн амлалт биш. Үүнийг шалгах ёстой таамаглал гэж үз, бэлэн зохион байгуулалт гэж биш.
Гурван процессыг биш, гурван үүргийг салга
Нэг хост дээрх гурван зочин гурван эрхийн багц, гурван сүлжээний байрлал өгдөг. Тэд гурван алдааны домэйн өгдөггүй бөгөөд зохион байгуулалт үүнийг чанга хэлэх ёстой.
Нэг зочны эвдрэл бусдад эрхийг автоматаар өгөхгүй тохиолдолд л салгалт тусална, энэ нь хипервизорын тохиргоо, нэрлэх уламжлал биш. VM-ийг гарц гэж нэрлэх нь өөр зочныг хостод хүрэхээс сэргийлэхгүй. Хостын нэрийн оронд виртуал свичийн тохиргоог уншаад, дараа нь зочин бүр таны бодож буй газарт сууж байгааг батал.
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
Топологийг бичиж аваад дараа нь түүнийг эзэмшдэг хэрэгслээр шалга. Буруу гүүрэн дээр гарч ирсэн зочин бол дэлгэрэнгүй мэдээлэл биш, олдвор юм. Аливаа үйлчилгээний тохиргоог өөрчлөхөөс өмнө сүлжээг зас.
VPN зочинд зөвхөн өөрийн хаалгыг онгойлго
Рутер дээр туннелийн портыг нийтэл, өөр юу ч биш. Зочдын удирдлагын портууд нь удирдлагын замд хамаарна, интернетэд биш, мөн хипервизорын өөрийн интерфейс ч тэнд хамаарна.
Хувийн талын сүлжээ нь алсын хэрэглэгчдэд хэрэгтэй үйлчилгээнд хүрч, тэнд зогсох ёстой. Програмын баталгаажуулалт асаалттай хэвээр байна, учир нь туннель бол тээвэр, нэвтрэлт биш. VPN зочны маршрутжуулалтын хүснэгтийг нэг өгүүлбэрээр дүрслэхэд хангалттай жижиг байлга. Хэрэв түүнийг тийм энгийнээр дүрслэж чадахгүй бол хил аль хэдийн бүдгэрсэн.
virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'
Хост дээр сонсож байгаа бөгөөд удирдлагад шаардлагагүй бүхэн огт сонсох ёсгүй. Үүнд хипервизорын API багтана, үүнийг нийтийн интерфейс дээр онгорхой үлдээхэд хялбар.
Бүтээцийн ажлуудад өөр төрлийн хил хэрэгтэй
CI ажил нь репозиторигоор удирдуулсан командуудыг гүйцэтгэдэг тул түүний итгэл хэн код илгээж чадахаас хамаарна. Shell гүйцэтгэгч тэдгээр командуудыг хост дээр гүйцэтгэгчийн хэрэглэгчээр гүйцэтгэдэг бөгөөд энэ нь боломжит хамгийн өргөн хил юм.
Контейнер гүйцэтгэгчид илүү нарийн бөгөөд эрх мэдэлтэй контейнер нь нарийн нь биш. Гүйцэтгэгчийг өөрийн сүлжээний хүрээтэй өөрийн зочинд байлгаж, ажлуудад хэрэгтэй артефакт, байршуулалтын хандалтыг л өг. Нэг удаагийн ажилчид хадгалагдсан төлөвийг багасгадаг; тэд хүртээмж эсвэл нууцын илэрхийг багасгадаггүй. Хоёуланд нь тодорхой хязгаар хэрэгтэй хэвээр.
Үйлчилгээний зочин өгөгдлийг эзэмшдэг тул түүний нөөцлөлтийн төлөвлөгөө нь ажиллах ёстой зүйл юм. Репозиторууд, байршуулалт, өгөгдлийн санг нэг хуваарьт байлга. Ажлын төлөвийг уншихын оронд сэргээлтийг турш.
Гурвуулаа хуваалцдаг алдаанд зориулж төлөвлө
Нэг хост бол нэг алдааны домэйн. Дахин ачаалах нь туннель болон хувийн үйлчилгээ бүрийг нэг агшинд арилгадаг бөгөөд яг тэр үед дотогш орох зам хамгийн чухал болдог.
VPN зочоос хамааралгүй консолын хандалтыг хадгал, энэ нь физик консол, зурвасаас гадуурх удирдлагын интерфейс эсвэл нийлүүлэгчийн консол байж болно. Нэг дискэн дээр хадгалсан агшин зураг нь бие даасан хуулбар биш, мөн өөрөө хамгаалж буй зочны дотор ажилладаг нөөц хуулбар ч биш. Дараа нь хүйтэн эхлэлийг шалгах хуудас биш, дараалал хэлбэрээр турш: хост, виртуал сүлжээ, туннелийн зам, энгийн бүртгэл дор нэг нэрлэсэн програм.
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'
Процессуудын эхлэх дараалал маршрут болон DNS-ийн талаар юу ч нотолдоггүй тул нэгжийн төлөв биш замыг турш. Зам бол алсын хэрэглэгчид үнэхээр хэрэгтэй зүйл юм.