Puppet hoặc Chef có phù hợp để quản lý cấu hình máy chủ rất cơ bản trong môi trường nhiều người thuê không?


9

Điều này liên quan đến môi trường nhiều người thuê như một công ty lưu trữ nhỏ.

Là Puppet (hoặc tương tự) là một công nghệ phù hợp để chăm sóc những thay đổi lớn nhưng cơ bản? Ví dụ:

  • Cập nhật trình phân giải DNS (độ phân giải)
  • Đặt khóa SSH
  • Cập nhật cấu hình NTP
  • Cấu hình snmpd
  • Triển khai các tập lệnh giám sát như phần mở rộng SNMP Perl hoặc tập lệnh Nagios

Mối quan tâm của tôi là xung quanh an ninh và xâm lấn:

  1. Tôi không muốn bất kỳ máy chủ nào có thể thấy bất kỳ cấu hình nào mà nó không nên
  2. Tôi lo lắng rằng một Master Puppet có thể dễ bị tấn công bởi một máy chủ bị xâm nhập
  3. Tôi không muốn Puppet thực hiện bất kỳ thay đổi nào không nên hoặc hoàn nguyên mọi thay đổi thủ công được thực hiện trên máy chủ.

Tôi nên cảnh báo điều này bằng cách nói rằng tôi chưa bao giờ sử dụng Puppet trong sản xuất, chỉ chơi nhanh trong phòng thí nghiệm, vì vậy có thể tôi đang nghĩ về điều này sai cách!

Câu trả lời:


6

Hãy thử Ansible (ansible.cc). Có thể nó là dành cho bạn. Không có đại lý chạy trên khách hàng của bạn. Nó đang phát triển rất nhanh.

Một lựa chọn rất tốt khác là Salt Stack.

Ansible và Salt rất dễ hiểu, bạn có thể sử dụng chúng như một công cụ dòng lệnh nếu bạn muốn, như shell phân tán.


1
Tôi biết tôi đã hỏi điều này từ lâu. Bạn sẽ hài lòng khi biết rằng đây là câu trả lời. Bây giờ chúng tôi sử dụng Ansible để tự động tung ra 10 máy chủ mỗi ngày và đang quản lý 1000 máy theo kiểu quên và quên. Nó đã được tuyệt vời trong hơn một năm nay.
SimonJGreen

9

Vâng, điều này chắc chắn là có thể. Quyết định xem bạn có nên làm như vậy hay không là tùy thuộc vào bạn.

Về truy vấn của bạn:

1) đủ công bằng. Lưu lượng dựa trên ssl, vì vậy quản lý chứng chỉ là quan trọng. Ngoài ra, đừng tin vào bất kỳ "sự thật" nào mà khách hàng cung cấp liên quan đến danh tính của họ, vì những điều này có thể được khách hàng thay đổi. Bạn muốn dựa vào chứng chỉ ssl của máy khách để cung cấp xác thực ai là máy chủ. Thành thật mà nói nếu bạn đang sử dụng những thứ như hiera đúng cách và tránh các tên máy chủ lớn dựa trên khối if trong mã của bạn (mà bạn thực sự nên) sẽ ổn.

2) Không nên, giả sử bạn giữ nó vá. Được cấu hình đúng, chỉ có một vectơ nhỏ để con rối bị khách hàng tấn công. Điều đó nói rằng, các hiệu ứng nếu nó bị xâm phạm là rất lớn, vì vậy hãy cẩn thận để khóa nó.

3) Đó thực sự là một vấn đề thử nghiệm và triển khai. Nếu bạn có mã rối, nó sẽ không làm hỏng các tệp của bạn. Sẽ mất một chút thời gian để sắp xếp nó, nhưng đối với những điều cơ bản (như bạn cần) không lâu.


4

Là Puppet (hoặc tương tự) là một công nghệ phù hợp để chăm sóc những thay đổi lớn nhưng cơ bản?

Vâng, nó có thể được sử dụng theo cách này. Tôi sử dụng nó để hỗ trợ các hệ thống khách hàng bên ngoài.

Tôi không muốn bất kỳ máy chủ nào có thể thấy bất kỳ cấu hình nào mà nó không nên

Nếu bạn đang sử dụng con rối, bạn không được bật tự động. Autosign cho phép máy chủ tự động yêu cầu chứng chỉ. Cấu hình và quyền của bạn gần như chắc chắn sẽ được gắn trực tiếp với CN trong chứng chỉ. Bạn không muốn máy tính ngẫu nhiên xuất hiện trực tuyến và có thể tuyên bố rằng chúng thực sự là hệ thống với tất cả các công cụ bảo mật cao bí mật.

Nếu bạn thực sự hoang tưởng, bạn có thể điều chỉnh cài đặt máy chủ con rối để tạo các chia sẻ mà chỉ một số hệ thống có thể truy cập. Quyền truy cập máy chủ được dựa trên các chứng chỉ.

Tôi không muốn Puppet thực hiện bất kỳ thay đổi nào không nên hoặc hoàn nguyên mọi thay đổi thủ công được thực hiện trên máy chủ.

Có một vài cách tiếp cận khác nhau để cho phép thay đổi cục bộ.

Một phương pháp tôi thường xuyên sử dụng là dưới đây. Về cơ bản nếu bạn chuyển một danh sách cho a source, thì con rối thử từng mục trong danh sách. Vì vậy, tôi thêm mục đầu tiên trong danh sách để trỏ đến một tệp cục bộ.

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

Một lựa chọn khác là sử dụng các liên kết tượng trưng. Nếu ai đó muốn sử dụng phiên bản con rối, họ liên kết với phiên bản con rối của một tệp. Nếu họ muốn duy trì cấu hình cục bộ, thì họ không tạo liên kết tượng trưng.

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

