Apresentação feita no Cisco Network Academy Day 2014, no campus da Ilha do Fundão da Universidade Federal do Rio de Janeiro, sobre programabilidade de redes Cisco com onePK.
rights reserved. Conceitos: Como é a rede de hoje? Plano de Dados/Encaminhamento: Responsável por mover o tráfego da rede (aplicações, usuários, equipamentos) entre a interface de origem e destino. Plano de Controle: Responsável por determinar como o encaminhamento da informação será realizado. Uso de protocolos dinâmicos para troca de informação com vizinhos (STP, OSPF, EIGRP). Plano de Gerência: Responsável por garantir as funções administrativas do dispositivo (SSH, Telnet, Syslog). Dados Controle Gerência
rights reserved. “Software-Defined Networking (SDN) é uma abordagem para redes de computadores que permite aos administradores de rede gerenciar serviços de rede através da abstração de funcionalidade de nível mais baixo. Isto é feito através do desacoplamento do sistema que toma decisões sobre onde o tráfego é enviado (o plano de controle) dos sistemas subjacentes que encaminham o tráfego para o destino selecionado (o plano de dados).” Conceitos: O que é SDN?
rights reserved. Conceitos: Modelos de SDN SDN Classica § Resultado de trabalhos academicos em Stanford. § Remove o plano de controle do elemento de rede. § Plano de controle é todo externo e centralizado. § Interação entre plano de controle externo e o plano de dados é através de Southbound API (OpenFlow). Gerência Dados Controle Aplicação NAPI SAPI
rights reserved. Conceitos: Modelos de SDN SDN Híbrida § Evolução do modelo clássico. § Viabiliza um plano de controle externo sem remover o plano de controle do elemento de rede. § Proporciona maior flexibilidade e segurança nas interação entre aplicação, plano de controle externo e plano de dados do elemento de rede. Gerência Controle Dados Controle Aplicação NAPI SAPI
rights reserved. § Aplicação (“Application”): § Software externo desenvolvido com o uso das APIs do onePK; § Elemento de Rede (“Network Element”, NE): § Plataforma que oferece seus serviços disponíveis através do onePK; § Cisco IOS Routers, Cisco IOS-XE, Cisco IOS-XR, Cisco NX-OS; § Sessão (“Session”): § Comunicação estabelecida entre a aplicação externa e o elemento de rede; § Conjuntos de Serviços (“Service Sets”): § As funcionalidades providas pelo onePK são separadas por grupos; onePK: Terminologia
rights reserved. onePK: Modelos de Implantação Process Hosting § Separação lógica (LXC, KVM/QEMU). § Recursos compartilhados de HW. § Próxima aos planos de controle e dados. App IOS Elemento de Rede
rights reserved. onePK: Modelos de Implantação Blade Hosting § Separação física (UCS-E). § Recursos dedicados de HW. § Próxima aos planos de controle e dados. App IOS Elemento de Rede
rights reserved. onePK: Modelos de Implantação End-Node Hosting § Separação física (servidor externo). § Recursos dedicados de HW (UCS-E). § Distante dos planos de controle e dados. App IOS Elemento de Rede Elemento Externo
rights reserved. onePK: API Service Sets • Lógica interna para encaminhamento dos pacotes. Data Path • Mecanismos internos de controle de encaminhamento. Policy • Roteamento/encaminhamento e eventos do elemento de rede . Routing • Propriedades gerais do elemento de rede e seus componentes. Element • Logs e funções auxiliares, como AAA do elemento de rede. Utility • Mecanismo para determinar elementos vizinhos, topologia e etc. Discovery • Serviços adicionais de para facilitar desenvolvimento. Developer
rights reserved. § VM baseada em Ubuntu Desktop. § SDKs de C, Java e Python. § Incluso tutoriais e documentação offline! § Possivel criar instâncias virtuais de IOS. § Compatível com VirtualBox! Referência: https://developer.cisco.com/site/networking/one/onepk/sdk-and-docs/all-in-one-vm/index.gsp onePK: All-in-One Virtual Machine
rights reserved. ONE: Virtual Network Overlays Tecnologias de Overlay § Abstraem a complexidade física. § Permitem melhor uso dos recursos. § VXLAN, NVGRE, ACI.
rights reserved. ONE: Virtual Network Overlays Redes Lógicas (Overlay) § Criação de topologias lógicas. § Escalabilidade (L2/L3). § Transparente para as aplicações. § Uso da melhor topologia possível.
rights reserved. 1. Obter a OVA (imagem) mais recente do Cisco CSR 1000v: http://software.cisco.com 2. Importar a OVA do CSR no VMware (vSphere/Workstation/Fusion). 3. Obter o SDK Python do onePK versão 1.2.1: https://developer.cisco.com 4. Confirmar que a versão do Python na sua máquina é 2.7.x. 5. Após descompactar, instalar o SDK (privilégios de administrador): # python setup.py install 6. Verificar se o SDK foi instalado adequadamente (carregar o módulo): # python >>> import onep DEMO1: onePK + Python + CSR 1000v!
rights reserved. DEMO1: onePK + Python + CSR 1000v! 7. Configurar o OnePK e gerar o certificado digital local no CSR 1000v : CSR1KV-ONEPK(config)# interface gigabitEthernet 1 CSR1KV-ONEPK(config-if)# ip address <endereço IP> <máscara de rede> CSR1KV-ONEPK(config-if)# no shutdown CSR1KV-ONEPK(config)# onep CSR1KV-ONEPK(config-onep)# transport type tls disable-remotecert-validation CSR1KV-ONEPK(config-onep)# exit CSR1KV-ONEPK(config)# crypto pki trustpoint <nome do trustpoint criado pelo passo anterior> CSR1KV-ONEPK(ca-trustpoint)# serial-number CSR1KV-ONEPK(ca-trustpoint)# ip-address <endereço IP usado anteriormente> CSR1KV-ONEPK(ca-trustpoint)# exit CSR1KV-ONEPK(config)# crypto pki enroll <nome do trustpoint> CSR1KV-ONEPK(config)# crypto pki export <nome do trustpoint> pem terminal
rights reserved. DEMO1: onePK + Python + CSR 1000v! 8. Escreva seu programa Python usando a API (Element Service Set): from onep.element.SessionConfig import SessionConfig from onep.element.NetworkElement import NetworkElement config = SessionConfig(None) config.ca_certs = 'csr1kv-onepk.pem’ # Arquivo texto com a saída do último comando no CSR. config.transportMode = SessionConfig.SessionTransportMode.TLS ne = NetworkElement(’<endereço IP configurado no CSR>', ’<nome da aplicação>’) # Info do CSR. ne.connect('admin', 'cisco', config) # Usar usuário/senha do configurado no CSR. hostname = ne.properties.sys_name uptime = ne.properties.sys_uptime free_memory = ne.get_free_system_memory() print("Host: %s | Uptime: %d | Memory: %d" % (hostname, uptime, free_memory)) ne.disconnect()