Puppet Otomasyon Yazılımı Kurulumu
Puppet belli bir ölçeğin üzerindeki ortamlarda sıklıkla yapılan veya çok sayıda cihaza uygulanan değişikliklerin otomasyonunu sağlayan yazılımdır. Sistem yöneticileri puppet kullanarak sunucu kaynakları üzerinde provizyonlama, yapılandırma ve çeşitli yönetsel işlemleri yapabilirler. Amaç tekrarlanan veya çok sayıda cihazda tek tek yapılacak işlemleri otomatik bir şekilde uygulayarak zaman kazanmaktır. Puppet sadece sunucular için değil bilişim altyapınızdaki ağ cihazları, işletim sistemleri, yazılımlar ve servisler gibi bir çok bileşeni akıllıca yönetmek için tasarlanmıştır.
PuppetLabs tarafından dağıtılan Puppet, “enterprise” ve açık kaynak olmak üzere iki sürüme sahiptir. Bu yazıda bir çok Linux, Unix ve Windows platformlarında çalışan açık kaynak kodlu sürümün Ubuntu 14.04 üzerinde Master/Agent kurulumu ele alınacaktır. Bunun için merkezi bir PuppetMaster sunucu ile örnek bir istemci sunucu kurulumu anlatılacaktır.
İçindekiler
Gereksinimler
PuppetMaster Sunucusu: Puppet master yazılımını kurmak üzere Ubuntu 14.04 yüklü sunucu
Puppet Client Sunucusu: Puppet client yazılımını kurmak ve testler için Ubuntu 14.04 yüklü sunucu
Özel DNS sunucusu: Ağda bulunan sunucuların isimlerini çözmek üzere “forward” ve “reverse” kayıtların tutulduğu DNS sunucusu (Kurulum için daha önceki yazıya göz atabilirsiniz)
Güvenlik duvarı kuralları: İstemci sunucuların master sunucuya “8140” nolu TCP portu üzerinden erişimini sağlayan güvenlik duvarı kuralı
Örnek Mimari
Bu yazıda aşağıdaki gibi bir ortamı kullanacağız.
Sunucu | Rolü | FQDN | IP Adresi |
puppet-master | Master sunucu | puppet-master.vm1.huseyincotuk.com | 10.61.2.116 |
puppet-client | İstemci sunucu | puppet-client.vm1.huseyincotuk.com | 10.61.2.117 |
ns1 | Birincil Alan Adı Sunucusu | ns1.vm1.huseyincotuk.com | 10.61.2.118 |
ns2 | İkincil Alan Adı Sunucusu | ns2.vm1.huseyincotuk.com | 10.61.2.119 |
MASTER Sunucu Kurulumu
Master sunucu diğer istemciler için bir sertifika otoritesi olduğundan sunucular arasında bir tutarsızlık olmaması için zaman sunucusu olarak da hizmet vermelidir. Bu amaçla öncelikle NTP servisi kurulmalıdır. Önce “ntpdate” komutu ile bir defaya mahsus senkronizasyon sağlanmalı, ardından paket kurulumu yapılmalıdır.
1 2 |
sudo ntpdate pool.ntp.org sudo apt-get update && sudo apt-get -y install ntp |
Coğrafik olarak en yakın olan sunucular ntp.conf dosyasına eklenerek servis yeniden başlatılır.
1 2 3 4 5 6 7 8 9 |
sudo vi /etc/ntp.conf ... server 0.tr.pool.ntp.org server 1.tr.pool.ntp.org server 2.tr.pool.ntp.org server 3.tr.pool.ntp.org ... sudo service ntp restart |
Açık kaynak kodlu Puppet sürümünü kurmak için PuppetLabs paketi indirildikten sonra puppet-master-passenger paketi kullanılacaktır. Bu paket puppet-master paketinin yanında passenger içeren Apache web sunucusu da kurmaktadır.
1 2 3 4 |
cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb sudo dpkg -i puppetlabs-release-trusty.deb sudo apt-get update sudo apt-get install puppetmaster-passenger |
Böylece puppet-master, Passenger ve Apache ile birlikte kurulmuş olacaktır. Sadece Apache çalıştığı durumlarda puppet-master hizmet verecektir. Şimdilik Apache web sunucusu durdurulmalıdır.
1 |
sudo service apache2 stop |
Ardından Puppet versiyon değişiklikleri sonrasında mevcut ortamda sorun yaşamamak için Puppet versiyonu sabitlenmelidir. Öncelikle aşağıdaki komut ile mevcut Puppet sürümü alınmalıdır.
1 2 |
puppet help | tail -n 1 Puppet v3.8.4 |
Buna göre apt’nin pin özelliği kullanılarak Puppet 3.8 versiyonuna sabitlenmelidir.
1 2 3 4 5 |
sudo vi /etc/apt/preferences.d/00-puppet.pref Package: puppet puppet-common puppetmaster-passenger Pin: version 3.8* Pin-Priority: 501 |
Böylece versiyon güncellemeler esnasında 3.8’de kalacaktır. Ardından Puppet tarafından master ve istemci sunucular arasında kullanılan SSL sertifikaları düzenlenmelidir. Puppet-master sunucusu istemciler için bir sertifikası otoritesi olarak çalışacak ve kendi oluşturduğu sertifikalar ile istemcilerden gelen sertifika isteklerini imzalayacaktır. Bunun için öncelikle var olan sertifikalar silinmelidir.
1 |
sudo rm -rf /var/lib/puppet/ssl |
Master sertifikası oluşturulurken istemcilerin master sunucuya erişebilecekleri her türlü alan adı göz önüne alınmalıdır. Yani puppet-master ve puppet-master.vm1.huseyincotuk.com ayrı ayrı belirtilmelidir. Master üzerindeki puppet.conf dosyası aşağıdaki gibi düzenlenmelidir.
Dosya içeriği varsayılan olarak aşağıdaki gibi olmalıdır:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sudo vi /etc/puppet/puppet.conf [main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter templatedir=$confdir/templates [master] # These are needed when the puppetmaster is run by passenger # and can safely be removed if webrick is used. ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY |
Burada geçersiz olan templatedir satırı kaldırılmalı, [main] bölümüne DNS isimleri aşağıdaki gibi eklenmelidir.
1 |
dns_alt_names = puppet-master,puppet-master.vm1.huseyincotuk.com |
Dosyanın son hali aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter dns_alt_names = puppet-master,puppet-master.vm1.huseyincotuk.com [master] # These are needed when the puppetmaster is run by passenger # and can safely be removed if webrick is used. ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY |
Yeni sertifikayı oluşturmak için aşağıdaki komut çalıştırılmalıdır.
1 |
sudo puppet master --verbose --no-daemonize |
İşlem tamamlandığında aşağıdaki bir çıktı görülmelidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Info: Creating a new SSL key for ca Info: Creating a new SSL certificate request for ca Info: Certificate Request fingerprint (SHA256): 00:EC:54:E9:24:FD:F1:85:2D:78:04:FB:78:92:B8:EE:C9:02:ED:47:16:07:D3:C1:37:E3:24:5D:4B:F1:1F:05 Notice: Signed certificate request for ca Info: Creating a new certificate revocation list Info: Creating a new SSL key for puppet-master.vm1.huseyincotuk.com Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for puppet-master.vm1.huseyincotuk.com Info: Certificate Request fingerprint (SHA256): 0B:EE:B6:13:12:8F:4A:1D:3B:8A:C9:06:36:D1:78:1A:21:BE:00:85:82:B0:C2:96:85:AD:12:8C:7D:74:B8:FD Notice: puppet-master.vm1.huseyincotuk.com has a waiting certificate request Notice: Signed certificate request for puppet-master.vm1.huseyincotuk.com Notice: Removing file Puppet::SSL::CertificateRequest puppet-master.vm1.huseyincotuk.com at '/var/lib/puppet/ssl/ca/requests/puppet-master.vm1.huseyincotuk.com.pem' Notice: Removing file Puppet::SSL::CertificateRequest puppet-master.vm1.huseyincotuk.com at '/var/lib/puppet/ssl/certificate_requests/puppet-master.vm1.huseyincotuk.com.pem' Notice: Starting Puppet master version 3.8.4 |
“Starting Puppet master” satırı görüldüğünde Ctrl-C ile çıkılmalıdır. Oluşturulan sertifikaları listelemek için aşağıda komut kullanılabilir.
1 2 3 |
sudo puppet cert list -all + "puppet-master.vm1.huseyincotuk.com" (SHA256) BC:04:E8:32:D4:E9:56:A8:3C:F6:06:81:B0:97:48:F8:9A:9D:29:3B:36:3B:10:27:51:ED:B5:02:6C:CE:5D:F0 (alt names: "DNS:puppet-master", "DNS:puppet-master.vm1.huseyincotuk.com") |
Sertifika ismi /etc/apache2/sites-available/puppetmaster.conf dosyasında kontrol edilmelidir. Yukarıdaki çıktıda görülen dosya isimleri ile tutarlı olmalıdır. Aksi halde apache servisi başlarken dosyanın bulunamadığını belirten bir hata alınacaktır.
1 2 3 4 5 |
sudo vi /etc/apache2/sites-available/puppetmaster.conf ... SSLCertificateFile /var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem ... |
Master sunucuya ait puppet.conf dosyasında [main], [master] ve [agent] olmak üzere 3 temel bölüm bulunmaktadır. “main” bölümü global yapılandırma ayarlarını barındırırken “master” bölümü master sunucuya ait yapılandırmaları içermektedir. “agent” bölümü ise istemcilere özel yapılandırmaları düzenlemeye yaramaktadır. Daha önce hazırlanan dosya basit bir kurulum için yeterlidir. Kullanılabilecek diğer yapılandırma seçenekleri ve detaylara resmi sayfadan ulaşılabilir.
Main Manifest Dosyası
Puppet sistem yapılandırmalarını alan adına özgü bir biçimde tanımlanabilen bir dilde “manifest” denilen dosyalarda tutmaktadır. Bu dosyalar .pp uzantılı dosyalar olup varsayılan main manifest dosyası /etc/puppet/manifests/site.pp lokasyonunda yer almaktadır. Aşağıdaki komut ile bu dosya oluşturulmalıdır.
1 |
sudo touch /etc/puppet/manifests/site.pp |
Ardından puppet-master servisi Apache vasıtasıyla başlatılmalıdır.
1 |
sudo service apache2 start |
Böylece puppet-master sunucusu kullanıma hazır hale gelmiş olup henüz hiç bir istemci sunucuyu kullanmamaktadır.
Puppet Agent Kurulumu
Puppet-master tarafından yönetilecek her sunucuya puppet agent kurulmalıdır. Çoğu durumda altyapınızdaki tüm sunuculara gerektiğinde kullanmak üzere kurulum yapmak tercih edilmelidir. Puppet agent bir çok Linux, Unix ve Windows versiyonunda çalışmaktadır. Bu yazıda Ubuntu 14.04 üzerindeki kurulum ele alınacaktır.
Ubuntu 14.04 kurulmuş istemci üzerinde önce PuppetLabs paketi kurulmalı, apt paket yöneticisi güncellenerek puppet paketi yüklenmelidir.
1 2 3 4 |
cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb sudo dpkg -i puppetlabs-release-trusty.deb sudo apt-get update sudo apt-get install puppet |
Kurulduğunda puppet agent varsayılan olarak pasif gelmektedir. Otomatik başlaması için default dosyasına aşağıdaki start=yes parametresi eklenmelidir.
1 2 3 |
sudo vi /etc/default/puppet START=yes |
Master sunucuda olduğu gibi versiyon değişikliklerinde sıkıntı yaşanmaması için mevcut sürüm apt içerisinde sabitlenmelidir.
1 2 3 4 5 |
sudo vi /etc/apt/preferences.d/00-puppet.pref Package: puppet puppet-common Pin: version 3.8* Pin-Priority: 501 |
Ardından agent üzerinde puppet.conf dosyası düzenlenmelidir. Master sunucuda olduğu gibi templatedir satırı ve [master] bölümü ve altındaki satırlar silinmeli, [agent] bölümüne master sunucu eklenmelidir.
1 2 3 4 |
sudo vi /etc/puppet/puppet.conf [agent] server = puppet-master.vm1.huseyincotuk.com |
Dosyanın son hali aşağıdaki gibi olmalıdır:
1 2 3 4 5 6 7 8 9 |
[main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter [agent] server = puppet-master.vm1.huseyincotuk.com |
Bu haliyle puppet başlatılmaya hazır hale gelmiştir.
1 |
sudo service puppet start |
Her şey yolunda giderse puppet ilk çalıştığında bir SSL sertifikası üretecek ve imzalanma talebini puppet-master sunucusuna gönderecektir. SSL sertifikasının imzalanmasını müteakip master sunucu istemci ile haberleşebilecektir.
İstemci Sertifikasının Master Sunucuda İmzalanması
Master sunucu, bir istemciyi kontrol edebilmek için öncelikle istemciden gelen sertifikayı imzalamalıdır. Master sunucuya gelen talepler aşağıdaki komut ile görülebilir.
1 2 3 |
sudo puppet cert list "puppet-client.vm1.huseyincotuk.com" (SHA256) 03:30:CA:F2:A1:B1:71:12:5A:31:00:49:E6:FF:03:58:F1:CC:C5:04:93:E3:39:DA:7F:75:00:58:31:AA:89:02 |
Satırın başında “+” olmaması sertifikanın henüz imzalanmamış olduğunu göstermektedir. Sertifikayı otorite olarak imzalamak için aşağıdaki komut kullanılmalıdır.
1 |
sudo puppet cert sign puppet-client.vm1.huseyincotuk.com |
Sertifika imzalandığında aşağıdakine benzer bir çıktı alınmalıdır.
1 2 |
Notice: Signed certificate request for puppet-client.vm1.huseyincotuk.com Notice: Removing file Puppet::SSL::CertificateRequest puppet-client.vm1.huseyincotuk.com at '/var/lib/puppet/ssl/ca/requests/puppet-client.vm1.huseyincotuk.com.pem' |
İmzalanmayı bekleyen birden fazla sertifikanın tamamını imzalamak için aşağıdaki komut kullanılabilir.
1 |
sudo puppet cert sign --all |
İmzalanan istemci sertifikaları ve master sunucuya ait sertifikaların tamamı aşağıdaki komut ile listelenebilir.
1 2 3 4 |
sudo puppet cert list -all + "puppet-client.vm1.huseyincotuk.com" (SHA256) 7C:28:86:5A:D9:17:17:B8:B2:21:23:DB:51:8E:F7:D4:5D:33:D8:A2:D6:E2:1D:25:BD:0A:57:86:5F:60:87:51 + "puppet-master.vm1.huseyincotuk.com" (SHA256) BC:04:E8:32:D4:E9:56:A8:3C:F6:06:81:B0:97:48:F8:9A:9D:29:3B:36:3B:10:27:51:ED:B5:02:6C:CE:5D:F0 (alt names: "DNS:puppet-master", "DNS:puppet-master.vm1.huseyincotuk.com") |
Daha önce sertifikası imzalanmış bir istemcinin yeniden yapılandırılarak Puppet’a eklenmesi için önce sertifikasının “revoke” edilmesi gerekmektedir. Benzer şekilde Puppet ile yönetilmesi istenmeyen sunucunun da sertifikası “revoke” edilmelidir. Bunun için aşağıdaki komut kullanılır.
1 |
sudo puppet cert clean puppet-client.vm1.huseyincotuk.com |
Böylece örnek bir Puppet altyapısı (master-client) kullanıma hazır hale gelmiştir. Puppet yazı dizisi yenileriyle devam edecek.