Puppet หรือ Chef เหมาะสมสำหรับการจัดการการกำหนดค่าเซิร์ฟเวอร์ขั้นพื้นฐานในสภาพแวดล้อมที่มีผู้เช่าหลายรายหรือไม่?


9

สิ่งนี้เกี่ยวข้องกับสภาพแวดล้อมหลายผู้เช่าเช่น บริษัท โฮสติ้งขนาดเล็ก

Puppet (หรือคล้ายกัน) เป็นเทคโนโลยีที่เหมาะสมสำหรับการดูแลการเปลี่ยนแปลงพื้นฐาน แต่สำคัญหรือไม่? ตัวอย่างเช่น:

  • การอัปเดตตัวแก้ไข DNS (resolv.conf)
  • การตั้งค่าคีย์ SSH
  • กำลังอัปเดตการกำหนดค่า NTP
  • การกำหนดค่า snmpd
  • การปรับใช้สคริปต์การตรวจสอบเช่นส่วนขยาย SNMP Perl หรือสคริปต์ Nagios

ความกังวลของฉันเกี่ยวกับความปลอดภัยและการรุกราน:

  1. ฉันไม่ต้องการให้เซิร์ฟเวอร์ใด ๆ สามารถดูการกำหนดค่าใด ๆ ที่ไม่ควรทำ
  2. ฉันกังวลว่า Puppet master อาจเสี่ยงต่อการถูกโจมตีโดยเซิร์ฟเวอร์ที่ถูกบุกรุก
  3. ฉันไม่ต้องการให้ Puppet ทำการเปลี่ยนแปลงใด ๆ ที่ไม่ควรทำหรือย้อนกลับการเปลี่ยนแปลงด้วยตนเองที่ทำบนเซิร์ฟเวอร์

ฉันควรจะพูดแบบนี้โดยบอกว่าฉันไม่เคยใช้ Puppet ในการผลิตมีเพียงแค่การเล่นอย่างรวดเร็วในห้องปฏิบัติการทดสอบดังนั้นฉันจึงคิดว่าวิธีนี้ผิด!

คำตอบ:


6

ลองใช้ Ansible (ansible.cc) อาจเป็นสำหรับคุณ ไม่มีตัวแทนที่ทำงานกับลูกค้าของคุณ มันเติบโตอย่างรวดเร็วมาก

อีกทางเลือกที่ดีมากคือ Salt Stack

Ansible และ Salt นั้นเข้าใจง่ายคุณสามารถใช้มันเป็นเครื่องมือบรรทัดคำสั่งหากคุณต้องการเช่นเชลล์แบบกระจาย


1
ฉันรู้ว่าฉันถามสิ่งนี้มานานแล้ว คุณจะดีใจที่รู้ว่านี่คือคำตอบ ตอนนี้เราใช้ Ansible ในการเปิดตัวเซิร์ฟเวอร์ 10s ต่อวันโดยอัตโนมัติและจัดการ 1,000s ในรูปแบบที่ลืมไม่ลง มันเยี่ยมมากมานานกว่าหนึ่งปีแล้ว
SimonJGreen

9

ใช่มันเป็นไปได้อย่างแน่นอน ตัดสินใจว่าคุณควรทำเช่นนั้นหรือไม่นั้นขึ้นอยู่กับคุณ

เกี่ยวกับคำค้นหาของคุณ:

1) ยุติธรรมพอ ปริมาณข้อมูลใช้ ssl ดังนั้นการจัดการใบรับรองจึงมีความสำคัญ นอกจากนี้อย่าเชื่อถือ 'ข้อเท็จจริง' ใด ๆ ที่ลูกค้าแจ้งไว้เกี่ยวกับตัวตนของตนเนื่องจากลูกค้าสามารถเปลี่ยนแปลงได้ คุณต้องการพึ่งพาใบรับรอง SSL ของลูกค้าเพื่อให้การรับรองความถูกต้องของเซิร์ฟเวอร์ จะซื่อสัตย์ถ้าคุณใช้สิ่งต่าง ๆ เช่น hiera อย่างถูกต้องและหลีกเลี่ยงชื่อโฮสต์ขนาดใหญ่ตามบล็อก if-in ในรหัสของคุณ (ซึ่งคุณควรจริงๆ) คุณจะไม่เป็นไร

