Debian 11/Debian 10’da Chef Infra Sunucusunu Kurma

CHEF otomasyon şirketi, geliştiricileri ve sistem yöneticilerini bir araya getirerek 2008’den beri varlığını sürdürüyor. CHET Infa, bir ağ genelinde kaynakların yönetimini, konfigürasyonunu ve tahsisini kolaylaştıran açık kaynaklı bir IaC (Kod Olarak Altyapı) aracıdır. İlk çıkışından bu yana, Cheezburger, Facebook, Indiegogo, Etsy gibi şirketlerin onu benimsemesiyle CHEF hayran kitlesi son derece büyüdü.

Ruby ve Erlang dillerinde yazılan CHEF infra, aşağıdakilerden oluşan basit bir mimariye sahiptir:

  • Workstation – Bu, Chef cookbooks yazdığınız ve düğümlerinizi yönettiğiniz bir bilgisayardır. Tüm konfigürasyonlar burada geliştirilmiştir.
  • Chef server – tüm düğümler ve cookbooks için merkez görevi görür. Tüm yapılandırmalar geliştirme sonrası için buraya yüklenir
  • Nodes – Bunlar, Chef sunucusu tarafından yönetilen istemci makinelerdir. Normalde üzerlerinde Chef istemcisi yüklüdür.
  • Cookbooks – Bunlar, bir düğümün istenen durumu hakkında değerlere ve verilere sahiptir. Kaynakları, cookbooksları öznitelikleri, şablonları, kitaplıkları, meta verileri ve işleyen bir sistem tasarlamayı destekleyen her şeyi içerirler.

Aşağıda, CHEF Mimarisini anlamanıza yardımcı olacak bir diyagram bulunmaktadır.

CHEF Infra otomasyonda tercih edilir çünkü:

  • Yüksek kullanılabilirlik– Chef Infra sunucusu, hata toleransı, anında ve tutarlı arama sonuçları ve altyapınızla ilgili doğru gerçek zamanlı verilerle yüksek düzeyde kullanılabilir.
  • Yönetimi kolaylaştıran Chef Infra Server için grafiksel yönetim konsolu.
  • Uyumluluk – Chef Automate, uyumluluk sorunlarını, güvenlik risklerini ve eski yazılımları tanımlayan özelleştirilebilir raporlar oluşturur.
  • Bir sistemde gerekli olan tüm temel kaynaklar için dahili taksonomi ve bu taksonomiyi Ruby dilini kullanarak genişletmek için tanımlanmış bir mekanizma

Bu kılavuzu sonuna kadar takip ederek, Debian 11 / Debian 10 üzerinde Chef Infra Server, Workstation ve client kurulumu hakkında gerekli bilgileri edineceksiniz.

Başlarken

Bu kılavuz için aşağıdakilere sahip olduğunuzdan emin olun:

  • Sunucunuza Sudo erişimi.
  • Sisteminizde yapılandırılmış bir ana bilgisayar adı
  • 3 Debian 11 / Debian 10 sunucusu

3 sunucu aşağıdaki görevleri yerine getirecektir:

ServerIP AddressHostname
Chef Server192.168.205.4chef-server.computingforgeeks.com
Chef Workstation192.168.205.14workstation.computingforgeeks.com
Chef Client192.168.205.24chef-client. computingforgeeks.com

Sunucunuzdaki ana bilgisayar adını aşağıdaki gibi yapılandırın.
##Chef Sunucusunda
sudo hostnamectl set-hostname chef-server.computingforgeeks.com --static

Geçerli bir alan adınız yoksa, bilinen hostlar listesine aşağıdaki gibi ekleyin.

  • On all the 3 servers

$ sudo vi /etc/hosts
192.168.205.4 chef-server.computingforgeeks.com chefserver

Now install the required dependencies.
sudo apt -y install git vim wget curl bash-completion
sudo apt update && sudo apt upgrade
sudo reboot

Adım 1 – NTP Zaman senkronizasyonunu yapılandırın

