Takip et

Ubuntu 18.04 Üzerine Ansible Kurulumu ve Yapılandırması: Kapsamlı Bir Rehber

Ubuntu 18.04 Üzerine Ansible Kurulumu ve Yapılandırması: Kapsamlı Bir Rehber Giriş Otomasyon, modern IT altyapısının temel taşlarından bir

Ubuntu 18.04 Üzerine Ansible Kurulumu ve Yapılandırması: Kapsamlı Bir Rehber

Giriş

Otomasyon, modern IT altyapısının temel taşlarından biridir. Sistem yöneticileri ve DevOps mühendisleri, sunucuları yapılandırmak, uygulamaları dağıtmak ve karmaşık iş akışlarını yönetmek için otomasyon araçlarına ihtiyaç duyarlar. Bu araçlar arasında Ansible, basitliği, aracısız yapısı ve güçlü özellikleri sayesinde öne çıkmaktadır. Bu makalede, Ubuntu 18.04 işletim sistemi üzerinde Ansible’ın nasıl kurulacağını ve temel yapılandırmalarının nasıl yapılacağını adım adım öğreneceksiniz.

Ansible Nedir?

Ansible, Red Hat tarafından geliştirilen açık kaynaklı bir otomasyon motorudur. Yapılandırma yönetimi, uygulama dağıtımı, görev otomasyonu ve sürekli dağıtım (CD) gibi birçok alanda kullanılabilir. Ansible’ın en büyük avantajlarından biri, hedef makinelerde herhangi bir aracı (agent) yazılımına ihtiyaç duymamasıdır. Bunun yerine, SSH protokolü üzerinden hedef makinelere bağlanır ve Python betiklerini çalıştırır. Bu “aracısız” mimari, kurulum ve yönetim karmaşıklığını önemli ölçüde azaltır.

Neden Ansible Kullanmalıyız?

Ansible’ın tercih edilmesinin birçok nedeni vardır:
* Aracısız Yapı: Hedef sunucularda aracı kurma ve yönetme ihtiyacını ortadan kaldırır. Sadece SSH ve Python gereklidir.
* Basitlik ve Okunabilirlik: Playbook’lar (Ansible’ın otomasyon betikleri) YAML formatında yazılır. Bu, insan tarafından kolayca okunabilir ve anlaşılabilir olmalarını sağlar.
* Güçlü ve Esnek: Binlerce modülü sayesinde neredeyse her türlü görevi otomatikleştirebilir. Özel modüller yazma yeteneği de sunar.
* Idempotent (Tekrar Çalıştırılabilir): Bir görevi birden fazla kez çalıştırmak, sistem üzerinde yalnızca ilk çalıştırmanın etkisini yaratır. Yani, bir kaynak zaten istenen durumdaysa, Ansible herhangi bir değişiklik yapmaz.
* Büyük Topluluk Desteği: Geniş bir kullanıcı ve geliştirici topluluğuna sahiptir, bu da sorun giderme ve kaynak bulma konusunda yardımcı olur.
* Ücretsiz ve Açık Kaynak: Lisans maliyeti yoktur ve kaynak kodu herkes tarafından erişilebilir ve incelenebilir.

Bu rehberde, bir kontrol makinesi (Ansible’ın kurulu olduğu ve komutların çalıştırıldığı makine) olarak Ubuntu 18.04 kullanacağız ve aynı zamanda hedef makine olarak da Ubuntu 18.04’ü ele alacağız. Ancak Ansible, herhangi bir Linux/Unix makineden Windows, ağ cihazları ve diğer birçok sisteme dağıtım yapabilir.

Önkoşullar

Ansible kurulumuna başlamadan önce, kontrol ve hedef makinelerinizde bazı önkoşulların yerine getirildiğinden emin olmalısınız.

Sistem Güncellemesi

Her iki makine için de güncel paketlere sahip olmak iyi bir uygulamadır. Aşağıdaki komutları çalıştırarak sistemlerinizi güncelleyin:

