Nəzəri əsaslar və memarlıq
Laboratoriya işi: Git, GitLab CI / GitHub Actions və Containerlab virtual mühitlərindən istifadə edərək NetDevOps (CI/CD) şəbəkə konfiqurasiya xəttinin qurulması. Əl ilə CLI-ya girmək əvəzinə tam avtomatlaşdırılmış xətt qurulur: 1. Mühəndis Git repozitoriyasında customers.yml faylında dəyişiklik edir və Merge Request açır. 2. Linting və Schema Validation: CI sistemi YAML faylını avtomatik yoxlayır, RD və RT nömrələrinin təkrarlanmadığını təsdiqləyir. 3. Virtual Stenddə Avtotest: CI sistemi Containerlab üzərində virtual şəbəkəni qaldırır, konfiqurasiyaları routerlərə yükləyir və PyATS ilə test edir (BGP qalxdımı, L3VPN ping keçirmi, marşrut sızması varmı). 4. Canary Deployment: bütün testlər uğurla keçdikdən sonra dəyişiklik canlı şəbəkəyə tətbiq edilir və hər hansı anomaliya olduqda avtomatik geri qaytarılır (Automatic Rollback).
Pipeline dəyişiklik müqaviləsi kimi
PE konfiqurasiyasını cihazda insan yox, bir sıra yoxlamalardan keçən Git commit-i dəyişir. Pipeline üç məsələni həll edir: açıq-aşkar yanlış niyyəti buraxmır (məlumat, siyasət), nəyin dəyişəcəyini göstərir (render və diff) və dəyişikliyi dayandırıla və geri qaytarıla biləcək şəkildə çatdırır (canary, təsdiq, rollback). Hər mərhələ yüksək səslə və növbəti cihaza toxunulmazdan əvvəl sınmalıdır.
| Mərhələ | Nəyi yoxlayır | Alətlər | Nəyi bloklayır |
|---|---|---|---|
| lint | YAML sintaksisi, playbook üslubu, render sabitliyi | yamllint, ansible-lint, flake8, ansible-playbook --syntax-check | sınıq YAML və yanlış modullar |
| policy | müştəri RT-si allowlist-dədir, RD unikallığı, ASN:NN formatı | Pydantic/JSON Schema, pytest | müştərilər arasında marşrut sızmasını |
| render | dörd istehsalçı şablonunun deterministik render-i | StrictUndefined ilə Jinja2 | konfiqurasiyada boş dəyərləri |
| diff | Git-dəki və cihazdakı etalona nisbətən nəyin dəyişəcəyi | git diff, --check --diff, compare_config | gözlənilməz silinmələri |
| static | render olunmuş konfiqurasiyaların təhlili | Batfish (Cisco, Junos), Huawei və RouterOS üçün öz testləri | dövrələri və siyasət kəsişmələrini |
| twin | virtual topologiyada canlı test | containerlab, vrnetlab (obrazlar varsa) | statik görünməyənləri |
| canary | geri qaytarma taymeri və son yoxlama ilə bir PE | Ansible serial, commit confirmed | kütləvi zədələnməni |
| rollout | əl ilə təsdiqdən sonra qalan PE-lər | when: manual, resource_group | pipeline-lar arasında yarışı |
Məlumat və siyasət sintaksisdən vacibdir
Sintaksis xətalarını cihazın özü rədd edir: % Invalid input dərhal görünür. Təhlükəli olanlar düzgün, lakin mənaca yanlış dəyişikliklərdir: A müştərisinin RT-si B müştərisinin RT-sinə bərabərdir, RD-lər kəsişir, VRF yad interfeysə bağlanıb. Cihaz belə konfiqurasiyanı etirazsız qəbul edir, nəticələr isə marşrut sızması kimi üzə çıxır. Ona görə CI-ın əsas qapısı məlumat üzərində siyasətdir: müştəri üzrə RT allowlist-i, PE-də RD unikallığı, yad RT-nin idxalına qadağa. Mənfi test məcburidir: A üçün RT 65000:200 olan commit pipeline-ı yıxmalıdır. Belə test yoxdursa, qapının işlədiyini bilmirsiniz.
Git-də render və rəy üçün diff
Effektiv təcrübə yalnız məlumatı yox, render olunmuş konfiqurasiyaları da rendered/<pe>.cfg-də commit etməkdir. Onda rəyçi merge request-də mücərrəd YAML dəyişikliyini yox, hər cihaz üçün real diff görür. İdempotentlik yoxlaması belə həll olunur: dəyişməmiş məlumatda təkrar render heç bir faylı dəyişmir, cihazda --check --diff isə changed=0 qaytarır.
# idempotency gate: second run must not change anything
python render.py --out build/
git diff --exit-code build/ rendered/
ansible-playbook pe_vrf.yml --check --diff | grep -q "changed=0"Canary, təsdiq və rollback
- Junos:
commit check, sonracommit confirmed N: soncommitN dəqiqə ərzində gəlməsə, konfiqurasiya özü geri qayıdır. Bu, idarəetmənin itirilməsindən qoruyur. - IOS-XE: dəyişiklikdən əvvəl etalon saxlanılır (
copy running-config flash:pre-change.cfg); geri qaytarmaconfigure replace flash:pre-change.cfgilə gedir.configure replace ... time Nrejimiconfigure confirməmri ilə təsdiq edilməli taymeri işə salır. - Huawei VRP: VRPv8-də konfiqurasiya
commitəmri ilə tətbiq olunur, tarixçədisplay configuration commit listilə əlçatandır; geri qaytarma saxlanmış vəziyyətə edilir. Dəqiq əmrlər versiyadan asılıdır və stendə yoxlanılır. - RouterOS: tranzaksiya yoxdur. Dəyişiklikdən əvvəl
/system/backup/savevə/exportedilir; ehtiyat nüsxədən bərpa (/system/backup/load) routeri yenidən yükləyir, ona görə RouterOS-da strategiya kiçik idempotent dəyişikliklərə və əl ilə təsdiqə əsaslanır.
Canary yalnız bir PE deyil, həm də gözləmə vaxtıdır: son yoxlama vəziyyəti oxuyur (RT yerindədir, müştəri prefiksləri ikinci PE-də görünür, RR ilə sessiya Established-dir), sonra təsdiq işə düşür, xəta olarsa isə geri qaytarma başlayır. Konfiqurasiyanın geri qaytarılması və şəbəkə vəziyyətinin bərpası fərqli şeylərdir: geri qaytarmadan sonra yumşaq BGP clear lazımdır, əks halda cədvəllər yenidən hesablanmaz.
Paralellik və drift
Eyni PE-ni eyni vaxtda dəyişən iki pipeline yarış yaradır: budağı köhnə olsa belə, sonuncu qalib gəlir. Qoruma: GitLab-da resource_group (və ya GitHub Actions-da concurrency), yalnız qorunan əsas budaqdan yayım, merge request bazasının aktual olması tələbi və konfiqurasiyada rendered from <sha> işarəsi. Cədvəl üzrə pipeline check mode işlədib drift axtarır: cihazda heç kimin commit etmədiyi əl ilə düzəliş. İstənilən sıfırdan fərqli diff insident və ya məlumatı düzəltmə tapşırığıdır.
Sirlər, hüquqlar və audit
Sirlər repozitoriyada saxlanmır: maskalanmış və qorunan CI dəyişənləri, Vault, qısaömürlü tokenlər. Avtomatlaşdırma hesabı minimal rola malikdir, mənbə runner ünvanı ilə məhdudlaşdırılıb. Dəyişikliyin jurnalı merge request-dən, pipeline loglarından, diff artefaktlarından və cihazdakı qeydlərdən (Junos-da show system commit, IOS-XE-də %SYS-5-CONFIG_I) ibarətdir. RT siyasətinin dəyişdirilməsi üçün iki təsdiq edən və rollout-dan əvvəl məcburi əl addımı tələb olunur. Tapşırıq logları sirlərin dəyərlərini çap etməməlidir (no_log: true, söndürülmüş set -x).
Virtual stend son filtr kimi
Statik təhlil yalnız konfiqurasiyaları görür. Virtual router obrazları ilə containerlab real davranışı yoxlayır: PE və RR qaldırır, yaradılmış konfiqurasiyaları tətbiq edir, vpnv4 sessiyalarını və müştəri saytları arasında pingi yoxlayır. İstehsalçı obrazları ayrıca lisenziyalaşdırılır, ona görə bu mərhələ hamıda yoxdur; onsuz canary canlı avadanlıqda real qoruma olaraq qalır.
Memarlıq sxemi və topologiya
+---------------------+ Git Push / Merge Request +---------------------+
| Network Engineer Git| =================================> | CI/CD Runner |
| Branch: feature/vrf | | lint, policy, render|
+---------------------+ | diff, static, twin |
+---------------------+
| gates green
v
+---------------------+
| Canary PE: confirm |
| timer + post-check |
+---------------------+
| approval
v
+---------------------+
| Rollout: other PEs |
+---------------------+