بصمة — منصة عربية لتعليم البرمجة والشبكات والإلكترونيات

Agent ولا agentless؟ Puppet وSalt وChef قصاد Ansible

بنجهّز الشبكة…
01 / ملخص التجربة

Agent ولا agentless؟ Puppet وSalt وChef قصاد Ansible

تلات أدوات بـ agent على السيرفرات (Puppet بيسحب على 8140، Chef على 443، وSalt minion بيفتح 4505/4506 للـ master) وأداة من غير agent (Ansible بـ SSH بس). هتعمل signing للشهادة، تقبل مفتاح، تضيف run-list، وتصلّح ACL بـ Ansible.

مدة التجربة 40 دقيقة · 5 مهام

الأجهزة في بداية التجربة

  • R1 — راوتر
  • MGMT — سويتش
  • WEBSW — سويتش
  • PUPPET — سيرفر
  • SALT — سيرفر
  • CHEF — سيرفر
  • ANS — سيرفر
  • WEB1 — سيرفر
  • WEB2 — سيرفر
  • WEB3 — سيرفر
  • PC1 — كمبيوتر

التوصيلات

  • PUPPET eth0 ↔ MGMT Fa0/1
  • SALT eth0 ↔ MGMT Fa0/2
  • CHEF eth0 ↔ MGMT Fa0/3
  • ANS eth0 ↔ MGMT Fa0/4
  • PC1 eth0 ↔ MGMT Fa0/5
  • R1 Gi0/0/0 ↔ MGMT Fa0/24
  • R1 Gi0/0/1 ↔ WEBSW Fa0/24
  • WEB1 eth0 ↔ WEBSW Fa0/1
  • WEB2 eth0 ↔ WEBSW Fa0/2
  • WEB3 eth0 ↔ WEBSW Fa0/3

العناوين المضبوطة مسبقًا

  • R1 g0/0/0: 10.0.0.1/24
  • R1 g0/0/1: 10.0.1.1/24
02 / المهام التي ستطبقها
  1. 01
    Puppet (agent بيسحب): وجّه WEB1 للسيرفر 10.0.0.10، اعمل signing للشهادة على PUPPET، وصلّح ترتيب site.pp لحد ما الصفحة تبقى «Basma via Puppet»

    يتحقق المعمل من على PC1: الأمر curl http://10.0.1.11 يظهر فيه «Basma via Puppet»

    تلميح / الحل المقترح
    على WEB1: puppet config set server 10.0.0.10 ثم puppet agent -t (هيقولك الشهادة لسه مش signed).
    على PUPPET: puppetserver ca list ثم puppetserver ca sign --certname web1.
    ارجع WEB1 وشغّل puppet agent -t تاني: الـ File هيفشل لأن /var/www/html لسه مش موجود قبل ما nginx يتسطّب. افتح site.pp وضيف للـ file:
        require => Package['nginx'],
    وشغّل puppet agent -t تالت مرة.
  2. 02
    خلّي agent الـ Puppet يشتغل لوحده كل 60 ثانية (service) — ده اللي بيصلّح أي drift من غير ما حد يدخل

    يتحقق المعمل من على WEB1: الأمر service puppet status يظهر فيه «active (running)»، على WEB1: الأمر puppet config print runinterval يظهر فيه «60»

    تلميح / الحل المقترح
    على WEB1: puppet config set runinterval 60 ثم service puppet start. جرّب تغيّر الصفحة بإيدك (http page index.html hacked) واستنى دقيقة: الـ agent هيرجّعها.
  3. 03
    Ansible (agentless): R1 مافيهوش أي agent — كمّل salt-ports.yml وشغّله من ANS عشان يفتح بورتات Salt ‏4505-4506 في الـ ACL

    يتحقق المعمل من على R1: الأمر show access-lists WEB-OUT يظهر فيه «4505»

    تلميح / الحل المقترح
    في salt-ports.yml شيل الـ TODO وخلّي السطر:
              - permit tcp 10.0.1.0 0.0.0.255 host 10.0.0.20 range 4505 4506
    وبعدين على ANS: ansible-playbook salt-ports.yml
    Ansible بيدخل R1 بـ SSH بس ويبعت الأوامر (push) — مفيش حاجة متسطّبة على الراوتر.
  4. 04
    Salt (minion بيكلم الـ master): اقبل مفتاح web2 على SALT وطبّق الـ state ‏web لحد ما الصفحة تبقى «Basma via Salt»

    يتحقق المعمل من على SALT: الأمر salt 'web2' test.ping يظهر فيه «True»، على PC1: الأمر curl http://10.0.1.12 يظهر فيه «Basma via Salt»

    تلميح / الحل المقترح
    على SALT: salt-key -L (هتلاقي web2 تحت Unaccepted بعد ما البورتات اتفتحت) ثم salt-key -a web2 -y.
    استنى ~10 ثواني لحد ما الـ minion يعمل retry ويتصل (salt-run manage.status يقول up)، وبعدين:
    salt 'web2' test.ping
    salt 'web*' state.apply web
  5. 05
    Chef (agent بيسحب): سجّل WEB3 على Chef Server، ضيف recipe[web] للـ run-list، وخلّي الصفحة «Basma via Chef»

    يتحقق المعمل من على CHEF: الأمر knife node show web3 يظهر فيه «recipe[web]»، على PC1: الأمر curl http://10.0.1.13 يظهر فيه «Basma via Chef»

    تلميح / الحل المقترح
    على WEB3: chef-client (أول مرة بيسجّل الـ node والـ run-list فاضية).
    على CHEF: knife node list ثم knife node run_list add web3 'recipe[web]'.
    ارجع WEB3: chef-client تاني.