Chef Infra sunucusu saat sapmalarına karşı hassastır ve Debian sistemimizi Ağ Zaman Protokolüne (NTP) bağlamamızı gerektirir.

Chrony paketini yükleyerek başlayın.

sudo apt -y install chrony

Yerel Saat Diliminizi ayarlayın.

sudo timedatectl set-timezone Africa/Nairobi

Şimdi havuz listesini yapılandırın. Örneğin Kenya için şunu kullanın:

$ sudo vim /etc/chrony/chrony.conf
# pool 2.pool.ntp.org iburst  //Comment out this line
server 0.ke.pool.ntp.org
server 1.africa.pool.ntp.org
server 3.africa.pool.ntp.org

# Allow NTP client access from local network.
allow 192.168.205.0/24 

NTP Havuzu proje sayfasından daha fazla havuz alın

NTP senkronizasyonunu ayarlayın.

sudo timedatectl set-ntp true

Yapılan değişiklikleri uygulayın.

sudo systemctl restart chrony

Güvenlik duvarı üzerinden NTP’ye izin vermeniz istenecektir.

sudo ufw allow ntp

Chronyd hizmetini yeniden başlatın.

sudo systemctl restart chronyd

Adım 2 – Chef Infra Sunucusunu Debian 11 / Debian 10’a Kurun

En son Chef Infra Server paketini Chef Infra Server yükleme sayfasından indirin. Ayrıca indirme bağlantısını kullanarak paketi aşağıdaki gibi çekebilirsiniz.

VERSION="14.12.21"
wget https://packages.chef.io/files/stable/chef-server/${VERSION}/ubuntu/20.04/chef-server-core_${VERSION}-1_amd64.deb

İndirilen paketi kurun.

sudo apt install ./chef-server-core_${VERSION}-1_amd64.deb

Örnek çıktı:

Selecting previously unselected package chef-server-core.
(Reading database ... 142930 files and directories currently installed.)
Preparing to unpack chef-server-core_14.11.36-1_amd64.deb ...
Unpacking chef-server-core (14.11.36-1) ...
Setting up chef-server-core (14.11.36-1) ...
Thank you for installing Chef Infra Server!

Run 'chef-server-ctl reconfigure' to configure your Chef Infra Server

For more information on getting started see https://docs.chef.io/server/

Kurulum tamamlandıktan sonra, Chef sunucunuzu yeniden yapılandırın.

sudo chef-server-ctl reconfigure

Aşağıdaki gibi ilerleyin.

Documentation: https://docs.chef.io/server/
Patents:       https://www.chef.io/patents

+---------------------------------------------+
            Chef License Acceptance

Before you can continue, 3 product licenses
must be accepted. View the license at
https://www.chef.io/end-user-license-agreement/

Licenses that need accepting:
  * Chef Infra Server
  * Chef Infra Client
  * Chef InSpec

Do you accept the 3 product licenses (yes/no)?

> yes
......
Running handlers:
Running handlers complete
Chef Infra Client finished, 409/858 resources updated in 04 minutes 00 seconds
Chef Infra Server Reconfigured!

Şimdi Chef Server bileşenlerinin durumunu kontrol edin.

$ sudo chef-server-ctl status
run: bookshelf: (pid 19850) 32s; run: log: (pid 19358) 184s
run: elasticsearch: (pid 19817) 33s; run: log: (pid 19169) 220s
run: nginx: (pid 19803) 33s; run: log: (pid 19626) 41s
run: oc_bifrost: (pid 19707) 34s; run: log: (pid 19059) 237s
run: oc_id: (pid 19800) 33s; run: log: (pid 19097) 226s
run: opscode-erchef: (pid 19934) 32s; run: log: (pid 19502) 179s
run: postgresql: (pid 19696) 34s; run: log: (pid 18554) 253s
run: redis_lb: (pid 19649) 35s; run: log: (pid 20085) 31s

UFW’yi etkinleştirdiyseniz, güvenlik duvarı üzerinden HTTP ve HTTPS’ye izin verin.

sudo ufw allow http
sudo ufw allow https

Adım 3 – Bir Yönetici hesabı ve Kuruluş oluşturun

