Dotyczy to środowisk z wieloma dzierżawcami, takich jak mała firma hostingowa.
Czy Puppet (lub podobny) jest odpowiednią technologią do radzenia sobie z podstawowymi, ale krytycznymi zmianami masy? Na przykład:
- Aktualizowanie resolverów DNS (resolv.conf)
- Ustawianie kluczy SSH
- Aktualizacja konfiguracji NTP
- Konfigurowanie snmpd
- Wdrażanie skryptów monitorowania, takich jak rozszerzenia SNMP Perl lub skrypty Nagios
Moje obawy dotyczą bezpieczeństwa i inwazyjności:
- Nie chcę, aby jakikolwiek serwer mógł zobaczyć konfigurację, której nie powinien
- Martwię się, że mistrz marionetek może być narażony na atak atakowanego serwera
- Nie chcę, aby Puppet wprowadzał zmiany, których nie powinien, ani nie cofał żadnych ręcznych zmian wprowadzonych na serwerze.
Powinienem to ostrzec, mówiąc, że nigdy nie używałem Puppet w produkcji, miałem tylko szybką zabawę w laboratorium testowym, więc możliwe, że myślę o tym w niewłaściwy sposób!
Tak, z pewnością jest to możliwe. Jednak decyzja, czy powinieneś to zrobić, czy nie, zależy od ciebie.
Jeśli chodzi o twoje zapytania:
1) wystarczająco uczciwy. Ruch oparty jest na ssl, więc zarządzanie certyfikatami jest ważne. Nie ufaj też żadnym „faktom” dostarczanym przez klienta w związku z jego tożsamością, ponieważ mogą one zostać zmienione przez klienta. Chcesz polegać na certyfikacie ssl klienta, aby zapewnić uwierzytelnianie tego, kim jest serwer. Szczerze mówiąc, jeśli właściwie używasz takich rzeczy jak hiera i unikasz dużych bloków if-blocków w kodzie w swoim kodzie (co naprawdę powinieneś), nic ci nie będzie.
2) Nie powinno tak być, zakładając, że będziesz go załatał. Właściwie skonfigurowany, istnieje tylko mały wektor, na który lalkarz może zostać zaatakowany przez klientów. To powiedziawszy, efekty, które zostały skompromitowane, są duże, więc staraj się je zablokować.
3) To naprawdę problem z testowaniem i wdrażaniem. Jeśli masz solidny kod lalek, nie psuje twoich plików. Posortowanie tego zajmuje trochę czasu, ale podstawy (tak jak potrzebujesz) nie są długie.
źródło
Tak, można go używać w ten sposób. Używam tego do obsługi systemów klientów zewnętrznych.
Jeśli używasz marionetką, to nie musi umożliwiać autosign wtedy. Autosign pozwala hostom na automatyczne żądanie certyfikatu. Twoja konfiguracja i uprawnienia będą prawie na pewno związane bezpośrednio z CN w certyfikacie. Nie chcesz, aby przypadkowy komputer pojawiał się w Internecie i mógł twierdzić, że w rzeczywistości jest to system z wszystkimi tajnymi funkcjami wysokiego bezpieczeństwa.
Jeśli jesteś naprawdę paranoikiem, możesz dostosować ustawienia serwera plików marionetek, aby utworzyć udziały, do których dostęp mają tylko niektóre systemy. Dostęp do serwera plików oparty jest na certyfikatach.
Istnieje kilka różnych podejść do zezwalania na lokalne zmiany.
Jedną z metod, której często używam, jest poniżej. Zasadniczo, jeśli przekażesz listę do
source
, a następnie marionetka wypróbuje każdy element na liście. Więc dodaję pierwszy element na liście, aby wskazywał na plik lokalny.Inną opcją byłoby użycie dowiązań symbolicznych. Jeśli ktoś chce użyć wersji marionetkowej, symbolizuje dowiązanie do marionetkowej wersji pliku. Jeśli chcą zachować konfigurację lokalnie, nie tworzą dowiązania symbolicznego.
Inną możliwością jest użycie augeas do wprowadzenia zmian na poziomie linii zamiast zmiany całych plików. Bądź bardzo konserwatywny w kwestii tego, co zmienisz.
źródło
3> Nie ma automatycznego cofania w Puppet ani w takich narzędziach. Musisz napisać wyraźny kod, aby cofnąć. Ponadto możesz zbadać funkcję lalek w środowisku, mieć laboratorium testowe, w którym testowany jest nowy kod (mogą to być maszyny wirtualne), i korzystać z recenzji kodu.
źródło
/var/lib/chef
którym domyślnie się zmienia (chyba że zasób jest skonfigurowany tak, aby nie pozostawiał kopii zapasowych, np. Dla poufnych danych), a przy użyciudoc
formatera widać różnicę na wyjściu terminala.W przypadku plików konfiguracyjnych tworzonych przy użyciu typu pliku marionetek można to osiągnąć, ustawiając:
Używam tego do generowania niektórych plików konfiguracyjnych przy pierwszym wdrożeniu aplikacji na serwerze, ale żadne zmiany w tym pliku konfiguracyjnym nie zostaną zastąpione przez Puppet.
Jest to jednak sprzeczne z filozofią Puppet, aby być idempotentnym skryptem wdrażania.
Może być lepiej, jeśli możesz, mieć osobne pliki do edycji przez administratora, które nie są zarządzane przez marionetkę, które są zawarte w plikach zarządzanych przez marionetkę.
źródło
Puppet działa najlepiej na wielu serwerach o identycznej konfiguracji. Np. Napisz całą konfigurację udostępnionego serwera WWW dostarczoną przez twoją firmę, a następnie utwórz N instancji tego serwera. Później dokonanie zmian we wszystkich instancjach jednocześnie (np. Dowiesz się, że musisz zmienić AllowOverride dla wszystkich wirtualnych hostów Apache) będzie naprawdę łatwe. Będziesz także mógł przechowywać wszystkie informacje o konfiguracji w jednym miejscu i mieć je pod kontrolą wersji. W idealnym przypadku będziesz w stanie poradzić sobie z awarią sprzętu, wyrzucając uszkodzony host, zastępując go nowym, ustawiając tę samą nazwę hosta i podpisując potrzebny certyfikat. Wszystko inne może zrobić Puppet.
Ale jeśli skończy się prawie brak współdzielenia konfiguracji między dwoma hostami, użycie marionetki może być mniej wydajne niż ręczne konfigurowanie. Również zarządzanie połową konfiguracji serwera za pomocą marionetki, a druga połowa ręcznie, może nie mieć większego sensu.
Podsumowanie : Jeśli możesz stworzyć jednolitą i ustrukturyzowaną konfigurację hostów, którymi zamierzasz zarządzać, Puppet jest twoim najlepszym przyjacielem, ale jeśli będziesz musiał obsługiwać każdą usługę (host, wirtualny host, baza danych) specjalnie Puppet nie doda duża wartość.
źródło