Bu Yazıda Configuration Drift, Configuration Provisioning ve Ağ Otomasyon / Yapılandırma Araçları olan Ansible, Puppet, Chef Hakkında Bilgi Edineceğiz.
Configuration Drift
- Cihaz Yapılandırmalarında Zaman İçinde Yapılan Bireysel Değişiklikler, Şirketin Standart Yapılandırma Şablonlarından Sapılmasına Neden Oluyorsa Buna Configuration Drift Denir. Bu İyi Bir Şey Değildir ve Mümkün Olduğunca Kaçınılmalıdır.
- Ağdaki Her Bir Cihazın IP Adres, Host Name gibi Yapılandırmaları Benzersiz Olmasına Rağmen Cihaz Yapılandırması Genellikle Şirketin Ağ Mühendisleri Tarafından Tasarlanan Standart Şablonlarda Tanımlanır.
- Örneğin Tüm Router'ların Aynı SNMP, Syslog, AAA, vb. Yapılandırmalarına, Bir veya İki WAN Port, Bir veya İki LAN Port, vb. Sahip Olmasını Bekleyebilirsiniz. Her Cihaz için Yalnızca Birkaç Benzersiz Yapılandırma Dışında Bunların Tümü Standart Şablonları Takip Eder.
- Ağ Mühendisleri; Ağ Sorunlarını Gidermek, Yapılandırmaları Test Etmek, vb. için Değişiklikler Yaptıkça Cihazın Yapılandırması Standarttan Uzaklaşabilir. Genellikle Bu Bireysel Değişikliklerin Kayıtları ve Sebepleri Tutulmaz, Bu da Gelecekte Sorunlara Yol Açabilir.
- Bu Yazıda İnceleyeceğimiz Ağ Otomasyon / Yapılandırma Araçları Bu Konuda Yardımcı Olabilir. Ancak Bu Araçlar Kullanılmasa Bile Standart Yapılandırma Şablonlarına Sahip Olmaya Çalışmak En İyisidir.
- Örneğin Yapılandırmada Bir Değişiklik Yapıldığında Yapılandırmayı Metin Dosyası olarak Kaydedin ve Paylaşılan Bir Klasöre Yerleştirin.
- hostname_yyyymmdd -> Standart Bir Dosya Adlandırma Sistemi Kullandık.
- R1 ve R2 Yapılandırmasının Üç Farklı Sürümüne Sahibiz. Bu, Yapılandırmanın Önceki Sürümlerini Takip Etmenize ve Değişikliklerin Ne Zaman Yapıldığını Görmenize Yardımcı olur.
- Bir Mühendis Değişiklik Yaptıktan Sonra Yeni Yapılandırmayı Klasöre Yerleştirmeyi Unutabileceğinden Bu Sistemde Kusurlar Vardır. Yapılandırmalar Bunun Klasöre Düzgün Bir Şekilde Kaydedilse Bile Yapılandırmaların Standart Şablon ile Eşleştiğini Garanti Etmez. Yalnızca Yapılandırmanın Farklı Sürümlerini Takip Etmemize Yardımcı olur.
- Ayrıca Yüzlerce Cihaza Sahip Ağlarda Manuel Bir Yaklaşım Çok Ölçeklenebilir Değildir.
Configuration Provisioning
- Yapılandırma Değişikliklerinin Cihazlara Nasıl Uygulandığını İfade Eder. Yalnızca Mevcut Cihazlarda Değişiklik Yapmakla Kalmayıp Yeni Cihazların Yapılandırılmasını da İçerir.
- Geleneksel olarak Configuration Provisioning, Telnet / SSH veya Console Port Üzerinden Cihazlara Tek Tek Bağlanarak Yapılır. Bu, Büyük Ağlarda Pratik Değildir.
- Ansible, Puppet, Chef gibi Ağ Otomasyon / Yapılandırma Araçları, Çok Az Zaman ve Çaba ile Cihazlarda Toplu Ölçekte Değişiklik Yapmamıza olanak Tanır.
- İki Temel Bileşen: Template ve Variable.
- Template
- Yukarıdaki Resimde Host Name, IP Adres, Subnet Mask, OSPF Process ID, OSPF Area gibi Şeyler için Değerlerin Verilmediği Template Örneği Verilmiştir.
- Variable
- Belirli Bir Cihaz için Değişkenleri Belirten Ayrı Bir Dosya Kullanıyoruz, Bu Durumda R1.
- Template Dosyası ile Birlikte Uygun Variable Dosyası Verildiğinde Config Dosyası oluşturulur ve Cihaza Gönderilir.
- Aynı Anda Birçok Cihazın Yapılandırmasını Oluşturmanın Ne Kadar Kolay olacağını Görebiliyorsunuz.
- Tüm Cihazlar Aynı Template Dosyasını Paylaşabilir ve Sadece Host Name, IP Adres, vb. gibi Değişken Bilgilerini Belirtmemiz Yeterlidir.
- Template ve Variable, Ağ Otomasyon / Yapılandırma Aracına Bağlı olarak Farklı Şekilde Yönetilir, Ancak Hepsi Böyle Bir Sistem Kullanır.
Network Automation / Configuration Tools
- Bu Araçlar Başlangıçta Ağ Cihazlarının Yönetimi için Geliştirilmemiştir.
- Bu Araçlar, Sanal Makinelerin (VM) Yükselişinden Sonra Sistem Yöneticilerinin VM Oluşturma, Yapılandırma ve Kaldırma Sürecini Otomatikleştirmesini Sağlamak için Geliştirildi. Ancak Ağ Cihazlarını Yönetmek için de Kullanılırlar. Her Boyuttaki Ağlarda Faydalı olabilirler, Ancak Genellikle Büyük Ağlarda Kullanılırlar.
- Bu Araçlar Aşağıdaki Görevleri Gerçekleştirmek için Kullanılabilir:
- Yeni Cihazlar için Yapılandırma Oluşturulabilir.
- Template Kullanarak Yeni Bir Cihaz için Yapılandırma Oluşturmak Çok Basittir.
- Cihazlarda Yapılandırma Değişiklikleri Yapılabilir (Ağdaki Tüm Cihazlarda veya Belirli Bir Cihaz Grubunda veya Yalnızca Bir Cihaz).
- Hangi Cihazlarda Hangi Değişiklikleri Yapmak İstediğinizi Ansible veya Puppet veya Chef'e Söylersiniz ve İşin Geri Kalanını Sizin için Yaparlar.
- Tanımlanmış Standart Yapılandırma Şablonlarına Uyulması için Cihaz Yapılandırmaları Kontrol Edilebilir.
- Bir Cihazın Yapılandırması Standart Şablona Uymuyorsa Bir Uyarı Gönderilebilir. Ardından Yapılandırmanın Standart Şablon ile Yeniden Uyumlu olmasını Sağlamak için Bu Sorunu Araştırabilir ve Düzeltebilirsiniz.
- Cihazlar Arasındaki ve Aynı Cihazdaki Farklı Yapılandırma Sürümleri Karşılaştırılabilir.
Ansible
- Red Hat Şirketine Ait Açık Kaynaklı Kodlu Ağ Otomasyon / Yapılandırma Aracıdır (https://github.com/ansible/ansible).
- Python Programlama Dilinde Yazılmıştır.
- Çalışması için Yönetilen Cihazlarda Herhangi Bir Özel Yazılım Gerektirmez. Bu Duruma Agentless Denir.
- Ansible, Push Model Kullanır. Ansible Server (Control Node), Cihazlara Bağlanmak, Bilgi Almak ve Yapılandırma Değişikliklerini Göndermek için SSH Kullanır.
- Ansible Kurduktan Sonra Birkaç Metin Dosyası Oluşturmalısınız:
- Playbook: Ansible'ın Yapması Gereken Görevleri İçerir. YAML Formatında Yazılır.
- Inventory: Ansible Tarafından Yönetilen Cihazları ve Bunların Özelliklerini Listeler. INI, YAML veya Diğer Formatlarda Yazılabilir.
- Template: Standart Yapılandırma Şablonunu Temsil Eder. Jinja2 Formatında Yazılır.
- Variable: Değişkenleri ve Değerlerini Listeler. Bu Değerler, Template Dosyasında Uygun Yerlere Yerleştirilir. YAML Formatında Yazılır.
- Örnek
- Inventory, Yönetilen Cihazları Listeler. Template, Yönetilen Cihazlar için Standart Yapılandırma Şablonu Sağlar. Variable, Belirli Değişkenleri ve Bunların Değerlerini Sağlar. Bu Girdiler, Yönetilen Cihazlara Yapılandırmayı Göndermek için Gerekli Görevleri Gerçekleştiren Playbook'a İletilir.
Puppet
- Ruby Programlama Dilinde Yazılmıştır.
- Çalışması için Yönetilen Cihazlarda Belirli Yazılımların Yüklenmesini Gerektirir. Bu Duruma Agent-Based Denir.
- Puppet, Aracısız (Agentless) Çalıştırılabilir. Harici Hostta External Agent (Proxy Agent) Çalıştırılır ve Yönetilen Cihazlara Bağlanmak için SSH Kullanır.
- Puppet Server, Puppet Master olarak Adlandırılır.
- Puppet, Pull Model Kullanır (Client'ler, Puppet Master'dan Yapılandırmaları Alır).
- Client'ler, Puppet Master ile İletişim Kurmak için TCP 8140 Portunu Kullanır.
- Dosyalar için Puppet DSL Formatı Kullanılır.
- Puppet Master'da Gerekli olan Metin Dosyaları:
- Manifest: Cihazın Yapılandırmasını Tanımlar.
- Puppet Master, Yönetilen Cihazlar için Özel Yapılandırmalar Oluşturmak için Bu Dosyayı Kullanır.
- Template: Ansible Template Dosyasına Benzer. Manifest Dosyasını Oluşturmak için Kullanılır.
- Örnek
- Bazı Cihazlarda İletişim Kurmak için REST API Kullanan Puppet Agent Kuruludur. Ancak Bir Cihazda Puppet Agent Kurulu Değildir. Puppet Agent Yerine External Agent (Proxy Agent) Aracılığı ile İletişim Kurulacaktır.
- Her İki Durumda da Ağ Cihazları, Puppet Master'dan Yapılandırmaları Alır.
Chef
- Ruby Programlama Dilinde Yazılmıştır.
- Çalışması için Yönetilen Cihazlarda Belirli Yazılımların Yüklenmesini Gerektirir. Bu Duruma Agent-Based Denir.
- Chef, Pull Model Kullanır.
- Client'ler, Chef Server ile İletişim Kurmak için TCP 10002 Portunu Kullanır.
- Dosyalar için Ruby Programlama Dilini Dayalı DSL Formatı Kullanılır.
- Chef Tarafından Kullanılan Metin Dosyaları:
- Resource: Yemek Tarifindeki 'Malzemeler' gibi Düşünebiliriz. Chef Tarafından Yönetilen Yapılandırma Nesnelerini Tanımlar.
- Yapılandırma Nesnesi, Örneğin Bir Dizi Yapılandırma Komutu Olabilir.
- Recipe: Yemek Kitabındaki 'Tarifler' gibi Düşünebiliriz. Resource Kullanılarak Gerçekleştirilen Görevleri Belirtir.
- Cookbook: Yemek Kitabı. Birlikte Gruplandırılmış Bir Dizi Tarif (Recipe).
- Run-List: Cihazı İstenen Yapılandırma Durumuna Getirmek için Çalıştırılan Sıralı Tarifler (Recipes).
- Örnek - Kaynak: https://docs.chef.io/chef_overview/
- Yönetici; Cookbook, Recipe, vb. Hazırlamak için Chef Workstation Kullanacaktır.
- Gerekli Bilgiler Chef Server'da Saklanır. Yönetilen Cihazlar (Chef Client), Chef Server ile İletişim Kurar. Chef Client; Server, Storage, Virtual Platform, Public Cloud ve Ağ Cihazı olabilir.
- Daha Önce de Belirtildiği gibi Bu Araçlar Özellikle Ağ Cihazları için Tasarlanmamıştır ve Çeşitli Amaçlar için Kullanılabilirler.
Ansible, Puppet, Chef Comparision
Puppet ve Chef, REST API Birlikte HTTPS Kullandığı için TCP 443 Portunu da Kullanır.
Quizs
Cevaplar (Sırası ile):
- b
- a, c
- d
- a, c
- b
Okuduğunuz için Teşekkürler.
Yorum Gönder
Yorum Gönder