sudo apt update
sudo apt upgrade -y

Python ve PIP

Ansible, Python ile yazılmıştır ve hedef makinelerde Python’ın kurulu olmasını gerektirir. Ubuntu 18.04 varsayılan olarak Python 3 ile gelir, ancak bazı durumlarda Python 2 de bulunabilir. Ansible’ın modern sürümleri Python 3’ü tercih eder. PIP (Python Paket Yöneticisi), Ansible’ı kurmak için kullanılabilecek alternatif bir yöntemdir ve bazı Ansible bağımlılıkları için gerekli olabilir.

Kontrol makinesi ve hedef makinelerde Python 3 ve pip’in kurulu olduğundan emin olun:

sudo apt install python3 python3-pip -y

SSH Anahtar Çifti Oluşturma (Kontrol Makinesinde)

Ansible, hedef makinelere parolasız SSH bağlantısı kurmak için SSH anahtar çiftlerini kullanır. Bu, otomasyonun sorunsuz çalışması için kritik öneme sahiptir. Kontrol makinenizde bir SSH anahtar çiftiniz yoksa, aşağıdaki komutla oluşturabilirsiniz:

ssh-keygen

Bu komut size anahtarın kaydedileceği yer ve bir parola (passphrase) isteyecektir. Genellikle varsayılan konum (~/.ssh/id_rsa) ve parola olmadan devam etmek, otomasyon süreçlerini kolaylaştırır. Ancak güvenlik açısından bir parola kullanmak daha iyidir; bu durumda, Ansible’ı çalıştırırken bu parolayı sağlamanız gerekecektir.

Hedef Makine İçin SSH Erişimi

Kontrol makinesinden hedef makinelere parolasız SSH erişimi sağlamak için, kontrol makinesinde oluşturduğunuz genel anahtarı (public key) hedef makinelere kopyalamanız gerekir.

ssh-copy-id kullanıcıadı@hedef_makine_ip_adresi

Örneğin:

ssh-copy-id ansibleuser@192.168.1.100

Bu komut, hedef makinenin parolasını soracak ve genel anahtarınızı hedef makinedeki ~/.ssh/authorized_keys dosyasına ekleyecektir. İşlem tamamlandıktan sonra, kontrol makinesinden hedef makineye parola sormadan SSH bağlantısı kurabilmeniz gerekir:

ssh ansibleuser@192.168.1.100

Eğer parola sormadan bağlanabiliyorsanız, SSH erişimi doğru şekilde yapılandırılmıştır.

Ansible Kurulumu

Ansible’ı Ubuntu 18.04’e kurmanın iki ana yolu vardır: APT depoları üzerinden veya Python’ın paket yöneticisi PIP ile. APT depoları genellikle daha kararlı ve kolay yönetilebilir bir sürüm sunarken, PIP daha güncel sürümlere erişim sağlayabilir.

APT Depoları Üzerinden Kurulum

Ubuntu’nun varsayılan depolarında Ansible mevcuttur. Kurulum için aşağıdaki adımları izleyin:

1. Gerekli Depoyu Ekleme: Ansible, Ubuntu’nun “universe” deposunda bulunur. Bu depo genellikle varsayılan olarak etkindir, ancak emin olmak için:

sudo apt install software-properties-common -y
    sudo apt-add-repository --yes --update ppa:ansible/ansible

Bu komut, Ansible’ın en güncel kararlı sürümünü sağlayan PPA (Personal Package Archive) deposunu ekler ve paket listelerinizi günceller.

2. Ansible’ı Kurma:

sudo apt install ansible -y

PIP ile Kurulum (Alternatif)

Eğer daha yeni bir Ansible sürümüne ihtiyacınız varsa veya sistem genelinde değil de sanal bir ortamda kurmak istiyorsanız, PIP’i kullanabilirsiniz.

pip3 install ansible

Eğer belirli bir sürümü kurmak isterseniz:

pip3 install ansible==2.9.27 # Örnek bir sürüm