Yönetici hesabı, sunucu, iş istasyonları ve düğümler arasındaki iletişimi sağlar. Kullanılan sözdizimi aşağıdaki gibidir:

chef-server-ctl user create USERNAME FIRST_NAME [MIDDLE_NAME] LAST_NAME EMAIL PASSWORD

Önce değişkenleri dışa aktaracağız.

USERNAME="chefadmin"
FIRST_NAME="Chef"
LAST_NAME="Administrator"
EMAIL="[email protected]"
PASSWORD="Passw0rd"
KEY_PATH="/root/chefadmin.pem"

Şimdi bir yönetici kullanıcı oluşturmak için aşağıdaki komutu çalıştırın.

sudo chef-server-ctl user-create ${USERNAME} ${FIRST_NAME} ${LAST_NAME} ${EMAIL} ${PASSWORD} -f ${KEY_PATH}

Kullanıcı oluşturmayı doğrulayın.

$ sudo chef-server-ctl user-list
chefadmin
pivotal

Devam edin ve yukarıdaki kullanıcıyı eklemek için bir organizasyon oluşturun.

Normalde aşağıdaki sözdizimi bir organizasyon oluşturmak için kullanılır.

chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USERNAME --filename ORGANIZATION-validator.pem (options)

Yukarıdaki komutta şunu unutmayın:

  1. Ad, küçük harf veya rakamla başlamalıdır
  2. Tam ad boşluk olmayan bir karakterle başlamalıdır
  3. –association_user seçeneği, kullanıcıyı Chef sunucusundaki admins güvenlik grubuyla ilişkilendirir.
  4. –filename seçeneği, RSA özel anahtarını belirtilen yola kaydeder.
  5. Bir RSA özel anahtarı otomatik olarak üretilecektir. Bu, şef-doğrulayıcı anahtarıdır ve güvenli bir yere kaydedilmelidir.

Bu durumda benim komutum aşağıdaki gibi olacaktır.

sudo chef-server-ctl org-create computingforgeeks 'computingforgeeks, Inc.' \
--association_user chefadmin \
--filename /root/computingforgeeks-validator.pem

Kuruluş listesini görüntüleyin.

$ sudo chef-server-ctl org-list
computingforgeeks

Kullanıcı ve kuruluş için RSA anahtarlarının mevcut olup olmadığını da doğrulayabilirsiniz.

$ sudo find /root -name "*.pem"
/root/chefadmin.pem
/root/computingforgeeks-validator.pem

Adım 4 – Chef İş İstasyonunu Kurun ve Yapılandırın.

Chef İş İstasyonu, yapılandırmaları geliştirmek ve ardından bunları Chef sunucusuna göndermek için kullanılır.

Önce Chef Workstation indirme sayfasından en son paket indirilerek kurulur.

Alternatif olarak, en son sürümü tanımlayın ve Wget ile indirin.

#On Debian 11
VERSION="22.1.745"
wget https://packages.chef.io/files/stable/chef-workstation/${VERSION}/debian/11/chef-workstation_${VERSION}-1_amd64.deb

#On Debian 10
VERSION="22.1.745"
wget https://packages.chef.io/files/stable/chef-workstation/${VERSION}/debian/10/chef-workstation_${VERSION}-1_amd64.deb

Paketi şu komutu kullanarak kurun:

sudo dpkg -i chef-workstation_${VERSION}-1_amd64.deb

Örnek Çıktı:

Selecting previously unselected package chef-workstation.
(Reading database ... 141880 files and directories currently installed.)
Preparing to unpack chef-workstation_22.1.745-1_amd64.deb ...
Unpacking chef-workstation (22.1.745-1) ...
Setting up chef-workstation (22.1.745-1) ...

The Chef Workstation App is available.

Launch the App by running 'chef-workstation-app'.
The App will then be available in the system tray.

Thank you for installing Chef Workstation!
You can find some tips on getting started at https://docs.chef.io/workstation/getting_started/

Kurulumu doğrulayın.

