31 روز قبل آزمون CCNAسیسکو

مقدمات Automation شبکه – روز 1

Networks Automation

امروز بررسی می‌کنیم که چگونه Automation شبکه بر مدیریت شبکه تأثیر می‌گذارد. به طور خاص، ابزارهای مدیریت پیکربندی مانند Puppet، Chef و Ansible را مرور می‌کنیم. این ابزارها، همراه با سایر ابزارهای مدیریت شبکه، از رابط‌های برنامه‌نویسی کاربردی مبتنی بر انتقال وضعیت نمایشی (REST APIs) و JavaScript Object Notation (JSON) استفاده می‌کنند.

فرمت‌های داده

فرمت‌های داده روشی برای ذخیره‌سازی و تبادل داده در یک ساختار مشخص ارائه می‌دهند. در ادامه برخی از رایج‌ترین فرمت‌های داده مورد استفاده در Automation شبکه و برنامه‌پذیری شبکه آورده شده است:

مقایسه فرمت‌های داده

فرمت داده منشأ / تعریف هدف اصلی موارد استفاده رایج
JSON JavaScript (JS) language; RFC 8259 مدل‌سازی و سریال‌سازی عمومی داده‌ها REST APIs
XML World Wide Web Consortium (W3C.org) فرمت متنی متمرکز بر داده، که امکان مدل‌سازی داده را فراهم می‌کند REST APIs، صفحات وب
YAML YAML.org مدل‌سازی عمومی داده‌ها Ansible

ویژگی‌های هر فرمت داده

هر فرمت داده دارای ویژگی‌های خاصی است:

  • سینتکس، که شامل انواع براکت‌های مورد استفاده مانند [ ]، ( ) و { }، به‌کارگیری فضای خالی، تورفتگی، نقل‌قول‌ها، کاماها و سایر عناصر است.
  • نمایش اشیا، مانند کاراکترها، رشته‌ها، لیست‌ها و آرایه‌ها.
  • نمایش جفت کلید/مقدار. کلید (که معمولاً در سمت چپ قرار دارد) داده را شناسایی یا توصیف می‌کند. مقدار (در سمت راست) داده‌ای است که می‌تواند شامل کاراکتر، رشته، عدد، لیست یا نوع داده‌ای دیگر باشد.

فرمت داده‌ای که انتخاب می‌شود، بستگی به نوع فرمت مورد استفاده در اپلیکیشن، ابزار یا اسکریپت دارد. با این حال، آزمون CCNA به طور خاص بر تفسیر داده‌های JSON تمرکز دارد.

فرمت داده JSON

JSON یک فرمت داده خوانا برای انسان است که توسط برنامه‌ها برای ذخیره‌سازی، انتقال و خواندن داده‌ها استفاده می‌شود. این فرمت به‌راحتی قابل تجزیه بوده و می‌توان آن را با بیشتر زبان‌های برنامه‌نویسی مدرن، از جمله Python، به کار برد.

پایین خروجی جزئی دستور show interface GigabitEthernet0/0/0 را بر روی یک روتر IOS نشان می‌دهد.

GigabitEthernet0/0/0 is up, line protocol is up (connected)  
Description: Wide Area Network  
Internet address is 172.16.0.2/24  

حالا در مثال پایین نشان می‌دهد که این اطلاعات چگونه می‌توانند در فرمت JSON نمایش داده شوند.

خروجی JSON

{
    "ietf-interfaces:interface": {
        "name": "GigabitEthernet0/0/0",
        "description": "Wide Area Network",
        "enabled": true,
        "ietf-ip:ipv4": {
            "address": [
                {
                    "ip": "172.16.0.2",
                    "netmask": "255.255.255.0"
                }
            ]
        }
    }
}

قوانین نحوی JSON

داده‌های JSON مجموعه‌ای از جفت کلید/مقدار هستند که از قوانین زیر پیروی می‌کنند:

  • جفت کلید/مقدار: هر داده شامل یک جفت کلید و مقدار است.
  • کلید (Key): یک متن داخل علامت نقل‌قول دوتایی است که قبل از دو نقطه (:) قرار گرفته و به‌عنوان نامی برای مقدار متناظر استفاده می‌شود.
  • مقدار (Value): مقدار مرتبط با یک کلید که می‌تواند از انواع زیر باشد:
    • متن (Text): در نقل‌قول دوتایی قرار می‌گیرد.
    • عدد (Numeric): بدون نقل‌قول نوشته می‌شود.
    • آرایه (Array): فهرستی از مقادیر که داخل براکت مربعی [ ] قرار می‌گیرند.
    • شیء (Object): یک یا چند جفت کلید/مقدار که داخل آکولاد { } محصور شده‌اند.
  • چندین جفت کلید/مقدار: هنگام لیست کردن چندین جفت کلید/مقدار، هر جفت باید با یک کاما (,) از دیگری جدا شود، به‌جز آخرین جفت.

