O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento serve como um guia de configuração suplementar para High Availability Version 2 (HAv2) no Azure. Detalhes completos estão disponíveis no Guia de implantação do Cisco CSR 1000v para Microsoft Azure. O HAv2 é suportado pela primeira vez no Cisco IOS-XE® Denali 16.9.1s.
No HAv2, a implementação do HA foi movida para fora do código do Cisco IOS XE e é executada no contêiner do shell de convidado. Para obter mais informações sobre o shell de convidado, consulte a seção Shell de Convidado no Guia de Configuração de Programabilidade. Em HAv2, a configuração de nós de redundância é executada no shell de convidado com um conjunto de scripts Python.
A Cisco recomenda que você tenha conhecimento destes tópicos:
As informações neste documento são baseadas no Cisco IOS-XE® Denali 16.9.1s nativamente implantado no Azure Marketplace.
Os recursos implantados no Azure nas etapas deste documento podem acarretar um custo.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
vrf definition GS
!
iox
app-hosting appid guestshell
app-vnic gateway1 virtualportgroup 0 guest-interface 0
guest-ipaddress 192.168.35.102 netmask 255.255.255.0
app-default-gateway 192.168.35.101 guest-interface 0
name-server0 8.8.8.8
!
interface VirtualPortGroup0
vrf forwarding GS
ip address 192.168.35.101 255.255.255.0
ip nat inside
!
interface GigabitEthernet1
ip nat outside
!
ip access-list standard GS_NAT_ACL
permit 192.168.35.0 0.0.0.255
!
ip nat inside source list GS_NAT_ACL interface GigabitEthernet1 vrf GS overload
!
! The static route points to the gig1 private ip address gateway
ip route vrf GS 0.0.0.0 0.0.0.0 GigabitEthernet1 10.1.0.1 global
Note: Novas instâncias implantadas no Azure Marketplace podem ter iox pré-configurado.
csr-1#guestshell enable csr-1#guestshell
[guestshell@guestshell ~]$ ping www.google.com PING www.google.com (172.217.14.228) 56(84) bytes of data. 64 bytes from sea30s02-in-f4.1e100.net (172.217.14.228): icmp_seq=1 ttl=51 time=4.89 ms 64 bytes from sea30s02-in-f4.1e100.net (172.217.14.228): icmp_seq=2 ttl=51 time=5.02 ms
Execute o curl para verificar se os metadados podem ser recuperados. A interface externa deve ser Gig1 (eth0). Caso contrário, verifique os grupos de segurança, roteamento ou outros recursos do Azure que podem bloquear 169.254.169.254. 169.254.169.254 não é um endereço que pode ser ping.
[guestshell@guestshell ~]$ curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2018-04-02" {"compute":{"location":"westus2","name":"csr-david-2","offer":"cisco-csr-1000v","osType":"Linux","placementGroupId":"","plan":{"name":"16_7","product":"cisco-csr-1000v","publisher":"cisco"},"platformFaultDomain":"0","platformUpdateDomain":"0","publicKeys":[],"publisher":"cisco","resourceGroupName":"RG-David-2","sku":"16_7","subscriptionId":"09e13fd4-def2-46aa-a056-xxxxxxxxxxx","tags":"","version":"16.7.120171201","vmId":"f8f32b48-daa0-4053-8ba4-xxxxxxxxxxxxx","vmScaleSetName":"","vmSize":"Standard_DS2_v2","zone":""},"network":{"interface":[{"ipv4":{"ipAddress":[{"privateIpAddress":"10.3.0.5","publicIpAddress":"21.53.135.210"}],"subnet":[{"address":"10.3.0.0","prefix":"24"}]},"ipv6":{"ipAddress":[]},"macAddress":"000D3A93F"},{"ipv4":{"ipAddress":[{"privateIpAddress":"10.3.1.5","publicIpAddress":""}],"subnet":[{"address":"10.3.1.0","prefix":"24"}]},"ipv6":{"ipAddress":[]},"macAddress":"000D3A961"}]}}[
Note: Não use o modo sudo para instalar pacotes. Certifique-se de usar a opção —usuário. Se as três etapas não forem executadas, os pacotes serão instalados na pasta errada. Isso pode resultar em ImportErrors. Para corrigir os pacotes instalados incorretamente, talvez seja necessário executar o comando IOS guestshell para destruir e recomeçar.
[guestshell@guestshell ~]$ pip install csr_azure_guestshell~=1.1 --user [guestshell@guestshell ~]$ pip install csr_azure_ha~=1.0 --user [guestshell@guestshell ~]$ source ~/.bashrc
[guestshell@guestshell ~]$ which show_node.py ~/.local/lib/python2.7/site-packages/csr_azure_ha/client_api/show_node.py
Há dois métodos para permitir que o CSR1000v faça chamadas de API para o Azure.
Note: A chave de aplicativo usada em HAv1 é a chave codificada. A chave de aplicativo usada em HAv2 é a chave não codificada. Se você não anotou a chave não codificada, talvez precise criar uma nova, já que as chaves não são recuperáveis.
Etapa 1. Ative o MSI para cada uma das máquinas virtuais CSR1000v. Navegue até a VM no Portal do Azure. Navegue até Identidade e clique em Sistema atribuído > Ativado > Salvar.
Etapa 2. Em Subnet Route Table, para permitir chamadas de API do roteador CSR1000v, escolha Access Control (IAM) e clique em Add.
Etapa 3. Escolha Função - Colaborador de Rede. Escolha Atribuir acesso a - Máquina virtual. Escolha a assinatura apropriada. Selecione a VM na lista que tem seu MSI ativado.
create_node.py -i 100 -p azure -s 09e13fd4-def2-46aa-a056-xxxxxxxxxx -g RG-David -t subnet2-david-CSR-RouteTable -r 8.8.8.8/32 -n 10.3.1.4 -a 1e0f69c3-b6aa-46cf-b5f9-xxxxxxxxx -d ae49849c-2622-4d45-b95e-xxxxxxxxx -k bDEN1k8batJqpeqjAuUvaUCZn5Md6rWEi=
Use set_params.py para adicionar ou alterar parâmetros individuais.
set_params.py -i 100 [option1] [option2]
Use clear_params.py para limpar parâmetros individuais.
clear_params.py -i 100 [option1] [option2]
Use delete_node.py para excluir o nó.
delete_node.py -i 100
O script node_event.py com a opção peerFail é como o HAv2 aciona um failover e atualiza a Tabela de Rotas do Azure. É aqui que você tem a flexibilidade de programar sua própria lógica. Você pode usar o EEM no IOS para executar node_event.py, ou escrever um script python no guestshell.
Um exemplo é capturar um estado de interface inativa com EEM para disparar node_event.py.
event manager applet HAv2_interface_flap event syslog pattern "Interface GigabitEthernet2, changed state to down" action 1 cli command "enable" action 2 cli command "guestshell run node_event.py -i 100 -e peerFail"
Você pode executar manualmente node_event.py no guestshell para testar um failover real.
[guestshell@guestshell ~]$ node_event.py -i 100 -e peerFail
O HAv2 também pode reverter a rota de volta ao roteador original com a opção reverter. Essa é uma configuração opcional que simula a preempção. O sinalizador -m primary em create_node.py é necessário para ser definido no roteador primário. Este é um exemplo que usa BFD para monitorar o estado da interface.
event manager applet bfd_session_up event syslog pattern ".*BFD_SESS_UP.*" action 1 cli command "enable" action 2 cli command "guestshell run node_event.py -i 100 -e revert"
[guestshell@guestshell ~]$ set_params.py -i 100 -m
Verifique se todos os três processos estão ativos.
systemctl status auth-token systemctl status azure-ha systemctl status waagent
Reinicie os que falharam.
sudo systemctl start waagent sudo systemctl start azure-ha sudo systemctl start auth-token
Dois métodos para verificar a configuração adicionada por create_node.py.
show_node.py -i 100
[guestshell@guestshell ~]$ cat azure/HA/node_file {'appKey': 'bDEN1k8batJqWEiGXAxSR4Y=', 'index': '100', 'routeTableName': 'subnet2-david-CSR-RouteTable', 'route': '8.8.8.8/32', 'nextHop': '10.3.1.4', 'tenantId': 'ae49849c-2622-4d45-b95e-xxxxxxxxxx', 'resourceGroup': 'RG-David', 'appId': '1e0f69c3-b6aa-46cf-b5f9-xxxxxxxxxx', 'subscriptionId': '09e13fd4-def2-46aa-a056-xxxxxxxxxxx', 'cloud': 'azure'}
Simule um failover no roteador em standby. Isso não causa um failover, mas verifica se a configuração é válida. Verifique os registros na etapa 6.
node_event.py -i 100 -e verify
Disparar um evento de failover real no roteador em standby. No Azure, verifique se a tabela de rotas atualizou a rota para o novo salto. Verifique os registros na etapa 6.
node_event.py -i 100 -e peerFail
[guestshell@guestshell ~]$ ls -latr /home/guestshell/azure/HA/events/ total 5 drwxr-xr-x 3 guestshell root 1024 Sep 18 23:01 .. drwxr-xr-x 2 guestshell root 1024 Sep 19 19:40 . -rw-r--r-- 1 guestshell guestshell 144 Sep 19 19:40 routeTableGetRsp -rw-r--r-- 1 guestshell guestshell 390 Sep 19 19:40 event.2018-09-19 19:40:28.341616 -rw-r--r-- 1 guestshell guestshell 541 Sep 18 23:09 event.2018-09-18 23:09:58.413523
Etapa 1. Os pacotes Python estão incorretamente instalados em /usr/lib/python2.7/site-packages/. Destrua o guestshell e siga as etapas de configuração.
[guestshell@guestshell ~]$ create_node.py -h bash: create_node.py: command not found [guestshell@guestshell ~]$ ls /usr/lib/python2.7/site-packages/
O caminho de instalação correto é ~/.local/lib/python2.7/site-packages/.
[guestshell@guestshell ~]$ which show_node.py ~/.local/lib/python2.7/site-packages/csr_azure_ha/client_api/show_node.py
Etapa 2. Se a autenticação não foi configurada ou configurada incorretamente na etapa 3, podem ser gerados erros de token. Para a autenticação AAD, se a app-key usada for inválida, ou URL codificada, erros de autenticação podem ser vistos depois que node_event.py é acionado.
[guestshell@guestshell ~]$ cat /home/guestshell/azure/HA/events/routeTableGetRsp {"error":{"code":"AuthenticationFailedMissingToken","message":"Authentication failed. The 'Authorization' header is missing the access token."}} [guestshell@guestshell ~]$ cat /home/guestshell/azure/HA/events/event.2018-09-19\ 23\:02\:55.581684 Event type is verify appKey zGuYMyXQha5Kqe8xdufhUJ9eX%2B1zIhLsuw%3D index 100 routeTableName subnet2-david-CSR-RouteTable route 8.8.8.8/32 nextHop 10.3.1.4 tenantId ae49849c-2622-4d45-b95e-xxxxxxxxxx resourceGroup RG-David appId 1e0f69c3-b6aa-46cf-b5f9-xxxxxxxxxx subscriptionId 09e13fd4-def2-46aa-a056-xxxxxxxxxx cloud azure All required parameters have been provided Requesting token using Azure Active Directory Token= Failed to obtain token Reading route table Route GET request failed with code 401
Etapa 3. Se o ID do espaço ou ID do aplicativo estiver incorreto.
[guestshell@guestshell ~]$ cat azure/tools/TokenMgr/token_get_rsp {"error":"invalid_request","error_description":"AADSTS90002: Tenant 1e0f69c3-b6aa-46cf-b5f9-xxxxxxxxxx not found. This may happen if there are no active subscriptions for the tenant. Check with your subscription administrator.\r\nTrace ID: 8bc80efc-f086-46ec-83b9-xxxxxxxxxxx\r\nCorrelation ID: 2c6062f8-3a40-4b0e-83ec-xxxxxxxxxxx\r\nTimestamp: 2018-09-19 23:58:02Z","error_codes":[90002],"timestamp":"2018-09-19 23:58:02Z","trace_id":"8bc80efc-f086-46ec-83b9-xxxxxxxxxxxx","correlation_id":"2c6062f8-3a40-4b0e-83ec-xxxxxxxxxxx"}
Etapa 4. Durante a instalação do pacote, o modo sudo pode ter sido usado, —o usuário não foi incluído ou a fonte ~/.bashrc não foi executada. Isso faz com que create_node.py falhe ou gere um ImportError.
[guestshell@guestshell ~]$ create_node.py -i 1 -p azure -s d91490ec -g RG -t RT -r 10.12.0.0/11 -n 10.2.0.31 -m secondary
/usr/lib64/python2.7/site-packages/cryptography/hazmat/primitives/constant_time.py:26: CryptographyDeprecationWarning: Support for your Python version is deprecated. The next version of cryptography will remove support. Please upgrade to a 2.7.x release that supports hmac.compare_digest as soon as possible.
utils.DeprecatedIn23,
create_node -i 1 -p azure -s d91490ec -g RG -t RT -r 10.12.0.0/11 -n 10.2.0.31 -m secondary failed
[guestshell@guestshell ~]$ create_node.py -i 1 -p azure -s d91490ec -g RG -t RT -r 10.1.0.0/18 -n 10.2.0.31 -m secondary Traceback (most recent call last): File "/usr/bin/create_node.py", line 5, in import ha_api ImportError: No module named ha_api
Etapa 5. Verifique o histórico de instalação do pacote.
[guestshell@guestshell ~]$ cat azure/HA/install.log Installing the Azure high availability package Show the current PATH /usr/local/bin:/usr/bin:/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_ha/client_api Show the current PYTHONPATH :/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_guestshell:/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_guestshell/TokenMgr:/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_guestshell/MetadataMgr:/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_guestshell/bin:/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_ha/client_api:/home/guestshell/.local/lib/python2.7/site-packages/csr_azure_ha/server
Etapa 6. Verifique os registros de configuração de HA.
[guestshell@guestshell ~]$ cat azure/HA/azha.log 2018-09-24 16:56:29.215743 High availability server started with pid=7279 2018-09-24 17:03:20.602579 Server processing create_node command 2018-09-24 17:03:20.602729 Created new node with index 100
Etapa 6. Execute o script debug_ha.sh para reunir todos os arquivos de log em um único arquivo tar.
[guestshell@guestshell ~]$ bash ~/azure/HA/debug_ha.sh
O arquivo é colocado no bootflash que pode ser acessado tanto do shell como do IOS.
[guestshell@guestshell ~]$ ls /bootflash/ha_debug.tar /bootflash/ha_debug.tar
csr-david-2#dir | i debug 28 -rw- 92160 Sep 27 2018 22:42:54 +00:00 ha_debug.tar