$ chef --version
Chef Workstation version: 22.1.745
Chef InSpec version: 4.52.9
Chef CLI version: 5.5.0
Chef Habitat version: 1.6.420
Test Kitchen version: 3.2.2
Cookstyle version: 7.26.1
Chef Infra Client version: 17.9.26

Knife kurulu

$ knife --version
Chef Infra Client: 17.9.26

Şimdi aşağıdaki gibi bir chef deposu oluşturun.

$ chef generate repo chef-repo
+---------------------------------------------+
            Chef License Acceptance

Before you can continue, 3 product licenses
must be accepted. View the license at
https://www.chef.io/end-user-license-agreement/

Licenses that need accepting:
  * Chef Workstation
  * Chef Infra Client
  * Chef InSpec

Do you accept the 3 product licenses (yes/no)?

> yes

Persisting 3 product licenses...
 3 product licenses persisted.

+---------------------------------------------+
Generating Chef Infra repo chef-repo
Loading Chef InSpec profile files:
Loading Chef InSpec input files:
Loading Chef InSpec waiver files:
- Ensuring correct Chef Infra repo file content

Your new Chef Infra repo is ready! Type `cd chef-repo` to enter it.

Devam edin ve Knife yapılandırmalarını saklamak için bir dizin oluşturun:

mkdir ~/chef-repo/.chef
cd chef-repo

Bir çift RSA anahtarı oluşturun.

$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/thor/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/thor/.ssh/id_rsa
Your public key has been saved in /home/thor/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:wv055J+g9F6BTODc53tS9P+OBvC4KGCDJa9pNla0PVQ thor@debian
The key's randomart image is:
+---[RSA 4096]----+
|        .        |
|       oEo       |
|       .o o . .  |
|  . o... o.+ . . |
|   * +o S ++o . .|
|  . B o. +..o+  .|
|   = o ...*.+.. .|
|  B   ...o.= +...|
| + .   ...o o...o|
+----[SHA256]-----+

Anahtarları Chef sunucunuza gönderin. Root girişine izin verildiğinden emin olun.

$ ssh-copy-id root@192.168.205.4
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/thor/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

.pem dosyalarını Chef Server’dan kopyalayın

