gRPC エージェントについて
gRPC は、最新のオープンソースの高性能なリモートプロシージャコール(Remote Procedure Call、RPC)フレームワークです。Cisco NX-OS は、gNMI や gNOI などの gRPC 関連サービスをサポートする gRPC エージェントを提供します。
この製品のドキュメントセットは、偏向のない言語を使用するように配慮されています。このドキュメントセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブ ランゲージの取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
gRPC は、最新のオープンソースの高性能なリモートプロシージャコール(Remote Procedure Call、RPC)フレームワークです。Cisco NX-OS は、gNMI や gNOI などの gRPC 関連サービスをサポートする gRPC エージェントを提供します。
リリース | 説明(Description) |
---|---|
9.3(3) |
次のサポートの追加:
|
10.1(1) |
クライアント証明書ベースの認証のサポートを追加
|
10.3(3) | GRPC プロキシとして機能する NGINX のサポート |
以下は、gRPC エージェントに関するガイドラインと制限事項です。
管理 VRF とデフォルト VRF の両方で gRPC を有効にし、後でデフォルト VRF で無効にすると、管理 VRF の gNMI 操作は機能しなくなります。
回避策として、no feature grpc コマンドを入力して gRPC を完全に無効にし、feature grpc コマンド、または grpc certificate や grpc port のような任意の既存 gRPC 構成コマンドを入力して、再プロビジョニングします。また、管理 VRF の既存の通知に再登録する必要もあります。
gRPC 証明書が明示的に設定されている場合、保存されたスタートアップ コンフィギュレーションを使用して以前の Cisco NX-OS 9.3(x) イメージにリロードした後、gRPC 機能は接続を受け入れません。
show grpc gnmi service statistics コマンドを入力して確認します。次のステータスエラーメッセージが表示されます。
Status: Not running - Initializing...Port not available or certificate invalid.(ステータス: 実行していません - 初期化中...ポートが使用できないか、証明書が無効です。)
サービスを復元するには、適切な証明書コマンドを設定解除して設定します。
カスタム gRPC 証明書を構成している場合、reload ascii コマンドを入力すると構成が失われます。デフォルトの day-1 証明書に戻ります。reload ascii コマンドを入力した後には、スイッチをリロードします。スイッチが再び起動したら、gRPC カスタム証明書を再設定する必要があります。
![]() (注) |
これは、grpc 証明書コマンドを入力した場合に適用されます。 |
gRPC のデフォルト以外の VRF の到達可能性は、L3VNI/EVPN および IP 経由でのみサポートされます。ただし、デフォルト以外の VRF および VXLAN フラッドおよびラーニングでの MPLS を介した到達可能性はサポートされていません。
9.3(x) より前の Cisco NX-OS リリースにおいてサポートされるプラットフォームの詳細については、そのリリース向けガイドの「プログラマビリティ機能のプラットフォーム サポート」を参照してください。Cisco NX-OS リリース 9.3(x) 以降でサポートされているプラットフォームについては、『Nexus Switch Platform Matrix』を参照してください。
gRPC プロセスは、CPU 使用率を CPU の 75% に、メモリを 4 GB に制限する HIGH_PRIO 制御グループを使用します。
gRPC エージェントは、各スイッチ上で、合計で 2 台の gRPC サーバに対し、管理 VRF と 1 台のユーザー指定 VRF をサポートします。ユーザー指定 VRF(たとえばデフォルト VRF)で gRPC をサポートすれば、大量のトラフィック負荷が望ましくない管理 VRF からの gRPC 呼び出しの処理を、柔軟にオフロードできます。
2 つの gRPC サーバーを構成する場合は、次の点に注意してください。
VRF 境界は厳密に適用されるため、各 gRPC サーバーは相互に独立して要求を処理します。要求は VRF 間を通過しません。
2 台のサーバーは HA またはフォールト トレラントではありません。一方の gRPC サーバーは他方をバックアップせず、それらの間でスイッチオーバーまたはスイッチバックはありません。
gRPC サーバーの制限は VRF 単位です。
Cisco NX-OS リリース 10.4(3)F 以降、gRPC は 92348GC-X でサポートされます。
gNMI 機能は、grpc コマンドを使用して構成します。
grpc certificate コマンドで使用される証明書をスイッチにインポートするには、『Cisco Nexus 9000 シリーズ NX-OS セキュリティ構成ガイド』の「アイデンティティ証明書のインストール」のセクションを参照してください。
![]() (注) |
インストールされている ID 証明書または と の値を変更すると、gRPC サーバーが再起動して変更が適用される場合があります。grpc port grpc certificate gRPC サーバが再起動すると、アクティブなサブスクリプションはすべてドロップされるため、再サブスクライブする必要があります。 |
サーバ認証に必要な証明書ファイルを準備し、署名します。
これは gRPC に固有ではないため、既存のトラストポイントファイルを再利用できます。
コマンドまたはアクション | 目的 | |
---|---|---|
ステップ 1 |
configure terminal 例:
|
構成モードに入ります。 |
ステップ 2 |
(任意) crypto ca trustpoint <server-trustpoint> 例:
|
(任意)
サーバ認証用のトラストポイントを作成します。 使用可能なサーバ トラストポイントがすでに存在する場合、ステップ 2 ~ 3 はオプションです。 |
ステップ 3 |
crypto ca import <server-trustpoint> pkcs12 bootflash: :<server-ca-file> <pkcs-password> 例:
|
サーバの pkcs12 ファイルをトラストポイントにインポートします。 |
ステップ 4 |
feature grpc 例:
|
ダイヤルイン用の gNMI インターフェイスをサポートする gRPC エージェントを有効にします。 |
ステップ 5 |
(任意) grpc port port-id 例:
|
(任意)
ポート番号を構成します。port-id の範囲は 1024 ~ 65535 です。50051 がデフォルトです。 |
ステップ 6 |
grpc certificate certificate-id 例:
|
証明書トラストポイント ID を指定します。詳細については、『Cisco Nexus 9000 シリーズ NX-OS セキュリティ構成ガイド』の「アイデンティティ証明書のインストール」セクションで、証明書のインポートについて確認してください。 |
ステップ 7 |
(任意) use-vrf default 例:
|
(任意)
gRPC エージェントがデフォルト VRF からの着信(ダイヤルイン)RPC 要求を受け入れられるようにします。この手順により、デフォルト VRF が着信 RPC 要求を処理できるようになります。デフォルトでは、gRPC 機能が有効になっている場合、管理 VRF が着信 RPC 要求を処理します。 |
次に、スイッチの bash シェルで自己署名キー/証明書を生成する例を示します。これは実験のみを目的としています。アイデンティティ証明書の生成の詳細については、『Cisco Nexus 9000 シリーズ NX-OS セキュリティ構成ガイド』の「アイデンティティ証明書のインストール」のセクションを参照してください。
![]() (注) |
このタスクは、スイッチで証明書を生成する方法の例です。任意の Linux 環境で証明書を生成することもできます。実稼働環境では、CA 署名付き証明書の使用を検討する必要があります。 |
コマンドまたはアクション | 目的 | |
---|---|---|
ステップ 1 |
自己署名キーと pem ファイルを生成します。 |
|
ステップ 2 |
キー ファイルと pem ファイルを生成した後、トラストポイント CA アソシエーションで使用するためにキー ファイルと pem ファイルをバンドルする必要があります。 |
|
ステップ 3 |
pkcs12 バンドルをトラストポイントに入力して、トラストポイント CA アソシエーションを設定します。 |
|
ステップ 4 |
セットアップを確認します。 |
|
gRPC では、証明書ファイル(公開キー)に基づいてクライアントを認証することもできます。これにより、パスワードベースの認証よりも安全であると考えられるパスワードレス認証が提供されます。
サーバ認証に必要な証明書ファイルを準備し、署名します。
これは gRPC に固有ではないため、既存のトラストポイントファイルを再利用できます。
コマンドまたはアクション | 目的 | |
---|---|---|
ステップ 1 |
configure terminal 例:
|
構成モードに入ります。 |
ステップ 2 |
(任意) crypto ca trustpoint <server-trustpoint> 例:
|
(任意)
サーバ認証用のトラストポイントを作成します。 使用可能なサーバ トラストポイントがすでに存在する場合、ステップ 2 ~ 3 はオプションです。 |
ステップ 3 |
rsakeypair <client-key> 例:
|
クライアント トラストポイントの rsa キーペアを生成します。 |
ステップ 4 |
(任意) crypto ca authenticate <client-root-trustpoint> 例:
|
(任意)
クライアント証明書をインポートします。この手順では、手動でコピーして貼り付ける必要があります。指示に従ってください。 |
ステップ 5 |
grpc client root certificate <client-root-trustpoint> 例:
|
クライアント CA ルート証明書をホストするトラストポイントを入力します。 |
構成例
このセクションでは、説明のために構成シーケンスの例を示します。
クライアント ルートCA証明書を準備します。
証明書のインポート
switch(config)# crypto ca trustpoint my_client_trustpoint
switch(config-trustpoint)# crypto ca authenticate my_client_trustpoint
input (cut & paste) CA certificate (chain) in PEM format; end the input with a line containing only END OF INPUT :
-----BEGIN CERTIFICATE-----
MIIDUDCCAjigAwIBAgIJAJLisBKCGjQOMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJDQTERMA8GA1UEBwwIU2FuIEpvc2UxDjAMBgNVBAoM
BUNpc2NvMB4XDTIwMTAxNDIwNTYyN1oXDTQwMTAwOTIwNTYyN1owPTELMAkGA1UE
BhMCVVMxCzAJBgNVBAgMAkNBMREwDwYDVQQHDAhTYW4gSm9zZTEOMAwGA1UECgwF
Q2lzY28wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEX7qZ2EdogZU4 EW0NSpB3EjY0nSlFLOw/iLKSXfIiQJD0Qhaw16fDnnYZj6vzWEa0ls8canqHCXQl gUyxFOdGDXa6neQFTqLowSA6UCSQA+eenN2PIpMOjfdFpaPiHu3mmcTI1xP39Ti3 /y548NNORSepApBNkZ1rJSB6Cu9AIFMZgrZXFqDKBGSUOf/CPnvIDZeLcun+zpUu
CxJLA76Et4buPMysuRqMGHIX8CYw8MtjmuCuCTHXNN31ghhgpFxfrW/69pykjU3R
YOrwlSUkvYQhtefHuTHBmqym7MFoBEchwrlC5YTduDzmOvtkhsmpogRe3BiIBx45
AnZdtdi1AgMBAAGjUzBRMB0GA1UdDgQWBBSh3IqRrm+mtB5GNsoLXFb3bAVg5TAf
BgNVHSMEGDAWgBSh3IqRrm+mtB5GNsoLXFb3bAVg5TAPBgNVHRMBAf8EBTADAQH/
MA0GCSqGSIb3DQEBCwUAA4IBAQAZ4Fpc6lRKzBGJQ/7oK1FNcTX/YXkneXDk7Zrj 8W0RS0Khxgke97d2Cwl5P5reXO27kvXsnsz/VZn7JYGUvGSlxTlcCb6x6wNBr4Qr t9qDBu+LykwqNOFe4VCAv6e4cMXNbH2wHBVS/NSoWnM2FGZ10VppjEGFm6OM+N6z 8n4/rWslfWFbn7T7xHH+Nl0Ffc+8q8h37opyCnb0ILj+a4rnyus8xXJPQb05DfJe ahPNfdEsXKDOWkrSDtmKwtWDqdtjSQC4xioKHoshnNgWBJbovPlMQ64UrajBycwV z9snWBm6p9SdTsV92YwF1tRGUqpcI9olsBgH7FUVU1hmHDWE
-----END CERTIFICATE----END OF INPUT
Fingerprint(s): SHA1 Fingerprint=0A:61:F8:40:A0:1A:C7:AF:F2:F7:D9:C7:12:AE:29:15:52:9D:D2:AE
Do you accept this certificate? [yes/no]:yes switch(config)#
NOTE: Use the CA Certificate from the .pem file content.
switch# show crypto ca certificates Trustpoint: my_client_trustpoint CA certificate 0:
subject=C = US, ST = CA, L = San Jose, O = Cisco
issuer=C = US, ST = CA, L = San Jose, O = Cisco
serial=B7E30B8F4168FB87 notBefore=Oct 1 17:29:47 2020 GMT notAfter=Sep 26 17:29:47 2040 GMT
SHA1 Fingerprint=E4:91:4E:D4:41:D2:7D:C0:5A:E8:F7:2D:32:81:B3:37:94:68:89:10 purposes: sslserver sslclient
gRPC へのトラストポイントの関連付け
switch(config)# feature grpc
switch(config)# grpc client root certificate my_client_trustpoint switch(config)# show run grpc
!Command: show running-config grpc
!Running configuration last done at: Wed Dec 16 20:18:35 2020
!Time: Wed Dec 16 20:18:40 2020
version 10.1(1) Bios:version N/A feature grpc
grpc gnmi max-concurrent-calls 14 grpc use-vrf default grpc certificate my_trustpoint
grpc client root certificate my_client_trustpoint grpc port 50003
証明書の詳細の検証
switch# show grpc gnmi service statistics
============= gRPC Endpoint =============
Vrf : management
Server address : [::]:50003
Cert notBefore : Mar 13 19:05:24 2020 GMT
Cert notAfter : Nov 20 19:05:24 2033 GMT
Client Root Cert notBefore : Oct 1 17:29:47 2020 GMT
Client Root Cert notAfter : Sep 26 17:29:47 2040 GMT
...
任意の gNMI クライアントのクライアント証明書認証を使用した接続の確認。
クライアント証明書は、秘密キー(pkey)と CA チェーン(cchain)を使用して要求を行います。現在では、パスワードはオプションです。クライアントがルートCAからクライアント証明書への完全なチェーンを提供する必要があることを確認してください。
switch(config)# no grpc client root certificate my_client_trustpoint
コマンドは、gRPC エージェントのトラストポイント参照だけを削除します。トラストポイント CA 証明書は削除されません。スイッチ上の gRPC サーバーへのクライアント証明書認証を使用する接続は確立されませんが、ユーザー名とパスワードによる基本認証は通過します。
Netconf や Restconf と同様に、gRPC エージェントは専用のサーバ/ポートで実行されます。gRPC クライアントは、gRPC エージェント/サーバに直接接続する必要があります。
リリース10.3(3)F 以降、NX-OS NGINX は gRPCトラフィックをリレーすることで GRPCプロキシとしても機能できます。これは特定のユースケースに役立ちます。
GRPC ポートがブロックされました:GRPC エージェントはポート 50051 でリッスンします。このポートがファイアウォールによってブロックされている場合、GRPC クライアントは NGINX HTTPS ポート 443 を介して gRPC サービスに間接的にアクセスできます。
VRF サポートの強化:現在、GRPC サービスには、管理 VRF または 1 つのユーザー指定 VRF を経由してのみアクセスできます。NGINXプロキシは、任意の VRF からの gRPC 要求を転送できます。
この新しいサポートは、既存の動作には影響しません。GRPCクライアントは、引き続き GRPCエージェントに直接接続できます。代わりに NGINX サーバに接続することもできます。NGINX サーバは、プロキシとして、GRPC 要求を GRPCエージェントに送ります。このようなリダイレクトを行うと、追加の要求応答遅延が発生したと見なされることに注意してください。
すべてのサーバーとクライアントの認証は、NGINX によって処理されます。GRPC を有効にして、NGINX サーバー証明書やクライアント証明書を構成するだけで十分です。
grpc 機能を有効にします。
NX- API 証明書を準備します。詳細については、「NX-API CLI の使用」を参照してください。
コマンドまたはアクション | 目的 | |
---|---|---|
ステップ 1 |
configure terminal 例:
|
構成モードに入ります。 |
ステップ 2 |
feature nxapi 例:
|
nxapi 機能を有効にします。 |
ステップ 3 |
nxapi certificate httpscrt certfile cert-file 例:
|
証明書ファイルを構成します。 |
ステップ 4 |
nxapi certificate httpscrt keyfile key-file password <password> 例:
|
キーファイルを構成します。 |
ステップ 5 |
nxapi certificate enable 例:
|
証明書認証を有効にします。 |
ステップ 6 |
(任意) crypto ca trustpoint <trustpoint> 例:
|
(任意)
サーバ認証用のトラストポイントを作成します。 |
ステップ 7 |
(任意) crypto ca authenticate <trustpoint> 例:
|
(任意)
クライアントルート証明書をトラストポイントにインポートします。 |
ステップ 8 |
(任意) nxapi client certificate authentication 例:
|
(任意)
クライアント証明書認証を有効にします。 |
Cisco NX-OS デバイスで、show feature grpc コマンドを入力してエージェントの構成を確認します。
gRPCエージェントのステータスを表示するには、 show feature コマンドを使用します。
switch-1# show feature | grep grpc
restconf 1 enabled
switch-1#
クライアント システムから、スイッチの管理ポートに ping を実行して、スイッチが到達可能であることを確認します。
bash-4.3# cd /volatile/ bash-4.3# ls /volatile -al
…
-rw-rw-rw- 1 root root 103412 Jun 21 16:14 grpc-internal-log
…
tmtrace.bin -f gnmi-logs gnmi-events gnmi-errors following are available 2.
Usage:
bash-4.3# tmtrace.bin -d gnmi-events | tail -30 Gives the last 30
…
[06/21/19 15:58:38.969 PDT f8f 3133] [3981658944][tm_transport_internal.c:43] dn: Cisco-NX-OS-device:System/cdp-items, sub_id: 0,
sub_id_str: 2329, dc_start_time: 0, length: 124, sync_response:1
[06/21/19 15:58:43.210 PDT f90 3133] [3621780288][tm_ec_yang_data_processor.c:93] TM_EC: [Y] Data received for 2799743488: 49
{
"cdp-items": {
"inst-items": {
"if-items": {
"If-list": [
{
"id": "mgmt0",
"ifstats-items": {
"v2Sent": "74",
"validV2Rcvd": "79"
}
}
]
}
}
}
} [06/21/19 15:58:43.210 PDT f91 3133] [3981658944][tm_transport_internal.c:43] dn: Cisco-NX-OS-device:System/cdp-items, sub_id: 0,
sub_id_str: 2329, dc_start_time: 0, length: 141, sync_response:1
[06/21/19 15:59:01.341 PDT f92 3133] [3981658944][tm_transport_internal.c:43] dn:
Cisco-NX-OS-device:System/intf-items, sub_id:
4091, sub_id_str: , dc_start_time: 1561157935518, length: 3063619, sync_response:0 [06/21/19 15:59:03.933 PDT f93 3133] [3981658944][tm_transport_internal.c:43] dn:
Cisco-NX-OS-device:System/cdp-items, sub_id:
4091, sub_id_str: , dc_start_time: 1561157940881, length: 6756, sync_response:0 [06/21/19 15:59:03.940 PDT f94 3133] [3981658944][tm_transport_internal.c:43] dn:
Cisco-NX-OS-device:System/lldp-items, sub_id:
/opt/mtx/conf/mtxlogger.cfg を修正して構成を変更します。
優先フィルタを切り替えるには、「診断と有用性」のセクションを参照してください。
feature grpc を無効にし、それから有効にします。
/volatile ディレクトリには、mtx-internal.log があります。ログは時間の経過とともにロールオーバーされるため、ロールオーバーしてしまう前にログをダウンロードしてください。
bash-4.3# cd /volatile/ bash-4.3# ls /volatile -al
…
-rw-r--r-- 1 root root 24 Jun 21 14:44 mtx-internal-19-06-21-14-46-21.log
-rw-r--r-- 1 root root 24 Jun 21 14:46 mtx-internal-19-06-21-14-46-46.log
-rw-r--r-- 1 root root 175 Jun 21 15:11 mtx-internal-19-06-21-15-11-57.log
-rw-r--r-- 1 root root 175 Jun 21 15:12 mtx-internal-19-06-21-15-12-28.log
-rw-r--r-- 1 root root 175 Jun 21 15:13 mtx-internal-19-06-21-15-13-17.log
-rw-r--r-- 1 root root 175 Jun 21 15:13 mtx-internal-19-06-21-15-13-42.log
-rw-r--r-- 1 root root 24 Jun 21 15:13 mtx-internal-19-06-21-15-14-22.log
-rw-r--r-- 1 root root 24 Jun 21 15:14 mtx-internal-19-06-21-15-19-05.log
-rw-r--r-- 1 root root 24 Jun 21 15:19 mtx-internal-19-06-21-15-47-09.log
-rw-r--r-- 1 root root 24 Jun 21 15:47 mtx-internal.log