In dem Dokumentationssatz für dieses Produkt wird die Verwendung inklusiver Sprache angestrebt. Für die Zwecke dieses Dokumentationssatzes wird Sprache als „inklusiv“ verstanden, wenn sie keine Diskriminierung aufgrund von Alter, körperlicher und/oder geistiger Behinderung, Geschlechtszugehörigkeit und -identität, ethnischer Identität, sexueller Orientierung, sozioökonomischem Status und Intersektionalität impliziert. Dennoch können in der Dokumentation stilistische Abweichungen von diesem Bemühen auftreten, wenn Text verwendet wird, der in Benutzeroberflächen der Produktsoftware fest codiert ist, auf RFP-Dokumentation basiert oder von einem genannten Drittanbieterprodukt verwendet wird. Hier erfahren Sie mehr darüber, wie Cisco inklusive Sprache verwendet.
Cisco hat dieses Dokument maschinell übersetzen und von einem menschlichen Übersetzer editieren und korrigieren lassen, um unseren Benutzern auf der ganzen Welt Support-Inhalte in ihrer eigenen Sprache zu bieten. Bitte beachten Sie, dass selbst die beste maschinelle Übersetzung nicht so genau ist wie eine von einem professionellen Übersetzer angefertigte. Cisco Systems, Inc. übernimmt keine Haftung für die Richtigkeit dieser Übersetzungen und empfiehlt, immer das englische Originaldokument (siehe bereitgestellter Link) heranzuziehen.
Dieses Dokument dient als ergänzender Konfigurationsleitfaden für HAv2 (High Availability Version 2) in Azure. Ausführliche Informationen finden Sie im Cisco CSR 1000v-Bereitstellungsleitfaden für Microsoft Azure. HAv2 wird zuerst in Cisco IOS-XE® Denali 16.9.1s unterstützt.
In HAv2 wurde die HA-Implementierung aus dem Cisco IOS XE-Code entfernt und im guestshell-Container ausgeführt. Weitere Informationen zu guestshell finden Sie im Abschnitt Guest Shell im Konfigurationsleitfaden zur Programmierbarkeit. In HAv2 wird die Konfiguration von Redundanzknoten in der Gästeschale mit einer Reihe von Python-Skripten durchgeführt.
Cisco empfiehlt, über Kenntnisse in folgenden Bereichen zu verfügen:
Die Informationen in diesem Dokument basieren auf der nativen Bereitstellung von Cisco IOS-XE® Denali 16.9.1s aus dem Azure Marketplace.
Für Ressourcen, die aus den Schritten in diesem Dokument in Azure bereitgestellt werden, können Kosten anfallen.
Die Informationen in diesem Dokument wurden von den Geräten in einer bestimmten Laborumgebung erstellt. Alle in diesem Dokument verwendeten Geräte haben mit einer leeren (Standard-)Konfiguration begonnen. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die potenziellen Auswirkungen eines Befehls verstehen.
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
Hinweis: Bei neuen Instanzen, die vom Azure Marketplace bereitgestellt werden, ist möglicherweise iox vorkonfiguriert.
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
Ausführen von curl, um zu überprüfen, ob Metadaten wiederverwendbar sind. Bei der externen Schnittstelle muss es sich um Gig1 (eth0) handeln. Andernfalls sollten Sie die Azure-Sicherheitsgruppen, das Routing oder andere Funktionen überprüfen, die möglicherweise 169.254.169.254 blockieren. 169.254.169.254 ist keine Pingable-Adresse.
[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"}]}}[
Hinweis: Verwenden Sie keinen Sudo-Modus, um Pakete zu installieren. Stellen Sie sicher, dass die Option —user verwendet wird. Wenn Sie nicht alle drei Schritte ausführen, werden die Pakete im falschen Ordner installiert. Dies kann zu ImportErrors führen. Um falsch installierte Pakete zu beheben, müssen Sie möglicherweise den IOS-Befehl guestshell delete ausführen und von vorne beginnen.
[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
Es gibt zwei Methoden, mit denen der CSR1000v API-Anrufe an Azure tätigen kann.
Hinweis: Der in HAv1 verwendete App-Schlüssel ist der kodierte Schlüssel. Der in HAv2 verwendete App-Schlüssel ist der unverschlüsselte Schlüssel. Wenn Sie den nicht verschlüsselten Schlüssel nicht notiert haben, müssen Sie möglicherweise einen neuen erstellen, da Schlüssel nicht wiederherstellbar sind.
Schritt 1: Aktivieren Sie MSI für jedes virtuelle CSR1000v-System. Navigieren Sie im Azure-Portal zum virtuellen System. Navigieren Sie zu Identität, und klicken Sie auf Systemzuweisung > Ein > Speichern.
Schritt 2: Wählen Sie unter Subnet Route Table (Subnetz-Routentabelle) die Option Access Control (IAM) aus, um API-Aufrufe vom CSR1000v-Router zuzulassen, und klicken Sie auf Add (Hinzufügen).
Schritt 3: Wählen Sie Rolle - Netzwerkbeitragender. Wählen Sie Zugriff auf - Virtuelles System zuweisen aus. Wählen Sie das richtige Abonnement aus. Wählen Sie das virtuelle System aus der Liste aus, bei dem die MSI aktiviert ist.
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=
Verwenden Sie set_params.py, um einzelne Parameter hinzuzufügen oder zu ändern.
set_params.py -i 100 [option1] [option2]
Verwenden Sie clear_params.py, um einzelne Parameter zu löschen.
clear_params.py -i 100 [option1] [option2]
Verwenden Sie delete_node.py, um den Knoten zu löschen.
delete_node.py -i 100
Mit dem node_event.py-Skript mit der PeerFail-Option löst HAv2 ein Failover aus und aktualisiert die Azure Route Table. Hier können Sie Ihre eigene Logik programmieren. Sie können EEM in IOS verwenden, um node_event.py auszuführen, oder ein Python-Skript in guestshell schreiben.
Ein Beispiel hierfür ist der Abfangen eines Schnittstellenausfallstatus mit EEM, um node_event.py auszulösen.
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"
Sie können node_event.py in guestshell manuell ausführen, um ein echtes Failover zu testen.
[guestshell@guestshell ~]$ node_event.py -i 100 -e peerFail
HAv2 kann die Route auch mit der Rückgängig-Option zum ursprünglichen Router zurücksetzen. Dies ist eine optionale Konfiguration, die eine Freischaltung simuliert. Das -m primäre Flag in create_node.py muss auf dem primären Router festgelegt werden. In diesem Beispiel wird BFD verwendet, um den Zustand der Schnittstelle zu überwachen.
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
Stellen Sie sicher, dass alle drei Prozesse aktiv sind.
systemctl status auth-token systemctl status azure-ha systemctl status waagent
Starten Sie alle fehlgeschlagenen neu.
sudo systemctl start waagent sudo systemctl start azure-ha sudo systemctl start auth-token
Zwei Methoden zum Überprüfen der von create_node.py hinzugefügten Konfiguration.
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'}
Soft simuliert ein Failover auf dem Standby-Router. Dies führt nicht zu einem Failover, sondern überprüft, ob die Konfiguration gültig ist. Überprüfen Sie die Protokolle in Schritt 6.
node_event.py -i 100 -e verify
Auslösen eines echten Failover-Ereignisses auf dem Standby-Router Überprüfen Sie in Azure, ob die Route durch die Routentabelle zum neuen Hop aktualisiert wurde. Überprüfen Sie die Protokolle in Schritt 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
Schritt 1: Python-Pakete sind falsch installiert in /usr/lib/python2.7/site-packages/. Zerstören Sie Guestshell und befolgen Sie die Konfigurationsschritte.
[guestshell@guestshell ~]$ create_node.py -h bash: create_node.py: command not found [guestshell@guestshell ~]$ ls /usr/lib/python2.7/site-packages/
Der richtige Installationspfad ist ~/.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
Schritt 2: Wenn in Schritt 3 keine Authentifizierung konfiguriert oder falsch konfiguriert wurde, können Tokenfehler generiert werden. Bei der AD-Authentifizierung können bei ungültigem Anwendungsschlüssel oder URL-verschlüsselt Authentifizierungsfehler auftreten, nachdem node_event.py ausgelöst wurde.
[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
Schritt 3: Wenn die Tenant-ID oder App-ID falsch ist.
[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"}
Schritt 4: Während der Paketinstallation wurde sudo-Modus verwendet, —Benutzer war nicht enthalten, oder Quelle ~/.bashrc wurde nicht ausgeführt. Dadurch schlägt create_node.py fehl oder generiert einen 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
Schritt 5: Überprüfen Sie den Installationsverlauf des Pakets.
[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
Schritt 6: Überprüfen Sie HA-Konfigurationsprotokolle.
[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
Schritt 6: Führen Sie das Skript debug_ha.sh aus, um alle Protokolldateien in einer einzelnen TAR-Datei zu sammeln.
[guestshell@guestshell ~]$ bash ~/azure/HA/debug_ha.sh
Die Datei wird in Bootflash platziert, auf den sowohl guestshell als auch IOS zugreifen können.
[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