تسعى مجموعة الوثائق لهذا المنتج جاهدة لاستخدام لغة خالية من التحيز. لأغراض مجموعة الوثائق هذه، يتم تعريف "خالية من التحيز" على أنها لغة لا تعني التمييز على أساس العمر، والإعاقة، والجنس، والهوية العرقية، والهوية الإثنية، والتوجه الجنسي، والحالة الاجتماعية والاقتصادية، والتمييز متعدد الجوانب. قد تكون الاستثناءات موجودة في الوثائق بسبب اللغة التي يتم تشفيرها بشكل ثابت في واجهات المستخدم الخاصة ببرنامج المنتج، أو اللغة المستخدمة بناءً على وثائق RFP، أو اللغة التي يستخدمها منتج الجهة الخارجية المُشار إليه. تعرّف على المزيد حول كيفية استخدام Cisco للغة الشاملة.
ترجمت Cisco هذا المستند باستخدام مجموعة من التقنيات الآلية والبشرية لتقديم محتوى دعم للمستخدمين في جميع أنحاء العالم بلغتهم الخاصة. يُرجى ملاحظة أن أفضل ترجمة آلية لن تكون دقيقة كما هو الحال مع الترجمة الاحترافية التي يقدمها مترجم محترف. تخلي Cisco Systems مسئوليتها عن دقة هذه الترجمات وتُوصي بالرجوع دائمًا إلى المستند الإنجليزي الأصلي (الرابط متوفر).
يعمل هذا المستند كدليل تكوين تكميلي للإصدار 2 (HAv2) عالي التوفر في Azure. تم العثور على التفاصيل الكاملة في دليل نشر Cisco CSR 1000v ل Microsoft Azure. يتم دعم HAv2 أولا في Cisco IOS-XE® Denali 16.9.1s.
في HAv2، تم نقل تنفيذ HA إلى خارج رمز Cisco IOS XE ويتم تشغيله في حاوية Guestshell. لمزيد من المعلومات عن Guestshell، راجع قسم Guest Shell في دليل تكوين قابلية البرمجة. في HAv2، يتم إجراء تكوين عقد التكرار في طبقة الأمان باستخدام مجموعة من برامج Python النصية.
توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:
تستند المعلومات الواردة في هذا المستند إلى Cisco IOS-XE® Denali 16.9.1s الذي تم نشره محليا من سوق Azure.
قد تتكبد الموارد التي تم نشرها في Azure من الخطوات الواردة في هذا المستند تكلفة.
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
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
ملاحظة: قد تكون المثيلات الجديدة التي تم نشرها من موقع Azure Marketplace مهيأة مسبقا ل IOx.
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
قم بتشغيل التفاف للتحقق من أنه يمكن إعادة البحث عن بيانات التعريف. يجب أن تكون الواجهة الخارجية الأمامية gig1 (eth0). وإلا، فتحقق من مجموعات أمان Azure أو التوجيه أو الميزات الأخرى التي قد تمنع 169.254.169.254. لا يعد 169.254.169.254 عنوانا قابلا للتجميع.
[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"}]}}[
ملاحظة: لا تستخدم وضع السدو لتثبيت الحزم. تأكد من إستخدام خيار —المستخدم. يؤدي الفشل في تنفيذ الخطوات الثلاث جميعها إلى تثبيت الحزم في المجلد الخطأ. قد يؤدي ذلك إلى ImportErrors. لإصلاح الحزم التي تم تثبيتها بشكل غير صحيح، قد تحتاج إلى تشغيل أمر IOS guestshell الذي يدمر ويبدأ من جديد.
[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
هناك طريقتان للسماح ل CSR1000v بإجراء مكالمات API إلى Azure.
ملاحظة: مفتاح التطبيق المستخدم في HAv1 هو المفتاح المرمز. مفتاح التطبيق المستخدم في HAv2 هو المفتاح غير المرمز. إذا لم تقم بعمل ملاحظة للمفتاح غير المرمز، فقد تحتاج إلى إنشاء مفتاح جديد لأن المفاتيح لا يمكن إستردادها.
الخطوة 1. قم بتمكين MSI لكل جهاز افتراضي من الأجهزة الظاهرية CSR1000v. انتقل إلى VM في مدخل Azure. انتقل إلى الهوية وانقر على النظام المعين > على > حفظ.
الخطوة 2. تحت جدول مسار الشبكة الفرعية، للسماح باستدعاءات API من الموجه CSR1000V، أختر التحكم في الوصول (IAM) وانقر فوق إضافة.
الخطوة 3. أختر دور - مساهم الشبكة. أختر تعيين وصول إلى - الجهاز الظاهري. أختر الاشتراك المناسب. حدد الجهاز الظاهري من القائمة التي تم تشغيل MSI الخاص بها.
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=
أستخدم set_params.py لإضافة معلمات فردية أو تغييرها.
set_params.py -i 100 [option1] [option2]
أستخدم clear_params.py لمسح المعلمات الفردية.
clear_params.py -i 100 [option1] [option2]
أستخدم delete_node.py لحذف العقدة.
delete_node.py -i 100
يكون البرنامج النصي node_event.py مع خيار peerFail هو كيف يقوم HAv2 بتشغيل تجاوز الفشل وتحديث جدول مسار Azure. وهنا تصبح لديك المرونة اللازمة لبرمجة منطقك الخاص. يمكنك إستخدام IM داخل IOS لتشغيل node_event.py، أو كتابة برنامج نصي python ضمن guestshell.
أحد الأمثلة على ذلك هو الإمساك بإحدى الواجهات مع إستخدام IM لتشغيل 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"
يمكنك تشغيل node_event.py يدويا في guestshell لاختبار تجاوز الفشل الحقيقي.
[guestshell@guestshell ~]$ node_event.py -i 100 -e peerFail
كما يمكن أن يقوم HAv2 بإرجاع المسار إلى الموجه الأصلي باستخدام خيار الإرجاع. هذا تكوين إختياري يحاكي الاستخدام المسبق. يجب تعيين العلامة -M الأساسية في create_node.py على الموجه الأساسي. هذا مثال أن يستعمل BFD أن يراقب الحالة من القارن.
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
تأكد من أن العمليات الثلاث نشطة.
systemctl status auth-token systemctl status azure-ha systemctl status waagent
قم بإعادة تشغيل أية وحدات أخرى فشلت.
sudo systemctl start waagent sudo systemctl start azure-ha sudo systemctl start auth-token
طريقتان للتحقق من التكوين الذي تمت إضافته بواسطة 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'}
محاكاة ناعمة لتجاوز الفشل على الموجه الاحتياطي. لا يؤدي ذلك في الواقع إلى تجاوز الفشل ولكنه يتحقق من صحة التكوين. تحقق من السجلات في الخطوة 6.
node_event.py -i 100 -e verify
تشغيل حدث تجاوز فشل حقيقي على الموجه الاحتياطي. في Azure، تحقق مما إذا كان جدول المسار قد قام بتحديث المسار إلى الخطوة الجديدة. تحقق من السجلات في الخطوة 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
الخطوة 1. تم تثبيت حزم Python بشكل غير صحيح في /usr/lib/python2.7/site-packages/. قم بتدمير طبقة الأمان واتبع خطوات التكوين.
[guestshell@guestshell ~]$ create_node.py -h bash: create_node.py: command not found [guestshell@guestshell ~]$ ls /usr/lib/python2.7/site-packages/
مسار التثبيت الصحيح هو ~/.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
الخطوة 2. إذا لم يتم تكوين المصادقة أو تكوينها بشكل غير صحيح في الخطوة 3، فقد يتم إنشاء أخطاء الرمز المميز. بالنسبة لمصادقة AAD، إذا كان مفتاح التطبيق المستخدم غير صالح أو تم تشفير URL، فقد تظهر أخطاء المصادقة بعد تشغيل 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
الخطوة 3. إذا كان معرف المستأجر أو معرف التطبيق غير صحيح.
[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"}
الخطوة 4. أثناء تثبيت الحزمة، قد يكون Sudo mode قد تم إستخدامه، — لم يتم تضمين المستخدم، أو لم يتم تشغيل المصدر ~/.bashrc. يؤدي ذلك إلى فشل create_node.py أو إنشاء 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
الخطوة 5. تحقق من محفوظات تثبيت الحزمة.
[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
الخطوة 6. تحقق من سجلات تكوين 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
الخطوة 6. قم بتشغيل البرنامج النصي debug_ha.sh لتجميع جميع ملفات السجلات في ملف tar واحد.
[guestshell@guestshell ~]$ bash ~/azure/HA/debug_ha.sh
يتم وضع الملف في bootflash الذي يمكن الوصول إليه من كل من Guestshell و 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