یک لیست از آدرس‌های IPv4 ممکن است به شکل زیر باشد که در نمایش داده شده است.

کلید اصلی addresses است که مقدار آن یک آرایه محسوب می‌شود. هر آیتم درون این آرایه یک شیء جداگانه است که با آکولاد { } محصور شده و با کاما از سایر آیتم‌ها جدا می‌شود. هر شیء دارای دو جفت کلید/مقدار است:

  • آدرس IPv4 (ip)
  • ماسک زیرشبکه (netmask)

در این آرایه، اشیاء به‌صورت مجزا تعریف شده‌اند و پس از آخرین شیء، آرایه با یک براکت مربعی بسته ( ] ) خاتمه می‌یابد.

لیست JSON از آدرس‌های IPv4

{
    "addresses": [
        {
            "ip": "172.16.0.2",
            "netmask": "255.255.255.0"
        },
        {
            "ip": "172.16.0.3",
            "netmask": "255.255.255.0"
        },
        {
            "ip": "172.16.0.4",
            "netmask": "255.255.255.0"
        }
    ]
}

APIهای RESTful

APIها برای تبادل داده بین دو برنامه استفاده می‌شوند. برخی از APIها برای ارتباطات درون یک سیستم‌عامل واحد (OS) طراحی شده‌اند، در حالی که برخی دیگر برای برنامه‌هایی که روی رایانه‌های دیگر اجرا می‌شوند، در دسترس هستند. این APIها باید پروتکل شبکه را تعریف کنند. بسیاری از آنها بر اساس REST ساخته شده‌اند.

REST یک سبک معماری برای طراحی برنامه‌های کاربردی تحت وب است. یک API مبتنی بر REST از پروتکل HTTP برای درخواست‌ها و پاسخ‌ها استفاده می‌کند. این نوع API مجموعه‌ای از توابع را برای تعامل با منابع از طریق متدهای HTTP مانند GET و POST تعریف می‌کند. یک API زمانی RESTful محسوب می‌شود که ویژگی‌های زیر را داشته باشد:

  • Client/Server: کلاینت بخش فرانت‌اند را مدیریت می‌کند و سرور بک‌اند را کنترل می‌کند. هر یک از این دو بخش می‌توانند به طور مستقل جایگزین شوند.
  • Stateless: هیچ داده‌ای بین درخواست‌ها روی سرور ذخیره نمی‌شود. اطلاعات نشست (Session) در سمت کلاینت نگهداری می‌شود.
  • Cacheable: کلاینت‌ها می‌توانند پاسخ‌ها را برای بهبود عملکرد کش کنند.

پیاده‌سازی RESTful

یک وب‌سرویس RESTful شامل مجموعه‌ای از منابع است که چهار جنبه مشخص دارد:

  • فرمت داده پشتیبانی‌شده توسط وب‌سرویس، که معمولاً JSON، XML یا YAML است.
  • مجموعه متدهای عملیاتی که توسط وب‌سرویس پشتیبانی می‌شوند و بر اساس متدهای HTTP هستند.
  • ساختار API که باید Hypertext Driven باشد.
  • شناسه یکتای منبع (URI) برای وب‌سرویس، مانند http://example.com/resources.

APIهای RESTful از متدهای HTTP متداول مانند POST، GET، PUT، PATCH و DELETE استفاده می‌کنند. جدول زیر نشان می‌دهد که این متدها با عملیات RESTful متناظر هستند.

متدهای HTTP و عملیات RESTful

متد HTTP عملیات RESTful
POST ایجاد (Create)
GET خواندن (Read)
PUT/PATCH به‌روزرسانی (Update)
DELETE حذف (Delete)

درخواست‌های API RESTful

یک API مبتنی بر REST با استفاده از URI درخواست داده می‌شود. URI رشته‌ای از کاراکترها است که یک منبع شبکه‌ای خاص را شناسایی می‌کند. همان‌طور که در شکل زیر نشان داده شده، URI شامل دو بخش اصلی است:

  • Uniform Resource Name (URN): تنها نام فضای نام (Namespace) منبع را بدون اشاره به پروتکل مشخص می‌کند.
  • Uniform Resource Locator (URL): مکان دقیق منبع را در شبکه مشخص می‌کند.

ساختار یک URI

Structure of a URI