PIP ile kurulum yaparken, Ansible’ın yürütülebilir dosyasının sistem PATH’inizde olduğundan emin olmanız gerekebilir. Genellikle, ~/.local/bin dizinine kurulur.

Kurulumu Doğrulama

Ansible’ın doğru bir şekilde kurulduğunu ve sürümünü kontrol etmek için aşağıdaki komutu çalıştırın:

ansible --version

Çıktı, Ansible sürümünü, yapılandırma dosyasının konumunu, Python sürümünü ve diğer detayları göstermelidir. Örnek çıktı:

ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/ansibleuser/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, Jun  2 2021, 10:49:15) [GCC 9.4.0]

Bu çıktı, Ansible’ın başarıyla kurulduğunu ve kullanıma hazır olduğunu gösterir.

Ansible Yapılandırması

Ansible’ın temel işlevselliğini kullanmak için iki ana yapılandırma bileşeni vardır: genel yapılandırma dosyası (ansible.cfg) ve envanter dosyası (hosts).

Ansible Yapılandırma Dosyası (ansible.cfg)

ansible.cfg dosyası, Ansible’ın çalışma şeklini kontrol eden global ayarları içerir. Bu dosya genellikle /etc/ansible/ansible.cfg konumunda bulunur. Ancak, Ansible farklı konumlarda da yapılandırma dosyalarını arar (öncelik sırasına göre):
1. ANSIBLE_CONFIG ortam değişkeni ile belirtilen dosya.
2. Geçerli çalışma dizinindeki ansible.cfg.
3. Kullanıcının ana dizinindeki ~/.ansible.cfg.
4. /etc/ansible/ansible.cfg.

Genellikle, /etc/ansible/ansible.cfg dosyasını düzenlemek veya projenizin kök dizininde kendi ansible.cfg dosyanızı oluşturmak iyi bir uygulamadır.

Varsayılan ansible.cfg dosyasını düzenlemek için:

sudo nano /etc/ansible/ansible.cfg

Bu dosyada değiştirebileceğiniz bazı önemli ayarlar şunlardır:
* inventory: Varsayılan envanter dosyasının yolunu belirtir. Genellikle /etc/ansible/hosts olarak ayarlanır.
* remote_user: Hedef makinelere bağlanmak için kullanılacak varsayılan kullanıcı adı.
* ask_pass: Parola sorulup sorulmayacağını belirler. SSH anahtar çifti kullanıyorsanız False olarak ayarlanabilir.
* private_key_file: SSH anahtar dosyanızın yolu.
* host_key_checking: Hedef makine anahtarının kontrol edilip edilmeyeceğini belirler. İlk kurulumda False olarak ayarlanabilir, ancak güvenlik için True olması önerilir.
* forks: Paralel olarak çalıştırılacak işlem sayısı.

Örnek bir ansible.cfg bölümü:

[defaults]
inventory      = /etc/ansible/hosts
remote_user    = ansibleuser
ask_pass       = False
#private_key_file = ~/.ssh/id_rsa # Eğer varsayılan konumdaysa gerek yok
host_key_checking = False # İlk kurulumda kolaylık için, sonra True yapın

Değişiklikleri kaydettikten sonra dosyayı kapatın.

Envanter Dosyası (hosts) Oluşturma

Envanter dosyası, Ansible’ın yöneteceği tüm hedef makineleri ve bu makinelerle ilgili bilgileri (IP adresleri, kullanıcı adları, gruplar vb.) içerir. Varsayılan olarak bu dosya /etc/ansible/hosts konumunda bulunur.

Dosyayı düzenlemek için:

sudo nano /etc/ansible/hosts

Envanter dosyası, INI formatında veya YAML formatında olabilir. INI formatı daha yaygın ve basittir.

INI Formatında Örnek Envanter Dosyası:

[webservers]
web1.example.com
web2.example.com
192.168.1.101

[dbservers]
db1.example.com
192.168.1.102