Khả năng khác là sử dụng augeas để thực hiện thay đổi cấp độ dòng thay vì thay đổi toàn bộ tệp. Hãy rất bảo thủ về những gì bạn thay đổi.


1

3> Không có hoàn tác tự động trong Puppet hoặc trong bất kỳ công cụ nào như vậy. Bạn phải viết mã rõ ràng để hoàn tác. Ngoài ra, bạn có thể nghiên cứu tính năng Môi trường của con rối, có Phòng thí nghiệm kiểm tra nơi mã mới được kiểm tra (có thể là VM) và sử dụng xem lại mã.


Không hoàn toàn đúng. Chef tạo một bản sao lưu của bất kỳ tệp nào mà nó thay đổi /var/lib/cheftheo mặc định (trừ khi tài nguyên được cấu hình để không có bản sao lưu, ví dụ như đối với dữ liệu nhạy cảm) và với trình docđịnh dạng, bạn sẽ thấy một khác biệt trên đầu ra của thiết bị đầu cuối.
Maciej Pasternacki

Vâng, vâng, Puppet cũng có thể tạo nhiều bản sao lưu. Nhưng làm thế nào bạn biết sao lưu để khôi phục? Bạn sẽ phải viết một số mã Chef / Puppet hoặc script bên ngoài để thực hiện hành động đó? Còn các tài nguyên không phải tệp như hoàn nguyên gói trước với phiên bản cụ thể thì sao? Còn dịch vụ thì sao? Nếu bạn có mã nói "đảm bảo chạy" và muốn thay đổi mã, bạn sẽ phải thay đổi mã thành "đảm bảo dừng".
Không phải bây giờ

Ý tưởng là quản lý cấu hình chạy là một chiều. Không có quy trình khôi phục được hỗ trợ hoặc "chạy khô" đầy đủ chức năng (có chế độ whyrun trong Chef chỉ là kiểm tra đề xuất / kiểm tra chứ không phải mô phỏng đầy đủ (xem blog.afistfulofservers.net/post/2012/12/21/ Để giải thích dài hơn). Bạn không thể thay đổi mật khẩu người dùng, v.v ... Đây là lý do tại sao tôi viết "không hoàn toàn đúng" - không có rollback được hỗ trợ, nhưng có một mạng gỡ lỗi / an toàn cho phép bạn xem bản sao lưu nếu có gì đó không ổn và bạn cần xem qua. Không còn gì nữa, nhưng vẫn hữu ích.
Maciej Pasternacki

Và hóa ra tôi đã đọc sai nhận xét của bạn - điều này đúng là không có tự động hoàn tác và bạn cần phải viết mã rõ ràng (và rất có thể bị lỗi) nếu bạn cố gắng tự động hóa nó. Tôi không thể chỉnh sửa nhận xét ban đầu của mình vì nó đã được trả lời - Tôi đã suy nghĩ về việc khắc phục thảm họa thay vì tự động quay lại. Nếu bạn muốn xem rollback tự động, hãy xem nixos.org , BTW.
Maciej Pasternacki

1

Tôi không muốn Puppet thực hiện bất kỳ thay đổi nào không nên hoặc hoàn nguyên mọi thay đổi thủ công được thực hiện trên máy chủ.

Đối với các tệp cấu hình được tạo bằng Puppets File type, điều này có thể đạt được bằng cách cài đặt:

replace => false,

Tôi sử dụng điều đó để tạo một số tệp cấu hình lần đầu tiên ứng dụng được triển khai đến máy chủ, nhưng sau đó mọi chỉnh sửa đối với tệp cấu hình đó sẽ không bị ghi đè bởi Puppet.

Tuy nhiên, điều này đi ngược lại triết lý của Puppet là một kịch bản triển khai bình thường.

Có thể tốt hơn nếu bạn có thể, để có các tệp có thể chỉnh sửa quản trị viên riêng biệt không được quản lý bởi con rối được bao gồm từ các tệp được quản lý bởi con rối.


0

Con rối hoạt động tốt nhất cho nhiều máy chủ có cấu hình giống hệt nhau. Ví dụ: bạn viết tất cả cấu hình của một máy chủ web được chia sẻ do công ty của bạn cung cấp, sau đó tạo N phiên bản của máy chủ đó. Sau đó, thực hiện thay đổi trên tất cả các trường hợp cùng một lúc (ví dụ: bạn phát hiện ra rằng cần phải thay đổi AllowOverride cho tất cả các máy chủ ảo apache) sẽ thực sự dễ dàng. Bạn cũng có thể lưu trữ tất cả thông tin cấu hình ở một nơi duy nhất và kiểm soát thông tin phiên bản. Trong trường hợp hoàn hảo, bạn sẽ có thể xử lý lỗi phần cứng bằng cách vứt bỏ máy chủ bị hỏng, thay thế nó bằng một máy chủ mới, đặt cùng tên máy chủ và ký chứng chỉ cần thiết. Mọi thứ khác có thể được thực hiện bởi Puppet.

Nhưng nếu bạn kết thúc với việc gần như không chia sẻ cấu hình giữa hai máy chủ, sử dụng con rối có thể kém hiệu quả hơn so với thực hiện cấu hình thủ công. Ngoài ra, việc quản lý một nửa cấu hình của máy chủ bằng con rối và nửa còn lại bằng tay có thể không có nhiều ý nghĩa.

Tóm tắt : Nếu bạn có thể tạo cấu hình thống nhất và có cấu trúc cho các máy chủ bạn sẽ quản lý, Puppet là người bạn tốt nhất của bạn, nhưng nếu bạn phải xử lý từng dịch vụ (máy chủ, máy chủ ảo, cơ sở dữ liệu) thì đặc biệt Puppet sẽ không thêm nhiều giá trị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.