2) ไม่ควรสมมติว่าคุณเก็บมันไว้ กำหนดค่าอย่างเหมาะสมมีเพียงเวกเตอร์ขนาดเล็กสำหรับ puppetmaster ที่จะถูกโจมตีจากลูกค้า ที่กล่าวไว้ว่าเอฟเฟ็กต์ถ้ามันได้รับการโจมตีมีขนาดใหญ่ดังนั้นโปรดระมัดระวังในการล็อคมันลง

3) นั่นเป็นปัญหาการทดสอบและการปรับใช้จริง ๆ หากคุณมีรหัสหุ่นเชิดมันจะไม่ขันไฟล์ของคุณ ใช้เวลาสักครู่เพื่อให้ได้การจัดเรียงนั้น แต่สำหรับพื้นฐาน (เช่นที่คุณต้องการ) ไม่นาน


4

Puppet (หรือคล้ายกัน) เป็นเทคโนโลยีที่เหมาะสมสำหรับการดูแลการเปลี่ยนแปลงพื้นฐาน แต่สำคัญหรือไม่?

ใช่มันสามารถใช้วิธีนี้ ฉันใช้สิ่งนี้เพื่อสนับสนุนระบบไคลเอนต์ภายนอก

ฉันไม่ต้องการให้เซิร์ฟเวอร์ใด ๆ สามารถดูการกำหนดค่าใด ๆ ที่ไม่ควรทำ

หากคุณกำลังใช้หุ่นคุณจะต้องไม่เปิดใช้งานการลงชื่ออัตโนมัติ Autosign อนุญาตให้โฮสต์ร้องขอใบรับรองโดยอัตโนมัติ การกำหนดค่าและการอนุญาตของคุณจะเชื่อมโยงโดยตรงกับ CN ในใบรับรอง คุณไม่ต้องการให้คอมพิวเตอร์สุ่มมาออนไลน์และสามารถอ้างได้ว่าพวกเขาเป็นระบบที่มีความปลอดภัยสูง

หากคุณหวาดระแวงจริงๆคุณสามารถปรับการตั้งค่าเซิร์ฟเวอร์หุ่นกระบอกเพื่อสร้างการแชร์ที่มีเพียงบางระบบเท่านั้นที่สามารถเข้าถึงได้ การเข้าถึงไฟล์เซิร์ฟเวอร์ขึ้นอยู่กับใบรับรอง

ฉันไม่ต้องการให้ Puppet ทำการเปลี่ยนแปลงใด ๆ ที่ไม่ควรทำหรือย้อนกลับการเปลี่ยนแปลงด้วยตนเองที่ทำบนเซิร์ฟเวอร์

มีวิธีการที่แตกต่างกันสองวิธีในการอนุญาตการเปลี่ยนแปลงในท้องถิ่น

วิธีหนึ่งที่ฉันใช้บ่อยอยู่ด้านล่าง โดยทั่วไปถ้าคุณส่งรายการไปยัง a sourceหุ่นเชิดก็ลองแต่ละรายการในรายการ ดังนั้นฉันจึงเพิ่มรายการแรกในรายการเพื่อชี้ไปที่ไฟล์ในเครื่อง

  file { '/etc/ssh/sshd_config':
    ensure => present,
    source => ["/etc/ssh/sshd_config_local",
               "puppet:///modules/ssh/$ssh_config_file"],
    ...
  }

ตัวเลือกอื่นจะใช้ประโยชน์จาก symlinks หากมีคนต้องการใช้รุ่นหุ่นเชิดพวกเขาจะเชื่อมโยงไปยังไฟล์รุ่นหุ่นเชิด หากพวกเขาต้องการบำรุงรักษาการกำหนดค่าของพวกเขาในท้องถิ่นพวกเขาจะไม่สร้าง symlink

  file { '/etc/ssh/sshd_config_puppet':
    ensure => present,
    source => "puppet:///modules/ssh/$ssh_config_file",
    ...
  }