[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_user=ansibleuser

Yukarıdaki örnekte:
* [webservers] ve [dbservers], makineleri gruplandırmak için kullanılır. Bu gruplara daha sonra playbook’larda veya komutlarda başvurulabilir.
* Makineler, DNS adı veya IP adresi ile belirtilebilir.
* [all:vars] bölümü, tüm envanterdeki makineler için geçerli olacak genel değişkenleri tanımlar.
* ansible_python_interpreter: Hedef makinedeki Python yorumlayıcısının yolunu belirtir. Ubuntu 18.04’te genellikle /usr/bin/python3 veya /usr/bin/python olabilir. Python 3 kullanılıyorsa, bu değişkeni ayarlamak önemlidir.
* ansible_user: Hedef makinelere bağlanmak için kullanılacak kullanıcı adıdır. Bu, ansible.cfg dosyasındaki remote_user ayarını geçersiz kılar veya tamamlar.

Değişiklikleri kaydedip dosyayı kapatın.

Parolasız SSH Erişimi Sağlama (Hedef Makinelere)

Daha önce bahsettiğimiz gibi, ssh-copy-id komutu ile kontrol makinenizin genel SSH anahtarını tüm hedef makinelerinize kopyalamanız gerekmektedir. Bu, Ansible’ın parolasız olarak hedef makinelere bağlanmasını ve komutları yürütmesini sağlar.

Eğer birden fazla hedef makineniz varsa, her biri için bu adımı tekrarlamanız gerekecektir:

ssh-copy-id ansibleuser@192.168.1.101
ssh-copy-id ansibleuser@192.168.1.102

Bu adımı tamamlamak, Ansible ile sorunsuz bir otomasyon deneyimi için hayati öneme sahiptir.

İlk Ansible Komutları ve Test

Kurulum ve temel yapılandırma tamamlandıktan sonra, Ansible’ın hedef makinelerle iletişim kurabildiğini test edebiliriz.

Ping Modülü ile Bağlantı Testi

Ansible’ın en basit modüllerinden biri olan ping modülü, hedef makinelerle SSH bağlantısının başarılı olup olmadığını kontrol eder.

ansible all -m ping

* ansible: Ansible komut satırı aracı.
* all: Envanter dosyasındaki tüm makineleri hedefler. Belirli bir grup için webservers veya tek bir makine için 192.168.1.101 gibi kullanabilirsiniz.
* -m ping: Kullanılacak modülü belirtir.

Başarılı bir bağlantı durumunda, çıktı aşağıdaki gibi olacaktır:

192.168.1.101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.1.102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Eğer UNREACHABLE veya FAILED gibi bir mesaj alırsanız, SSH bağlantısı, kullanıcı adı veya Python yorumlayıcı yolu gibi yapılandırmalarınızı kontrol etmeniz gerekir.

Komut Modülü ile Uzak Komut Çalıştırma

command veya shell modülleri, hedef makinelerde rastgele komutlar çalıştırmak için kullanılır. command modülü daha güvenlidir ve shell modülü kabuk özelliklerini (pipe, redirect vb.) kullanmanıza izin verir.

Hedef makinenin çalışma zamanını kontrol edelim:

ansible webservers -a "uptime"

* -a "uptime": Çalıştırılacak argümanı (komutu) belirtir.

Çıktı:

192.168.1.101 | SUCCESS | rc=0 >>
 15:30:01 up 1 day, 2:30,  1 user,  load average: 0.00, 0.01, 0.05

Faktları Toplama

Ansible, hedef makineler hakkında sistem bilgileri (işletim sistemi, IP adresleri, bellek, CPU vb.) toplayabilir. Bu bilgilere “faktlar” denir ve playbook’larda koşullu işlemler veya dinamik yapılandırmalar için kullanılabilir.

ansible webservers -m setup

Bu komut, webservers grubundaki tüm makinelerden çok sayıda sistem faktını JSON formatında döndürecektir. Bu çıktı oldukça uzun olabilir. Belirli bir faktı aramak için grep ile filtreleyebilirsiniz:

ansible webservers -m setup | grep ansible_distribution

Çıktı:

"ansible_distribution": "Ubuntu",
        "ansible_distribution_file_parsed": true,
        "ansible_distribution_file_variety": "Debian",
        "ansible_distribution_major_version": "18",
        "ansible_distribution_release": "bionic",
        "ansible_distribution_version": "18.04",

Örnek Playbook Oluşturma ve Çalıştırma

Ansible’ın gerçek gücü playbook’larda yatar. Playbook’lar, otomasyon görevlerini tanımlayan YAML dosyalarıdır. Bir playbook, bir veya daha fazla “play” içerir ve her play, belirli bir grup makine üzerinde bir dizi “task” (görev) çalıştırır.

Şimdi basit bir Nginx web sunucusu kurulumu playbook’u oluşturalım.

Basit Bir Playbook Oluşturma (Örn: Nginx Kurulumu)

Kontrol makinenizde bir dizin oluşturun ve içine nginx_install.yml adında bir dosya oluşturun:

mkdir ~/ansible_projects
cd ~/ansible_projects
nano nginx_install.yml

nginx_install.yml dosyasının içeriği şöyle olsun:

---
- name: Nginx Web Sunucusu Kurulumu ve Yapılandırması
  hosts: webservers
  become: yes # Bu play'deki görevleri root ayrıcalıklarıyla çalıştır
  tasks:
    - name: Nginx paketini güncelle ve kur
      apt:
        name: nginx
        state: latest
        update_cache: yes

    - name: Nginx servisinin çalıştığından ve başlangıçta etkin olduğundan emin ol
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Varsayılan Nginx yapılandırma dosyasını yedekle
      copy:
        src: /etc/nginx/sites-available/default
        dest: /etc/nginx/sites-available/default.bak
        remote_src: yes

    - name: Yeni bir varsayılan Nginx yapılandırma dosyası oluştur
      copy:
        content: |
          server {
              listen 80 default_server;
              listen [::]:80 default_server;
              root /var/www/html;
              index index.html index.htm index.nginx-debian.html;
              server_name _;
              location / {
                  try_files $uri $uri/ =404;
              }
          }
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: '0644'
      notify: Reload Nginx

    - name: Nginx yapılandırmasını kontrol et
      command: nginx -t
      register: nginx_config_test
      failed_when: nginx_config_test.rc != 0
      changed_when: false
      notify: Reload Nginx

  handlers:
    - name: Reload Nginx
      service:
        name: nginx
        state: reloaded

Bu playbook, webservers grubundaki tüm makinelere Nginx’i kuracak, başlatacak, varsayılan yapılandırma dosyasını yedekleyecek, yeni bir yapılandırma oluşturacak ve Nginx servisini yeniden yükleyecektir.

Playbook’u Çalıştırma

Playbook’u çalıştırmak için ansible-playbook komutunu kullanın:

ansible-playbook nginx_install.yml

Komutu çalıştırdığınızda, Ansible adımları sırasıyla yürütecek ve her görevin durumunu gösterecektir (changed, ok, failed).

Çıktıda changed ifadesini gördüğünüzde, Ansible’ın hedef makinede bir değişiklik yaptığını anlarsınız. ok ise, görev başarıyla tamamlanmış ancak herhangi bir değişiklik yapılmamış demektir (çünkü istenen durum zaten mevcuttu).

Playbook başarıyla tamamlandıktan sonra, bir web tarayıcısından hedef makinenin IP adresine giderek Nginx’in çalıştığını kontrol edebilirsiniz. Varsayılan Nginx karşılama sayfası yerine, eğer index.html oluşturmadıysanız, 404 hatası veya boş bir sayfa görebilirsiniz.

Playbook İçeriğini Anlama

* ---: YAML dosyasının başlangıcını belirtir.
* - name: ...: Play veya görevin açıklayıcı adıdır.
* hosts: webservers: Bu play’in hangi hedef makinelerde çalışacağını belirtir. Envanter dosyasındaki bir grup adıdır.
* become: yes: Bu play’deki tüm görevlerin sudo ayrıcalıklarıyla (root olarak) çalıştırılmasını sağlar.
* tasks:: Bu play’de çalıştırılacak görevlerin listesidir.
* apt:: Bir Ansible modülüdür. Bu örnekte, apt modülü Debian/Ubuntu tabanlı sistemlerde paket yönetimi için kullanılır.
* name: nginx: Kurulacak paketin adı.
* state: latest: Paketin en son sürümde olmasını sağlar.
* update_cache: yes: Paketi kurmadan önce apt önbelleğini günceller.
* service:: Bir servisi yönetmek için kullanılan modüldür (başlatma, durdurma, yeniden başlatma, etkinleştirme).
* state: started: Servisin çalışır durumda olmasını sağlar.
* enabled: yes: Servisin sistem başlangıcında otomatik olarak başlamasını sağlar.
* copy:: Dosyaları kontrol makinesinden hedef makineye kopyalamak veya doğrudan içerik oluşturmak için kullanılır.
* src: Kontrol makinesindeki kaynak dosya.
* dest: Hedef makinedeki varış yolu.
* content: Doğrudan dosya içeriğini tanımlamak için kullanılır.
* owner, group, mode: Oluşturulan dosyanın izinlerini ve sahipliğini ayarlar.
* command: nginx -t: Hedef makinede bir komut çalıştırır.
* register: nginx_config_test: Çalıştırılan komutun çıktısını bir değişkene kaydeder.
* failed_when: nginx_config_test.rc != 0: Komutun dönüş kodu (rc) sıfır değilse görevin başarısız olduğunu belirtir.
* changed_when: false: Bu görevin her zaman “ok” olarak işaretlenmesini sağlar, çünkü bir test komutu sistemde değişiklik yapmaz.
* notify: Reload Nginx: Bir görevde değişiklik yapıldığında (örneğin, bir yapılandırma dosyası değiştiğinde), belirtilen “handler”ı tetikler.
* handlers:: Bir veya daha fazla görev tarafından tetiklenen eylemlerdir. Genellikle servisleri yeniden başlatmak veya yeniden yüklemek için kullanılır. Handler’lar yalnızca bir kez, play’deki tüm görevler tamamlandıktan sonra çalışır.

Yaygın Ansible Kavramları

Ansible’ı etkin bir şekilde kullanmak için bazı temel kavramları anlamak önemlidir.

Modüller

Modüller, Ansible’ın “iş birimleridir”. Bir modül, belirli bir görevi gerçekleştiren (örneğin, paket yükleme, servis yönetimi, dosya kopyalama) bağımsız bir kod parçasıdır. Ansible, binlerce yerleşik modül ile gelir ve topluluk tarafından geliştirilen birçok modül de mevcuttur. Playbook’larda apt, service, copy, user, file gibi modülleri kullanarak görevleri tanımlarsınız.

Envanterler

Envanter, Ansible’ın yöneteği makinelerin listesidir. Statik (INI veya YAML dosyaları) veya dinamik (bulut sağlayıcılarından veya CMDB’den bilgi çeken betikler) olabilirler. Envanter, makineleri gruplara ayırmanıza olanak tanır, böylece belirli bir grup üzerinde görevler çalıştırabilirsiniz.

Playbook’lar

Playbook’lar, Ansible’ın otomasyon betikleridir. YAML formatında yazılırlar ve bir veya daha fazla “play” içerirler. Her play, belirli bir ana bilgisayar grubunu hedefler ve bu ana bilgisayarlarda bir dizi “görev” çalıştırır. Playbook’lar, karmaşık çok adımlı iş akışlarını tanımlamak için kullanılır.

Roller

Roller, Ansible playbook’larını yeniden kullanılabilir ve düzenli bir şekilde organize etmek için kullanılan bir yapıdır. Bir rol, belirli bir işlevi yerine getirmek için gereken tüm dosyaları (görevler, şablonlar, dosyalar, değişkenler, handler’lar) standart bir dizin yapısı içinde gruplandırır. Örneğin, bir “webserver” rolü, Nginx’i kurmak, yapılandırmak ve başlatmak için gereken her şeyi içerebilir.

Faktlar

Faktlar, Ansible’ın hedef makinelerden topladığı sistem bilgileridir. İşletim sistemi, ağ arayüzleri, bellek, CPU gibi bilgiler faktlar arasında yer alır. Bu faktlar, playbook’larda koşullu mantık veya dinamik değişkenler oluşturmak için kullanılabilir. setup modülü ile faktlar toplanır.

Değişkenler

Değişkenler, Ansible’da dinamik değerleri depolamak için kullanılır. Envanterde, playbook’larda, rollerde veya harici dosyalarda tanımlanabilirler. Değişkenler, playbook’ları daha esnek ve yeniden kullanılabilir hale getirir. Örneğin, bir web sunucusu playbook’unda port numarası veya web kök dizini gibi değerleri değişken olarak tanımlayabilirsiniz.

Ansible Vault Kullanımı

Ansible Vault, hassas verileri (parolalar, API anahtarları, SSH özel anahtarları vb.) şifrelemek ve yönetmek için kullanılan bir özelliktir. Şifrelenmiş veriler, git gibi sürüm kontrol sistemlerinde güvenli bir şekilde saklanabilir ve sadece doğru Vault parolasıyla erişilebilir.

Vault Nedir ve Neden Kullanılır?

Otomasyon betiklerinde hassas bilgileri düz metin olarak saklamak büyük bir güvenlik riskidir. Ansible Vault, bu tür verileri AES256 şifrelemesi kullanarak korur. Bir Vault dosyası oluşturduğunuzda, bu dosya şifrelenir ve içeriğini görmek veya düzenlemek için Vault parolasını sağlamanız gerekir.

Vault Dosyası Oluşturma

Yeni bir Vault dosyası oluşturmak için:

ansible-vault create secret_vars.yml

Bu komut sizden yeni bir Vault parolası girmenizi isteyecektir. Dosya oluşturulduktan sonra, içeriğini şifreli bir şekilde düzenleyebilirsiniz. Örneğin:

db_password: "supersecretpassword"
api_key: "some_long_api_key_string"

Kaydedip çıktığınızda, dosya şifrelenmiş olacaktır. Dosyanın içeriğini görüntülemek için:

ansible-vault view secret_vars.yml

Dosyayı düzenlemek için:

ansible-vault edit secret_vars.yml

Vault ile Playbook Çalıştırma

Bir playbook’ta şifrelenmiş değişkenleri kullanmak için, playbook’unuzda Vault dosyasını içe aktarmanız ve playbook’u çalıştırırken Vault parolasını sağlamanız gerekir.

Örneğin, secret_vars.yml dosyasını playbook.yml içinde kullanmak için:

---
- name: Uygulama Kurulumu
  hosts: webservers
  become: yes
  vars_files:
    - secret_vars.yml # Vault dosyasını içe aktar

  tasks:
    - name: Veritabanı bağlantı bilgilerini yapılandır
      template:
        src: templates/config.j2
        dest: /etc/app/config.ini
      vars:
        db_pass: "{{ db_password }}" # Vault'tan gelen değişkeni kullan

Playbook’u çalıştırırken Vault parolasını sağlamanız gerekir:

ansible-playbook playbook.yml --ask-vault-pass

Veya bir dosya içinde saklanan parolayı kullanabilirsiniz (bu da güvenlik riskleri taşır, ancak otomasyon için bazen gereklidir):

ansible-playbook playbook.yml --vault-password-file ~/.vault_pass.txt

~/.vault_pass.txt dosyası sadece Vault parolasını içeren tek satırlık bir dosya olmalıdır ve izinleri 0600 olarak ayarlanmalıdır.

Sorun Giderme İpuçları

Ansible kullanırken karşılaşabileceğiniz yaygın sorunlar ve çözüm ipuçları:

SSH Bağlantı Hataları

* “UNREACHABLE!” hatası:
* Hedef makinenin IP adresini veya ana bilgisayar adını kontrol edin.
* Hedef makinenin ağ bağlantısını ve güvenlik duvarı ayarlarını kontrol edin (SSH portu 22 açık mı?).
* Kontrol makinesinden hedef makineye ssh kullanıcıadı@ip_adresi ile manuel olarak bağlanmayı deneyin.
* “Authentication failed.” hatası:
* SSH anahtar çiftinin doğru kopyalandığından emin olun (ssh-copy-id).
* ansible_user veya remote_user ayarlarındaki kullanıcı adını kontrol edin.
* Kontrol makinesindeki özel anahtar dosyasının (~/.ssh/id_rsa) izinlerinin doğru olduğundan emin olun (chmod 600 ~/.ssh/id_rsa).

Yetkilendirme Sorunları (sudo)

* “sudo: a password is required” hatası:
* Hedef makinedeki kullanıcının sudo ayrıcalıkları olduğundan ve parola sormadan sudo kullanabildiğinden emin olun (örneğin, /etc/sudoers dosyasında NOPASSWD ayarı).
* Eğer parola gerekiyorsa, playbook’u çalıştırırken --ask-become-pass parametresini kullanın.

Modül Bulunamadı Hataları

* “module ‘ansible.builtin.apt’ not found” veya benzeri:
* Ansible’ın doğru şekilde kurulduğunu ve PATH’inizde olduğunu kontrol edin (ansible --version).
* PIP ile kurduysanız, ~/.local/bin dizininin PATH’inizde olduğundan emin olun.
* Python ve PIP’in hedef makinede kurulu olduğundan emin olun (ansible_python_interpreter ayarını kontrol edin).

Verbose Mod Kullanımı

Sorunları teşhis etmek için Ansible’ı verbose modda çalıştırmak çok faydalıdır. -v, -vv, -vvv, -vvvv gibi parametrelerle çıktının detay seviyesini artırabilirsiniz.

ansible all -m ping -vvv
ansible-playbook nginx_install.yml -vvvv

Daha yüksek v sayısı, daha fazla hata ayıklama bilgisi sağlar, bu da sorunların kök nedenini bulmanıza yardımcı olur.

Sonuç

Bu kapsamlı rehberde, Ubuntu 18.04 işletim sistemi üzerinde Ansible’ın nasıl kurulacağını ve yapılandırılacağını adım adım öğrendiniz. Ansible’ın aracısız mimarisi, YAML tabanlı playbook’ları ve zengin modül ekosistemi sayesinde altyapı otomasyonu, uygulama dağıtımı ve yapılandırma yönetimi gibi birçok görevi kolayca otomatikleştirebilirsiniz.

Temel kurulum, SSH anahtar yönetimi, envanter ve yapılandırma dosyalarının oluşturulması, ilk komutların ve bir örnek playbook’un çalıştırılması gibi konuları ele aldık. Ayrıca, Ansible Vault kullanarak hassas verileri nasıl güvence altına alacağınızı ve yaygın sorunları nasıl gidereceğinizi de öğrendiniz.

Ansible, DevOps süreçlerinizi hızlandırmak ve IT operasyonlarınızın verimliliğini artırmak için güçlü bir araçtır. Bu rehberdeki bilgileri temel alarak, kendi otomasyon senaryolarınızı geliştirmeye başlayabilir ve altyapınızı daha yönetilebilir hale getirebilirsiniz. Unutmayın, pratik yapmak ve farklı modülleri keşfetmek, Ansible becerilerinizi geliştirmenin en iyi yoludur. İleri düzey konular arasında roller, dinamik envanterler, CI/CD entegrasyonları ve Ansible Tower/AWX gibi araçlar bulunmaktadır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.