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
- 01Puppet (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 تالت مرة. - 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 هيرجّعها.
- 03Ansible (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) — مفيش حاجة متسطّبة على الراوتر. - 04Salt (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
- 05Chef (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 تاني.