ความเป็นไปได้อื่นคือการใช้ augeas เพื่อทำการเปลี่ยนแปลงระดับบรรทัดแทนที่จะเปลี่ยนไฟล์ทั้งหมด ระมัดระวังเกี่ยวกับสิ่งที่คุณเปลี่ยนแปลง


1

3> ไม่มีการเลิกทำแบบอัตโนมัติใน Puppet หรือในเครื่องมือดังกล่าว คุณต้องเขียนรหัสที่ชัดเจนเพื่อยกเลิก นอกจากนี้คุณสามารถวิจัยคุณลักษณะสภาพแวดล้อมของหุ่นเชิดมีห้องปฏิบัติการทดสอบที่มีการทดสอบโค้ดใหม่ (อาจเป็น VM) และใช้การตรวจสอบโค้ด


ไม่จริงอย่างเต็มที่ Chef ทำการสำรองข้อมูลของไฟล์ใด ๆ ที่มีการเปลี่ยนแปลง/var/lib/chefโดยค่าเริ่มต้น (ยกเว้นว่ามีการกำหนดค่าทรัพยากรให้ไม่มีการสำรองข้อมูลเช่นข้อมูลที่มีความอ่อนไหว) และด้วยตัวdocจัดรูปแบบคุณจะเห็นความแตกต่างในเอาต์พุตเทอร์มินัล
Maciej Pasternacki

ใช่แล้ว Puppet ก็สามารถทำการสำรองข้อมูลได้หลายอย่างเช่นกัน แต่คุณจะทราบได้อย่างไรว่าสำรองข้อมูลใดที่จะกู้คืน คุณต้องเขียนโค้ด Chef / Puppet หรือสคริปต์ภายนอกเพื่อที่จะทำการกระทำนั้นจริงหรือ สิ่งที่เกี่ยวกับทรัพยากรที่ไม่ใช่ไฟล์เช่นการย้อนกลับไปยังแพ็คเกจก่อนหน้าด้วยรุ่นที่ระบุ? บริการอะไรบ้าง หากคุณมีรหัสที่ระบุว่า "รับรองการทำงาน" และต้องการเปลี่ยนรหัสคุณจะต้องเปลี่ยนรหัสเป็น "รับรองว่าหยุดแล้ว"
ไม่ใช่ตอนนี้

แนวคิดคือการเรียกใช้การจัดการการกำหนดค่าเป็นแบบทางเดียว ไม่มีขั้นตอนการย้อนกลับที่ได้รับการสนับสนุนหรือทำงานได้อย่างสมบูรณ์ "ทำงานแบบแห้ง" (มีโหมด Whyrun ใน Chef ที่เป็นเพียงการตรวจสอบข้อเสนอแนะ / การมีสติมากกว่าการจำลองแบบเต็ม (ดูblog.afistfulofservers.net/post/2012/12/21/) …สำหรับคำอธิบายที่ยาวขึ้น) คุณไม่สามารถยกเลิกการเปลี่ยนรหัสผ่านของผู้ใช้ ฯลฯ นี่คือเหตุผลที่ฉันเขียนว่า "ไม่เป็นความจริงอย่างสมบูรณ์" - ไม่มีการย้อนกลับที่ได้รับการสนับสนุน อะไรผิดพลาดและคุณจำเป็นต้องใช้เวลาดูไม่มีอะไรมากขึ้น แต่ยังคงมีประโยชน์..
Maciej Pasternacki

และปรากฎว่าฉันได้แสดงความคิดเห็นของคุณผิด - นี่เป็นความจริงที่ว่าไม่มีการเลิกทำแบบอัตโนมัติและคุณจำเป็นต้องเขียนรหัส (และอาจผิดพลาดได้) หากคุณพยายามทำให้เป็นอัตโนมัติ ฉันไม่สามารถแก้ไขความคิดเห็นดั้งเดิมของฉันเนื่องจากได้รับการตอบกลับ - ฉันคิดถึงการกู้คืนระบบแทนที่จะใช้การย้อนกลับอัตโนมัติ หากคุณต้องการดูการย้อนกลับอัตโนมัติให้ดูที่nixos.org , BTW
Maciej Pasternacki

