A Programabilidade de Rede ou “Network Programmability” ou “Programação de Rede” é o uso de software para implantar, gerenciar e solucionar problemas de elementos de rede.
Uma rede programável é conduzida por uma pilha de software inteligente que pode agir com base em solicitações de negócios ou eventos de rede.
Vamos discutir como a programação de rede pode ajudar as empresas, data centers, provedores de serviços de comunicação a se adaptarem às novas tendências, incluindo Internet das coisas (IoT), 5G e Edge Computing.
O Software Defined Networking (SDN) anda de mãos dadas com a programação de rede é o, que não apenas separa o plano de controle (control plane) e o plano de encaminhamento (forwarding plane) dos dispositivos de rede, mas também fornece APIs (interfaces de programação de aplicativos ou application programming interfaces ) para controlá-los e gerenciá-los.
Nesse artigo vamos estudar um pouco da história da programabilidade, sua função, vantagens e a importância na vida de um profissional de Infraestrutura de TI, Redes e até mesmo Telecomunicações.
História da Programabilidade de Rede
Uma das primeiras tentativas de permitir que engenheiros e operadores de rede começassem a tornar as redes programáveis foi o Simple Network Management Protocol (SNMP) em 1990.
O SNMP exibe os dados de gerenciamento na forma de variáveis organizadas em uma base de informações de gerenciamento (MIB), que descreve o status e a configuração do sistema.
Essas variáveis podem ser consultadas remotamente (e, em algumas circunstâncias, manipuladas) pelo gerenciamento de aplicativos.
O SNMP também oferece suporte ao envio de notificações, com base em configurações pré-configuradas, chamadas SNMP Traps.
O SNMP fez seu trabalho há muito tempo, mas não é realmente relevante hoje, exceto para sistemas legados que foram projetados em torno dele.
Os profissionais de monitoramento de rede estão olhando para a telemetria de streaming como o futuro de suas redes.
Hoje, tanto a IETF quanto a comunidade OpenConfig estão se concentrando em soluções de telemetria e trabalhando no desenvolvimento dos melhores padrões para serem executados.
Com o surgimento do SDN desde 2010 e desses novos protocolos, a programação de rede mais fácil e uma realidade.
Isso realmente mudou o jogo e está abrindo as portas para redes autônomas.
O papel do SDN
Se você pensar bem, o SDN foi quem realmente permitiu a programação de rede.
O SDN torna o sistema distribuído que é uma topologia de rede controlável e gerenciável por meio de um conjunto de APIs.
A programabilidade de rede é a capacidade de consumir e construir um sistema em torno dessas APIs.
O SDN e programabilidade de rede basicamente têm quatro componentes principais:
- Aplicações: lógica de negócios baseada em casos de uso.
- APIs Northbound: expõe o acesso programável a funcionalidades e recursos de rede.
- Camada de Controle: traduz as solicitações recebidas entre o sul e o norte.
- Southbound Interfaces: usa protocolos SDN para permitir comunicação bidirecional entre elementos de rede e controladores SDN.
SDN trouxe uma série de protocolos interessantes que promovem a adoção de modelos de dados, que fornecem uma abordagem orientada a modelos para expressar as funcionalidades de um elemento de rede.
YANG: a Linguagem de Modelagem de Dados
Vamos começar dizendo que o Network Configuration Protocol (NETCONF), que foi publicado como RFC 4741, é o que democratizou o uso de modelos de dados com YANG (RFC 6020).
Embora NETCONF use XML sobre SSH para se comunicar com elementos de rede e RESTCONF use JSON ou XML, YANG rapidamente se tornou um padrão de fato para expressar as funcionalidades do dispositivo.
Isso levou à criação de um marshaller e unmarshaller para converter XML/JSON para YANG.
Conforme definido no RFC 6020, YANG “é uma linguagem de modelagem de dados usada para modelar dados de configuração e estado manipulados pelo protocolo de configuração de rede (NETCONF), chamadas de procedimento remoto NETCONF e notificações NETCONF”.
Modelo do Dispositivo de Rede
Um modelo YANG deve ser visto como uma estrutura em árvore.
Resumindo, ao observar um dispositivo como um todo, a raiz da árvore representa o conjunto geral de recursos do dispositivo.
Cada ramo corresponde a uma funcionalidade e cada folha corresponde a um parâmetro específico dessa funcionalidade.
A granularidade na qual uma funcionalidade é dividida depende do proprietário do modelo de dados.
Para atender à necessidade das operadoras de telecomunicações, que desejavam abstrair sua rede, comunidades de código aberto (OpenConfig e outras) e órgãos de padronização (principalmente IETF) começaram a padronizar modelos YANG.
Isso permite a interoperabilidade do dispositivo e torna os controladores de rede independentes de dispositivo.
SDN era um novo paradigma para administradores de rede e fornecedores entenderem, e YANG era uma nova linguagem para eles aprenderem.
Além disso, para os fornecedores de rede que viram a necessidade de oferecer tais recursos, foi um desafio: os modelos de dados que eles construíram para representar as funcionalidades de um equipamento de rede raramente estavam completos, muitas vezes faltando um parâmetro ou recurso necessário.
Às vezes, o dispositivo o suportava, mas o modelo não o expunha.
Às vezes, o modelo estava expondo um parâmetro ou uma funcionalidade e o dispositivo não a suportava.
Isso levou a muita rotatividade no modelo de dados do fornecedor e a muitos testes no software que foi criado para automatizar, mas hoje em dia as coisas estão mais estáveis e o ecossistema amadureceu.
À medida que as funcionalidades evoluíram, sua representação teve que evoluir, resultando no versionamento do modelo YANG.
Uma das práticas recomendadas mais importantes é a compatibilidade com versões anteriores entre as versões mais recentes e as mais antigas (o que é verdadeiro para qualquer tipo de API exposta).
Mas é claro que o requisito de versão e/ou compatibilidade com versões anteriores não era bem respeitado e gerava muita rotatividade para os administradores e desenvolvedores de rede.
Assim que o dispositivo foi atualizado, a automação construída em torno dele foi quebrada, tendo que refazê-lo repetidamente.
Modelo de Serviço
Discutimos como YANG foi usado para abstrair as funcionalidades de um elemento de rede, mas YANG também é usado para criar Modelos de Serviço.
A intenção de um modelo de serviço é fornecer outra camada de abstração (neste caso, orientada a serviços), fornecendo uma visão com curadoria das várias funcionalidades de rede e parâmetros relacionados necessários para entregar esse serviço.
Isso é muito conveniente para o OSS/BSS, pois você pode vincular mais facilmente o aspecto comercial e correlacionar para um determinado cliente.
A IETF e seu ecossistema começaram a definir e padronizar os serviços de rede (L2VPN, L3VPN etc.) e outros ainda estão em andamento (BGP, SR, SRv6 etc.).
Também existem comunidades de código aberto que fazem isso, como OpenConfig e Open ROADM.
Mas isso adicionou outra camada de mapeamento, já que agora os sistemas precisam traduzir do Modelo de Serviço para o Modelo de Dispositivo (que é um mapeamento 1:n, assumindo o consumo de um modelo específico do fornecedor, ou um mapeamento 1:1, quando os fornecedores estão adotando modelos padronizados como OpenConfig).
Noções Básicas de Configuração de Rede
Ao configurar um elemento de rede, existem três elementos fundamentais:
- A configuração do dispositivo: Isso geralmente é chamado de modelo, contendo CLI, XML ou JSON, dependendo do protocolo/ferramenta usado para aplicar a configuração.
- Templates e padrões de configuração: Este é um modelo parametrizado que permite a reutilização. Parâmetros dinâmicos dentro do modelo são extraídos e substituídos por espaços reservados. Quando um sistema aplica esse modelo, ele primeiro renderiza a configuração resultante aproveitando os parâmetros fornecidos externamente. Tecnologia como Jinja ou Velocity pode ser usada aqui. Existem dois tipos de parâmetros:
- Estáticos: pode ser um valor padrão ou um valor que raramente é alterado. Normalmente, eles são codificados no modelo.
- Dinâmicos: Este é um valor que precisa ser buscado ou (des)alocado de um sistema, seja interno ou externo (uma base de dados, um inventário, um IPAM, outro elemento de rede, etc.).
- O protocolo usado para aplicar a configuração: Existem muitos protocolos para fazer isso, vou citar apenas os mais comuns: ssh/cli, NETCONF, RESTCONF, gRPC.
Cuidados com a Programabilidade de Rede
Qualquer sistema que tente executar a programação de rede deve oferecer pelo menos esses três recursos.
Mas quando olhamos para esses sistemas, existem poucas armadilhas a serem evitadas.
Ao selecionar um fornecedor de rede, com base em alguns dos elementos mencionados anteriormente, há algumas coisas a considerar:
- Os modelos do fornecedor estão completos?
- O fornecedor oferece um bom suporte para seus modelos?
- Quão amplamente adotados e abertos são os modelos do fornecedor?
- O fornecedor suporta OpenConfig/outros modelos padrão?
- Quais são os protocolos suportados para configurar o equipamento de rede?
- Qual é a cadência de atualização típica?
O objetivo é entender quanto você deve investir em automação.
Se as respostas não forem boas o suficiente, você terá que atualizar constantemente a automação que deseja construir.
Isso move o problema para o desenvolvimento de software, em vez das operações de rede, o que não revelará os benefícios.
Se você planeja fazer desenvolvimento Java (ou baseado em JVM) para controlar a rede e ingerir modelos YANG fornecidos pelo fornecedor em seu aplicativo Java, esteja pronto para ter um sólido processo de integração contínua/entrega contínua (CI/CD).
Isso permite que você libere seu aplicativo em uma cadência muito alta e ajuste-se a casos de uso e bugs à medida que surgem.
Uma recomendação é separar o conteúdo usado para programar a rede da plataforma que permite o provisionamento da rede.
Dessa forma, cada um tem seu próprio ciclo de vida e o conteúdo pode evoluir em uma cadência rápida, deixando intocada a plataforma mais estável.
Que Tecnologia Escolher?
O objetivo da programabilidade de rede é atender a uma necessidade alterando dinamicamente o estado atual da rede.
Isso significa três coisas para o software que aplica essa alteração:
- Certifique-se de que o estado atual seja válido antes de aplicar a alteração.
- Aplique a mudança e cruze os dedos que funcionou.
- Valide se a alteração foi bem-sucedida e nenhuma funcionalidade ao redor foi afetada.
No geral, requer uma verificação prévia e uma verificação posterior, sugerindo a necessidade de um mecanismo de fluxo de trabalho para sequenciar as várias etapas.
Além disso, como desenvolvedor, você precisará de uma linguagem de programação/script.
Utilizar, por exemplo, Python e Ansible são os que mais são utilizados quando se trata de provisionamento de rede, pois eles fornecem bibliotecas/módulos comprovados e adotados, como Jinja para modelagem e ncclient para protocolo NETCONF, o que ajuda a simplificar muito o processo de desenvolvimento.
As tecnologias gerais de desenvolvimento de que você precisa provavelmente existem em código aberto e têm uma comunidade decente compartilhando em torno delas.
Além disso, tem havido muitas atividades no espaço de rede dentro das comunidades de código aberto.
Seja para construir uma plataforma de orquestração de rede completa, como ONAP, Open Source Mano, etc. adoção no Cilium, um plug-in de interface de rede de contêineres para Kubernetes).
Por fim, você pode usar a metodologia GitOps ao separar o conteúdo (template, scripts etc.) da plataforma (executores Python/Ansible, mecanismo de fluxo de trabalho etc.), permitindo que o conteúdo tenha seu próprio ciclo de vida.
Esse método pode ajudar no controle de versão e na centralização do seu código, além de fornecer a fonte da verdade e o gatilho para ações de provisionamento de rede.
Como a DLTEC pode me ajudar a aprender mais sobre Programabilidade de Rede?
Programabilidade e programação não são sinônimos, por isso mesmo é importante que você saiba onde está pisando como um Profissional das áreas de Redes, Infraestrutura de TI ou até mesmo Telecomunicações.
Por isso mesmo inserimos a Programabilidade de Redes dentro da nossa nova Trilha Profissional de Infraestrutura de TI e Telecom.
No tópico chamado “SND, Automação e Programabilidade” você vai aprender sobre esse assunto tão importante hoje em dia.
Você vai sair com uma visão abrangente sobre os principais conceitos para entender e se adequar a esse novo panorama de redes programáveis e nuvem.
Você vai aprender sobre SDN, NFV, Cloud e Fog Computing com foco na Infraestrutura de TI e Telecom, assim como ferramentas de automação, programação em Python e introdução ao ambiente Linux.
Clique no link a seguir e conheça nossa nova Trilha Profissional de Infraestrutura de TI e Telecom.
Conclusão sobre Programabilidade na Via de um Profissional de Redes
Quanto mais você se aprofunda no assunto de programabilidade de rede, mais denso ele fica, com muitos desafios a serem resolvidos.
Os componentes necessários para uma jornada de programação de rede bem-sucedida não param aqui.
Você também precisará de um sistema de inventário para rastrear elementos de rede e fornecer informações sobre como acessá-los, um sistema de monitoramento para analisar o estado real da rede e um sistema de políticas para identificar qual ação de correção deve ser tomada em caso de um evento detectado.
A jornada é longa, mas vai valer a pena!