Dans le cadre de la documentation associée à ce produit, nous nous efforçons d’utiliser un langage exempt de préjugés. Dans cet ensemble de documents, le langage exempt de discrimination renvoie à une langue qui exclut la discrimination en fonction de l’âge, des handicaps, du genre, de l’appartenance raciale de l’identité ethnique, de l’orientation sexuelle, de la situation socio-économique et de l’intersectionnalité. Des exceptions peuvent s’appliquer dans les documents si le langage est codé en dur dans les interfaces utilisateurs du produit logiciel, si le langage utilisé est basé sur la documentation RFP ou si le langage utilisé provient d’un produit tiers référencé. Découvrez comment Cisco utilise le langage inclusif.
Cisco a traduit ce document en traduction automatisée vérifiée par une personne dans le cadre d’un service mondial permettant à nos utilisateurs d’obtenir le contenu d’assistance dans leur propre langue. Il convient cependant de noter que même la meilleure traduction automatisée ne sera pas aussi précise que celle fournie par un traducteur professionnel.
Ce document sert de guide de configuration supplémentaire pour High Availability Version 2 (HAv2) dans Azure. Vous trouverez des détails complets dans le Guide de déploiement de Cisco CSR 1000v pour Microsoft Azure. HAv2 est d'abord pris en charge par Cisco IOS-XE® Denali 16.9.1s.
Dans HAv2, la mise en oeuvre de HA a été déplacée hors du code Cisco IOS XE et s'exécute dans le conteneur de shell invité. Pour plus d'informations sur le shell invité, reportez-vous à la section Guest Shell du Guide de configuration de la programmabilité. Dans HAv2, la configuration des noeuds de redondance est effectuée dans l'interpréteur de commandes avec un ensemble de scripts Python.
Cisco vous recommande de prendre connaissance des rubriques suivantes :
Les informations de ce document sont basées sur les produits Cisco IOS-XE® Denali 16.9.1s déployés nativement à partir d'Azure Marketplace.
Les ressources déployées dans Azure à partir des étapes de ce document peuvent entraîner un coût.
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. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
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: Les nouvelles instances déployées à partir d'Azure Marketplace peuvent avoir un iox préconfiguré.
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
Exécutez l'exécution de l'URL pour vérifier que les métadonnées sont réutilisables. L'interface externe orientée doit être Gig1 (eth0). Sinon, vérifiez les groupes de sécurité Azure, le routage ou d'autres fonctionnalités qui peuvent bloquer 169.254.169.254. 169.254.169.254 n’est pas une adresse 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'utilisez pas le mode sudo pour installer des paquets. Veillez à utiliser l'option —user. Si aucune des trois étapes n'est effectuée, les paquets seront installés dans le mauvais dossier. Cela peut entraîner des erreurs Import. Pour corriger les paquets mal installés, vous devrez peut-être exécuter la commande IOS guestshell delete et recommencer.
[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
Il existe 2 méthodes pour permettre au CSR1000v d'effectuer des appels API vers Azure.
Note: La clé d'application utilisée dans HAv1 est la clé codée. La clé d'application utilisée dans HAv2 est la clé non encodée. Si vous n'avez pas noté la clé non encodée, vous devrez peut-être en créer une nouvelle, car les clés ne peuvent pas être récupérées.
Étape 1. Activez MSI pour chaque machine virtuelle CSR1000v. Accédez à la machine virtuelle dans Azure Portal. Accédez à Identité et cliquez sur Système affecté > Sur > Enregistrer.
Étape 2. Sous Table de routage de sous-réseau, afin d'autoriser les appels API à partir du routeur CSR1000v, choisissez Contrôle d'accès (IAM) et cliquez sur Ajouter.
Étape 3. Choisissez Rôle - Contributeur réseau. Choisissez Affecter un accès à - Machine virtuelle. Choisissez l'abonnement approprié. Sélectionnez la machine virtuelle dans la liste où leur MSI est activé.
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=
Utilisez set_params.py pour ajouter ou modifier des paramètres individuels.
set_params.py -i 100 [option1] [option2]
Utilisez clear_params.py pour effacer des paramètres individuels.
clear_params.py -i 100 [option1] [option2]
Utilisez delete_node.py pour supprimer le noeud.
delete_node.py -i 100
Le script node_event.py avec l'option peerFail indique comment HAv2 déclenche un basculement et met à jour la table de routage Azure. C'est là que vous avez la flexibilité de programmer votre propre logique. Vous pouvez utiliser EEM dans IOS pour exécuter node_event.py, ou écrire un script python dans guestshell.
Un exemple est de désactiver l'état d'une interface avec EEM pour déclencher 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"
Vous pouvez exécuter manuellement node_event.py dans guestshell pour tester un basculement réel.
[guestshell@guestshell ~]$ node_event.py -i 100 -e peerFail
HAv2 peut également rétablir la route vers le routeur d'origine à l'aide de l'option Rétablir. Il s'agit d'une configuration facultative qui simule la préemption. L'indicateur -m primaire dans create_node.py doit être défini sur le routeur principal. Voici un exemple qui utilise BFD pour surveiller l'état de l'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
Assurez-vous que les trois processus sont actifs.
systemctl status auth-token systemctl status azure-ha systemctl status waagent
Redémarrez ceux qui ont échoué.
sudo systemctl start waagent sudo systemctl start azure-ha sudo systemctl start auth-token
Deux méthodes pour vérifier la configuration ajoutée par 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'}
Simuler doucement un basculement sur le routeur de secours. Cela ne provoque pas de basculement, mais vérifie que la configuration est valide. Vérifiez les journaux à l'étape 6.
node_event.py -i 100 -e verify
Déclenchez un événement de basculement réel sur le routeur de secours. Dans Azure, vérifiez si la table de routage a mis à jour la route vers le nouveau saut. Vérifiez les journaux à l'étape 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
Étape 1. Les paquets Python sont mal installés dans /usr/lib/python2.7/site-packages/. Détruisez le shell invité et suivez les étapes de configuration.
[guestshell@guestshell ~]$ create_node.py -h bash: create_node.py: command not found [guestshell@guestshell ~]$ ls /usr/lib/python2.7/site-packages/
Le chemin d'installation correct est ~/.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
Étape 2. Si l'authentification n'a pas été configurée ou mal configurée à l'étape 3, des erreurs de jeton peuvent être générées. Pour l'authentification AAD, si la clé d'application utilisée n'est pas valide ou codée en URL, des erreurs d'authentification peuvent être visibles après le déclenchement de node_event.py.
[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
Étape 3. Si l'ID locataire ou ID app est incorrect.
[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"}
Étape 4. Lors de l'installation du package, le mode sudo a peut-être été utilisé, —utilisateur n'a pas été inclus ou source ~/.bashrc n'a pas été exécuté. Cela entraîne l'échec de create_node.py ou la génération d'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
Étape 5. Vérifiez l'historique d'installation du package.
[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
Étape 6. Vérifiez les journaux de configuration 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
Étape 6. Exécutez le script debug_ha.sh pour rassembler tous les fichiers journaux dans un seul fichier tar.
[guestshell@guestshell ~]$ bash ~/azure/HA/debug_ha.sh
Le fichier est placé dans bootflash, accessible depuis le shell invité et 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