المقدمة
يوضح هذا المستند كيفية إعداد gNMI لاشتراك الطلب الهاتفي لتطبيقات القياس عن بعد التي تعمل على محولات Cisco Nexus 9000 Series Switches.
المتطلبات الأساسية
المتطلبات
توصيات عامة بأن تكون لديك معرفة بالمواضيع التالية:
- gRPC (إستدعاء الإجراء عن بعد من Google)
- gNMI (Google RPC - واجهة إدارة الشبكة)
- شهادات المرجع المصدق (جهة منح الشهادة)
- TLS (أمان طبقة النقل)
- سطر أوامر Nexus 9000
المكونات المستخدمة
- تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:
الخادم (SW1) |
N9K-C93180YC-FX |
الإصدار 9.3(9) |
مجمع (عميل) |
ماك/ أوبونتو |
13.4.1 / 5.19.0-46 |
TLS |
الخدمة قيد التشغيل على Ubuntu |
3.3.6 |
gNMI |
الخدمة قيد التشغيل على Ubuntu |
0.5.0 |
- تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
ما هو gRPC؟
- gRPC (الذي طورته شركة Google) هو إطار عمل RPC لإنشاء أنظمة موزعة.
- في بروتوكول gRPC، يمكن للعميل الذي يعمل على نظام واحد إستدعاء الخدمات المحددة في خادم بعيد كما لو كانت كائن محلي.
- نقطة النهاية (أو الخادم) هي عملية قيد التشغيل يمكنها الاتصال بنقاط النهاية الأخرى ببروتوكول gRPC. يمكن لنقطة النهاية إستضافة خدمات متعددة.
ما هو NMI (Dail-in)؟
- gNMI هي واجهة إدارة الشبكة المستندة إلى Google RPC لتكوين أجهزة الشبكة.
أجهزة RPCs المدعومة الخاصة بواجهة NMI
gNMI RPC |
مدعوم |
القدرات |
نعم |
إحضار |
نعم |
مجموعة |
نعم |
اشتراك |
نعم |
الأساليب المدعومة ل gNMI
المصادقة الجانبية للخادم (TLS) / بكلمة مرور
تكوين GNMI على Nexus 9k
تكوين جهاز العميل
تثبيت خدمة gNMI:
bash -c "$(curl -sL https://get-gnmic.openconfig.net)"
التحقق من Nexus 9k
# show run grpc
feature grpc
#show grpc gnmi transactions
=============
gRPC Endpoint
=============
Vrf : management
Server address : [::]:50051
Cert notBefore : Jul 19 13:16:53 2023 GMT <- Default switch certificates used for one day
Cert notAfter : Jul 20 13:16:53 2023 GMT
RPC DataType Session Time In Duration(ms) Status
------------ ---------- --------------- -------------------- ------------ ------
Get ALL 3538957304 07/19 14:21:14 1 0
subtype: dtx: st: path:
- - OK /System/bgp-items/inst-items/dom-items/Dom-list/rtrId
Get ALL 3536859976 07/19 14:20:30 1101 0
subtype: dtx: st: path:
- - OK /System/intf-items
التحقق من مجمع العملاء
% gnmic -a 10.88.146.112:50051 -u (username) -p (password) --skip-verify get --path /System/bgp-items/inst-items/dom-items/Dom-list/rtrId
[
{
"source": "10.88.146.112:50051",
"timestamp": 1689773883108293792,
"time": "2023-07-19T19:08:03.108293792+05:30",
"updates": [
{
"Path": "System/bgp-items/inst-items/dom-items/Dom-list/rtrId",
"values": {
"System/bgp-items/inst-items/dom-items/Dom-list/rtrId": null
}
}
]
}
]
% gnmic -a 10.88.146.112:50051 -u (username) -p (password) --skip-verify capabilities
gNMI version: 0.5.0
supported models:
- Cisco-NX-OS-device, Cisco Systems, Inc., 2022-02-04
- DME, Cisco Systems, Inc.,
- Cisco-NX-OS-Syslog-oper, Cisco Systems, Inc., 2019-08-15
supported encodings:
- JSON
- PROTO
ملاحظة: يتم تشفير البيانات باستخدام الشهادات الافتراضية للمحول المثبتة مع مصادقة كلمة المرور.
المصادقة الجانبية للخادم (TLS) مع شهادات CA الجذر وكلمة المرور
تكوين العميل
-
إنشاء شهادة موقعة ذاتيا (أو إنشاء شهادة من خادم الاعتماد).
-
يمكنك إستخدام Nexus 9k BaseShell لإنشاء شهادات موقعة ذاتيا أو خادم ترخيص (مرجع مصدق جذري).
-
يمكن إستخدام الشهادة الموقعة من قبل المرجع المصدق الجذر على المحول أو المجمع.
-
أستخدم الشهادة على التشفير بكلمة المرور.
-
قم بتنفيذ التشفير إلى gRPC.
تحول إلى مرجع مصدق جذري محلي
هذه هي الخطوات التي يجب أن تصبح جذرية وتولد شهادات:
1. إنشاء المفتاح:
bash-4.3# openssl genrsa -des3 -out myCA.key 2048 <<< Generate key for Root CA
Generating RSA private key, 2048 bit long modulus
..........
...............
e is 65537 (0x10001)
Enter pass phrase for myCA.key:
Verifying - Enter pass phrase for myCA.key:
2. إنشاء شهادة جذر:
bash-4.3# openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1000 -out myCA.pem
Enter pass phrase for myCA.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:IN
Locality Name (eg, city) []:IN
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IN
Organizational Unit Name (eg, section) []:IN
Common Name (e.g. server FQDN or YOUR name) []:IN
Email Address []:IN
bash-4.3# pwd
/bootflash/home/admin/certs
bash-4.3# ls -ll
total 8
-rw-r--r-- 1 root root 1743 Jul 19 14:24 myCA.key
-rw-r--r-- 1 root root 1302 Jul 19 14:25 myCA.pem
3. إنشاء شهادة خادم تم إختيارها من قبل الخادم الجذري:
1. openssl genrsa -out Server.test.key 2048. << create server private key
2. openssl req -new -key Server.test.key -out Server.test.csr << Create server csr
3. Need to create an X509 V3 certificate extension config file, which is used to define the Subject Alternative Name (SAN) for the certificate.
bash-4.3# cat Server.test.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 10.88.x.x. << Server IP address
4. Creating Server certificates singed by Root CA (myCA.pem)
openssl x509 -req -in Server.test.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out Server.test.crt -days 825 -sha256 -extfile Server.test.ext
5. At last, we need to create .PFX file to use on switch.
openssl pkcs12 -export -out Server.test.pfx -inkey Server.test.key -in Server.test.crt -certfile myCA.pem -password pass:cisco
6. All created files
bash-4.3# ls -l
total 32
-rw-r--r-- 1 root root 1743 Jul 19 14:24 myCA.key
-rw-r--r-- 1 root root 1302 Jul 19 14:25 myCA.pem <-- .pem will be used on client machine for server authentication
-rw-r--r-- 1 root root 17 Jul 19 14:40 myCA.srl
-rw-r--r-- 1 root root 1298 Jul 19 14:40 Server.test.crt
-rw-r--r-- 1 root root 1054 Jul 19 14:38 Server.test.csr
-rw-r--r-- 1 root root 203 Jul 19 14:40 Server.test.ext
-rw-r--r-- 1 root root 1679 Jul 19 14:36 Server.test.key
-rw-r--r-- 1 root root 3485 Jul 19 14:43 Server.test.pfx. <-- Copy file to Switch and import certificates to gRPC trust point
bash-4.3#
تكوين Nexus 9k ل gRPC
Feature grpc
crypto ca trustpoint trust_my <-- trust point created
crypto ca import trust_my pkcs12 bootflash:Server.test.pfx cisco <-- pfx file used to import certificates
grpc certificate trust_my <-- trust point added to grpc
دققت المفتاح
show grpc gnmi service statistics
=============
gRPC Endpoint
=============
Vrf : management
Server address : [::]:50051
Cert notBefore : Jul 19 14:40:57 2023 GMT <-- Certificates installed by Admin
Cert notAfter : Oct 21 14:40:57 2025 GMT
Max concurrent calls : 8
Listen calls : 1
Active calls : 0
Number of created calls : 29
Number of bad calls : 28
Subscription stream/once/poll : 0/0/0
Max gNMI::Get concurrent : 5
Max grpc message size : 8388608
gNMI Synchronous calls : 34
gNMI Synchronous errors : 19
gNMI Adapter errors : 18
gNMI Dtx errors : 0
show crypto ca certificates trust_my
Trustpoint: trust_my
certificate:
subject= /C=IN/ST=IN/L=IN/O=IN/OU=IN/CN=IN/emailAddress=IN
issuer= /C=IN/ST=IN/L=IN/O=IN/OU=IN/CN=IN/emailAddress=IN
serial=AC6E9591F0919488
notBefore=Jul 19 14:40:57 2023 GMT
notAfter=Oct 21 14:40:57 2025 GMT
SHA1 Fingerprint=7D:F1:7E:CD:C7:32:7E:B9:68:16:D4:D8:9A:48:C0:4A:7E:72:15:33
purposes: sslserver sslclient
CA certificate 0:
subject= /C=IN/ST=IN/L=IN/O=IN/OU=IN/CN=IN/emailAddress=IN
issuer= /C=IN/ST=IN/L=IN/O=IN/OU=IN/CN=IN/emailAddress=IN
serial=EE18094A2EC65F7D
notBefore=Jul 19 14:25:49 2023 GMT
notAfter=Apr 14 14:25:49 2026 GMT
SHA1 Fingerprint=A4:06:6A:80:A0:2A:D5:E1:15:92:F4:2B:50:89:BF:23:A0:52:D5:54
purposes: sslserver sslclient
show grpc gnmi transactions
=============
gRPC Endpoint
=============
Vrf : management
Server address : [::]:50051
Cert notBefore : Jul 19 14:40:57 2023 GMT
Cert notAfter : Oct 21 14:40:57 2025 GMT
Client Root Cert notBefore : n/a
Client Root Cert notAfter : n/a
RPC DataType Session Time In Duration(ms) Status
------------ ---------- --------------- -------------------- ------------ ------
Set - 3458208880 07/26 07:46:09 98 0
subtype: dtx: st: path:
Update - OK /interfaces/interface[name=mgmt0]/config/description
show run grpc
feature grpc
grpc certificate trust_my
التحقق من العميل
1: Get
% gnmic -a 10.88.146.112:50051 -u (username) -p (Password) --tls-ca myCA.pem get --path /System/bgp-items/inst-items/dom-items/Dom-list/rtrId
[
{
"source": "10.88.146.112:50051",
"timestamp": 1689779603147750570,
"time": "2023-07-19T20:43:23.14775057+05:30",
"updates": [
{
"Path": "System/bgp-items/inst-items/dom-items/Dom-list/rtrId",
"values": {
"System/bgp-items/inst-items/dom-items/Dom-list/rtrId": null
}
}
]
}
]
2: Capabilities
% gnmic -a 10.88.146.112:50051 -u (username) --tls-ca myCA.pem capabilities
gNMI version: 0.5.0
supported models:
- Cisco-NX-OS-device, Cisco Systems, Inc., 2022-02-04
- DME, Cisco Systems, Inc.,
- Cisco-NX-OS-Syslog-oper, Cisco Systems, Inc., 2019-08-15
supported encodings:
- JSON
- PROTO
% gnmic -a 10.88.146.112:50051 -u (username) -p (password) --tls-ca myCA.pem capabilities
gNMI version: 0.5.0
supported models:
- Cisco-NX-OS-device, Cisco Systems, Inc., 2022-02-04
- DME, Cisco Systems, Inc.,
- Cisco-NX-OS-Syslog-oper, Cisco Systems, Inc., 2019-08-15
supported encodings:
- JSON
- PROTO
3: Set
interface mgmt0 <-- No Description on interface
vrf member management
ip address x.x.x.x/x
% gnmic -a 10.88.146.112:50051 -u (username) -p (password) --tls-ca myCA.pem set --update-path "interfaces/interface[name=mgmt0]/config/description" --update-value gnmic
{
"source": "10.88.146.112:50051",
"timestamp": 1690357569933044933,
"time": "2023-07-26T13:16:09.933044933+05:30",
"results": [
{
"operation": "UPDATE",
"path": "interfaces/interface[name=mgmt0]/config/description"
}
]
}
interface mgmt0
description gnmic <-- Description added with set RPC
vrf member management
ip address x.x.x.x/x
ملخص
- تحقق من دليل التكوين ل Nexus 9000 فيما يتعلق بتفاصيل إضافية وإرشادات/قيود ل gNMI.
- ابحث عن إرتباط للتحقق من مسار OpenConfig للحصول على RPC وتعيينه.
- تحتاج إلى تثبيت RPM للمسارات المدعومة ل OpenConfig على إصدار 9.3(x) وتمكين ميزة OpenConfig التي تبدأ من 10.2.(2).
معلومات ذات صلة