یک URI از اجزای زیر تشکیل شده است:

  • پروتکل/طرح (Protocol/Scheme): مانند HTTPS یا سایر پروتکل‌ها از جمله FTP، SFTP، mailto، NNTP.
  • نام میزبان (Hostname): مانند www.example.com.
  • مسیر و نام فایل (Path and File Name): به عنوان مثال /author/book.html.
  • بخش قطعه (Fragment): در اینجا #page155.

درخواست API RESTful به سرور MapQuest

یک درخواست RESTful API پاسخی را از سرور API دریافت می‌کند. به عنوان مثال، شکل زیر یک درخواست GET به سرور MapQuest API را نشان می‌دهد که مسیر بین San Jose تا Monterey را در قالب JSON ارائه می‌دهد.

درخواست API RESTful به سرور MapQuest

RESTful API Request to the MapQuest API Server

این بخش‌های مختلف یک درخواست API را نشان می‌دهد:

  • سرور API: آدرس URL برای سروری که درخواست‌های REST را پاسخ می‌دهد.
  • منابع (Resources): مشخص می‌کند که چه چیزی درخواست شده است.
  • کوئری (Query): اطلاعات خاصی را مشخص می‌کند که کلاینت درخواست می‌کند. کوئری‌ها می‌توانند شامل موارد زیر باشند:
    • فرمت (Format): معمولاً JSON است اما می‌تواند YAML یا XML نیز باشد.
    • کلید (Key): برای احراز هویت (در صورت نیاز).
    • پارامترها (Parameters): برای ارسال اطلاعات مرتبط با درخواست استفاده می‌شوند.

پاسخ JSON دریافتی از یک درخواست API

{
    "route": {
        "hasTollRoad": false,
        "hasBridge": true,
        "boundingBox": {
            "lr": {
                "lng": -121.667061,
                "lat": 36.596809
            },
            "ul": {
                "lng": -121.897125,
                "lat": 37.335258
            }
        },
        "distance": 71.712,
        "hasTimeRestriction": false,
        "hasTunnel": false,
        "hasHighway": true,
        "computedWaypoints": [],
        "routeError": {
            "errorCode": -400,
            "message": ""
        }
    }
}

ابزارهای مدیریت پیکربندی

یک شرکت با یک مهندس شبکه ممکن است به‌خوبی بتواند پیکربندی تجهیزات شبکه را مدیریت کند، به‌ویژه اگر پیکربندی‌ها به‌طور مکرر تغییر نکنند. مدل پیکربندی دستی برای هر دستگاه در چنین شرایطی منطقی است. در این مدل، مهندس شبکه می‌تواند از startup-config در دستگاه به‌عنوان پیکربندی ایده‌آل اولیه استفاده کند و در صورت نیاز تغییراتی ایجاد کند. با این حال، این روش برای شبکه‌های بزرگ‌تر که صدها یا حتی هزاران دستگاه شبکه و چندین مهندس شبکه دارند، به‌خوبی کار نمی‌کند. شبکه‌های بزرگ معمولاً از ابزارهای مدیریت پیکربندی استفاده می‌کنند.

ابزارهای مدیریت پیکربندی روش‌های مختلفی برای تعریف منطق و فرآیندهای تغییرات ارائه می‌دهند که مشخص می‌کنند:

  • چه تغییراتی باید انجام شود،
  • روی کدام دستگاه‌ها،
  • و در چه زمانی.

هر ابزار از یک زبان مخصوص برای تعریف مراحل اقدام استفاده می‌کند. این زبان معمولاً توسط شرکت توسعه‌دهنده ابزار مشخص می‌شود، اما در کل یادگیری آن بسیار ساده‌تر از یک زبان برنامه‌نویسی است.

ابزارهای مدیریت پیکربندی که در آزمون CCNA مشخص شده‌اند شامل موارد زیر هستند:

  • Ansible
  • Puppet
  • Chef

Ansible

Ansible از معماری بدون عامل (Agentless) برای مدیریت دستگاه‌های شبکه استفاده می‌کند. بدون عامل بودن بدین معناست که دستگاه شبکه نیازی به اجرای کد عامل (Agent) ندارد. Ansible از SSH یا NETCONF برای اعمال تغییرات و استخراج اطلاعات استفاده می‌کند. این ابزار از مدل Push استفاده می‌کند که در شکل زیر نشان داده شده است.

مدل Push در Ansible

Ansible Push Model