1

ฉันไม่ต้องการให้ Puppet ทำการเปลี่ยนแปลงใด ๆ ที่ไม่ควรทำหรือย้อนกลับการเปลี่ยนแปลงด้วยตนเองที่ทำบนเซิร์ฟเวอร์

สำหรับไฟล์กำหนดค่าที่สร้างขึ้นโดยใช้ Puppets ไฟล์ประเภทนี้สามารถทำได้โดยการตั้งค่า:

replace => false,

ฉันใช้สิ่งนั้นเพื่อสร้างไฟล์กำหนดค่าบางอย่างในครั้งแรกที่มีการปรับใช้แอปพลิเคชันไปยังเซิร์ฟเวอร์ แต่จากนั้นการแก้ไขใด ๆ ในไฟล์ปรับแต่งนั้นจะไม่ถูกเขียนทับโดย Puppet

อย่างไรก็ตามสิ่งนี้ขัดกับปรัชญาของ Puppet ที่จะเป็นสคริปต์การปรับใช้ idempotent

มันอาจจะดีกว่าถ้าคุณสามารถมีไฟล์ที่ผู้ดูแลระบบสามารถแก้ไขได้ซึ่งไม่ได้จัดการโดยหุ่นกระบอกซึ่งรวมอยู่ในไฟล์ที่จัดการโดยหุ่นเชิด


0

Puppet ทำงานได้ดีที่สุดสำหรับเซิร์ฟเวอร์จำนวนมากที่มีการกำหนดค่าเหมือนกัน เช่นคุณเขียนการกำหนดค่าทั้งหมดของเว็บเซิร์ฟเวอร์ที่ใช้ร่วมกันซึ่ง บริษัท ของคุณสร้างขึ้นจากนั้นสร้างอินสแตนซ์ N ของเซิร์ฟเวอร์นั้น หลังจากนั้นทำการเปลี่ยนแปลงกับอินสแตนซ์ทั้งหมดในครั้งเดียว (เช่นคุณพบว่าจำเป็นต้องเปลี่ยน AllowOverride สำหรับโฮสต์เสมือน apache ทั้งหมด) จะง่ายมาก คุณยังสามารถจัดเก็บข้อมูลการกำหนดค่าทั้งหมดไว้ในที่เดียวและเก็บไว้ภายใต้การควบคุมเวอร์ชัน ในกรณีที่สมบูรณ์แบบคุณจะสามารถจัดการกับความล้มเหลวของฮาร์ดแวร์โดยทิ้งโฮสต์ที่เสียหายแล้วแทนที่ด้วยโฮสต์ใหม่การตั้งค่าชื่อโฮสต์เดียวกันและการลงนามใบรับรองที่จำเป็น ทุกอย่างอื่นสามารถทำได้โดย Puppet

แต่ถ้าคุณเกือบจะไม่มีการแชร์การกำหนดค่าระหว่างสองโฮสต์การใช้หุ่นเชิดอาจมีประสิทธิผลน้อยกว่าการตั้งค่าด้วยตนเอง การจัดการครึ่งหนึ่งของการกำหนดค่าเซิร์ฟเวอร์ด้วยหุ่นเชิดและอีกครึ่งหนึ่งด้วยตนเองอาจไม่สมเหตุสมผลนัก

สรุป : หากคุณสามารถสร้างการกำหนดค่าที่เหมือนกันและมีโครงสร้างสำหรับโฮสต์ที่คุณกำลังจะจัดการ Puppet เป็นเพื่อนที่ดีที่สุดของคุณ แต่ถ้าคุณต้องจัดการแต่ละบริการ (โฮสต์โฮสต์เสมือนฐานข้อมูล) หุ่นพิเศษจะไม่เพิ่ม คุ้มค่ามาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.