scp [email protected]:/root/*.pem ~/chef-repo/.chef/

Kopyalanan anahtarları görüntüleyin.

$ ls ~/chef-repo/.chef
chefadmin.pem  computingforgeeks-validator.pem

Bir Chef cookbook oluşturuldu.

$ chef generate cookbook chef-first-cookbook
Hyphens are discouraged in cookbook names as they may cause problems with custom resources. See https://docs.chef.io/workstation/ctl_chef/#chef-generate-cookbook for more information.
Generating cookbook chef-first-cookbook
Loading Chef InSpec profile files:
Loading Chef InSpec input files:
Loading Chef InSpec waiver files:
- Ensuring correct cookbook content
..........

Why not start by writing an InSpec test? Tests for the default recipe are stored at:

test/integration/default/default_test.rb

If you'd prefer to dive right in, the default recipe can be found at:

recipes/default.rb

Adım 5 – Knife’ı Yapılandırın ve Bir İstemci Düğümünü Önyükleyin.

Bir istemci düğümünün önyüklenmesi, Chef Infra Client’ın istemci sisteme yüklenmesini gerektirir, böylece sistem ile Chef sunucusu arasındaki iletişim gerçekleşebilir.

Bir istemci Düğümünü önyüklemek için kullanılabilecek iki yol vardır.

  1. Unattended install – SSH veya WinRM bağlantısı gerekmeden düğümden önyükleme
  2. knife bootstrap – chef iş istasyonundan

Bu kılavuz, Knife önyükleme yöntemini kullanarak bir istemci düğümünün nasıl önyükleneceğini gösterir.

Şimdi Workstation düğümünde aşağıdaki gibi bir config.rb dosyası oluşturun.

vim ~/chef-repo/.chef/config.rb

Aşağıdaki içeriği uygun şekilde değiştirerek ekleyin.

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                'chefadmin'
client_key               "chefadmin.pem"
validation_client_name   'computingforgeeks-validator'
validation_key           "computingforgeeks-validator.pem"
chef_server_url          'https://chef-server.computingforgeeks.com/organizations/computingforgeeks'
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]

Chef sunucunuzu ve organizasyon detaylarınızı uygun şekilde değiştirmeyi unutmayın. Dosyayı kaydedin, ardından SSL sertifikalarını kopyalamaya devam edin.

$ cd ~/chef-repo
$ knife ssl fetch
WARNING: Certificates from chef-server.computingforgeeks.com will be fetched and placed in your trusted_cert
       directory (/home/thor/chef-repo/.chef/trusted_certs).
       
       Knife has no means to verify these are the correct certificates. You should
       verify the authenticity of these certificates after downloading.
Adding certificate for chef-server_computingforgeeks_com in /home/thor/chef-repo/.chef/trusted_certs/chef-server_computingforgeeks_com.crt

config.rb’nin kurulup kurulmadığını doğrulayın.

$ knife client list
computingforgeeks-validator

Şimdi Chef Client düğümünüzü önyükleyin, bu durumda IP adresi 192.168.205.24’tür, bu nedenle aşağıdaki gibi ilerleyin.

cd ~/chef-repo/.chef
knife bootstrap 192.168.205.24 -x root -P ***** --node-name chef-client-node1

Unutmayın, root kullanıcı gerekli yükseltilmiş ayrıcalıklar için kullanılır. Chef İstemci Düğümünüzde root oturumuna izin verildiğinden emin olun.

gösterildiği gibi ilerleyin.

$ knife bootstrap 192.168.205.24 -x root -P ***** --node-name chef-client-node1
-x/--winrm-user: This flag is deprecated. Use -U/--connection-user instead.
Connecting to 192.168.205.24 using ssh
The authenticity of host '192.168.205.24 ()' can't be established.
fingerprint is SHA256:5iGXeB0Fr2zfznkmmGv8ZDIL5SdHk6nXGKt7vSf1Ufg.

Are you sure you want to continue connecting
? (Y/N) y

Önyükleme işlemi aşağıdaki gibi gerçekleşir:

Tamamlandığında, düğümün eklenip eklenmediğini doğrulayın.

$ knife node list
chef-client-node1

Düğüm hakkında daha fazla bilgiyi aşağıdaki gibi de görüntüleyebilirsiniz.

knife node show chef-client-node1

Örnek Çıktı:

Adım 6 – (İsteğe bağlı) Chef Manage’ı kurun.

Şef yönetimi, Şef sunucusu görevlerini yönetebileceğiniz bir Web arayüzü sunar. Aşağıdaki gibi kurulur.

Chef sunucusunda, Chef indirmeleri yönet sayfasından Chef yönetim paketini indirin

VER="3.2.43"
wget https://packages.chef.io/files/stable/chef-manage/${VER}/ubuntu/20.04/chef-manage_${VER}-1_amd64.deb

Paketi aşağıdaki gibi kurun:

$ sudo dpkg -i chef-manage_${VER}-1_amd64.deb
Selecting previously unselected package chef-manage.
(Reading database ... 199475 files and directories currently installed.)
Preparing to unpack chef-manage_3.2.35-1_amd64.deb ...
Unpacking chef-manage (3.2.35-1) ...
Setting up chef-manage (3.2.35-1) ...

Thank you for installing the Chef Management Console add-on!

The next step in the process is to run:

chef-manage-ctl reconfigure

Chef sunucusunu ve eklentileri aşağıdaki gibi yeniden yapılandırın

sudo chef-server-ctl reconfigure 
sudo chef-manage-ctl reconfigure

Tamamlandığında, https://serverip/login URL’sini kullanarak Web kullanıcı arayüzüne erişin. Oturum açma sayfasında, 3. adımda oluşturulan Yönetici kullanıcı için kimlik bilgilerini sağlayın.

Aşağıdaki gibi eklenmiş istemci düğümü ile chef kontrol panelini görebilmeniz gerekir.

Yazının orijinalini buradan okuyabilirsiniz.