Ansible از چندین فایل متنی استفاده می‌کند، که شامل موارد زیر هستند:

  • Playbooks: فایل‌هایی که شامل اقدامات و منطق اجرایی برای تعیین وظایف Ansible هستند.
  • Inventory: شامل نام میزبان‌های دستگاه‌ها به همراه اطلاعات مربوط به هر دستگاه، مانند نقش‌های دستگاه، که به Ansible امکان می‌دهد دستورات را روی زیرمجموعه‌ای از دستگاه‌ها اجرا کند.
  • Templates: پیکربندی دستگاه با استفاده از متغیرها.
  • Variables: فهرستی از متغیرهای YAML که در قالب‌های (Templates) جایگذاری می‌شوند.

در شکل بالا، مهندس شبکه ابتدا فایل‌های ضروری را ایجاد می‌کند (1)، سپس Ansible را اجرا می‌کند تا playbook را اجرا کند (2)، که در نهایت این پیکربندی به دستگاه (یا چندین دستگاه) ارسال می‌شود (3).

Puppet

Puppet از معماری مبتنی بر عامل (Agent-based) برای پشتیبانی از مدیریت شبکه استفاده می‌کند. برخی دستگاه‌های شبکه از Puppet Agent درون‌ساز (On-device) پشتیبانی می‌کنند، اما همه سیستم‌عامل‌های سیسکو چنین قابلیتی ندارند. در این شرایط، Puppet از یک عامل پراکسی خارجی (External Proxy Agent) استفاده می‌کند که با استفاده از SSH به دستگاه متصل می‌شود (این روش به‌عنوان عملیات بدون عامل – Agentless Operation شناخته می‌شود).

عملیات مبتنی بر عامل یا بدون عامل در Puppet

Agent-Based or Agentless Operation for Puppet

Puppet از مدل Pull برای اعمال پیکربندی روی دستگاه‌ها استفاده می‌کند که در شکل پایین نشان داده شده است.

مدل Pull در Puppet

Puppet Pull Model

Puppet از چندین فایل متنی مهم استفاده می‌کند که شامل موارد زیر هستند:

  • Manifest: یک فایل متنی خوانا برای انسان که وضعیت پیکربندی مطلوب یک دستگاه را مشخص می‌کند.
  • Resource، Class و Module: بخش‌های مختلف Manifest، که Module به‌عنوان بزرگ‌ترین جزء شامل چندین کلاس کوچک‌تر است که به نوبه خود شامل منابع مختلف هستند.
  • Template: فایلی که برای ایجاد Manifest استفاده می‌شود و شامل نام متغیرهایی است که بعداً مقداردهی می‌شوند.

در شکل بالا، مهندس شبکه ابتدا تمام فایل‌های ضروری را ایجاد می‌کند (1) و سپس عامل روی دستگاه یا عامل خارجی را پیکربندی می‌کند (2). پس از آن، عامل Puppet یا پراکسی آن، اطلاعات پیکربندی را از سرور می‌کشد (3) و در نهایت پیکربندی روی دستگاه به‌روزرسانی می‌شود (4).

Chef

Chef مانند Puppet، از معماری مبتنی بر عامل (Agent-based) استفاده می‌کند. Chef از چندین فایل متنی مهم بهره می‌برد:

  • Resource: یک شیء پیکربندی که وضعیت آن توسط Chef مدیریت می‌شود (مانند یک مجموعه از دستورات پیکربندی برای یک دستگاه شبکه).
  • Recipe: منطق Chef که به منابع اعمال می‌شود تا مشخص کند چه زمانی، چگونه و در برابر چه مواردی باید اقدام کند.
  • Cookbook: مجموعه‌ای از Recipeها که برای مدیریت و اشتراک‌گذاری آسان‌تر گروه‌بندی شده‌اند.
  • Runlist: ترتیب اجرای دستورات که باید روی یک دستگاه اجرا شوند.

Chef نیاز به اجرای کلاینت Chef روی دستگاه دارد، و بسیاری از دستگاه‌های سیسکو از کلاینت Chef پشتیبانی نمی‌کنند. بنابراین، در بیشتر موارد، استفاده از Ansible و Puppet برای مدیریت پیکربندی شبکه‌های سیسکو مناسب‌تر خواهد بود.

مقایسه Ansible، Puppet و Chef

ویژگی Ansible Puppet Chef
نام فایل دستورات Playbook Manifest Recipe، Runlist
پروتکل ارتباطی با شبکه SSH، NETCONF HTTP (REST) HTTP (REST)
مدل مبتنی بر عامل یا بدون عامل بدون عامل (Agentless) عامل یا بدون عامل عامل (Agent)
مدل Push یا Pull Push Pull Pull

توجه: Puppet می‌تواند از یک عامل داخلی (On-device Agent) یا یک عامل پراکسی خارجی (External Proxy Agent) برای مدیریت دستگاه‌های شبکه استفاده کند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا