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ırAlətlərNəyi bloklayır
lintYAML sintaksisi, playbook üslubu, render sabitliyiyamllint, ansible-lint, flake8, ansible-playbook --syntax-checksınıq YAML və yanlış modullar
policymüştəri RT-si allowlist-dədir, RD unikallığı, ASN:NN formatıPydantic/JSON Schema, pytestmüştərilər arasında marşrut sızmasını
renderdörd istehsalçı şablonunun deterministik render-iStrictUndefined ilə Jinja2konfiqurasiyada boş dəyərləri
diffGit-dəki və cihazdakı etalona nisbətən nəyin dəyişəcəyigit diff, --check --diff, compare_configgözlənilməz silinmələri
staticrender olunmuş konfiqurasiyaların təhliliBatfish (Cisco, Junos), Huawei və RouterOS üçün öz testləridövrələri və siyasət kəsişmələrini
twinvirtual topologiyada canlı testcontainerlab, vrnetlab (obrazlar varsa)statik görünməyənləri
canarygeri qaytarma taymeri və son yoxlama ilə bir PEAnsible serial, commit confirmedkütləvi zədələnməni
rolloutəl ilə təsdiqdən sonra qalan PE-lərwhen: manual, resource_grouppipeline-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.

bash
# 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, sonra commit confirmed N: son commit N 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 qaytarma configure replace flash:pre-change.cfg ilə gedir. configure replace ... time N rejimi configure 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 list ilə ə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/save və /export edilir; 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

text
+---------------------+      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  |
                                                           +---------------------+

Trafik axını və etiket steki sxemi