[Multi-AS Segment Routing 検証連載 #10] PCE を用いた SR-TE の一元管理

サマリ

  • Segment Routing Traffic Engineering(SR-TE)を一元管理可能な経路計算サーバである Path Computation Element(PCE)を紹介
  • SR-PCE を用いて PE へ SR Policy を送信し、SR-TE の一元管理を検証

この記事は Multi-AS Segment Routing 検証連載の第 10 回です。目次は こちら

概要

イノベーションセンターの三島です。 本記事では SR-TE を効率的に管理・運用するための実現手法である PCE を紹介し、PCE を用いた SR Policy の管理を検証します。

SR-TE の問題点と Path Computation Element(PCE)

SR-TE は様々な要件を実現するために使われます。 例えば、複数の利用者・複数のアプリケーションごとの目的に応じた Quality of Service(QoS)要件、 Service Function Chaining(SFC)要件、リンク利用率の要件などです。 これらの要件の中には帯域保証やリンク利用率の最適化など、ネットワーク全体の状態を把握したときにのみ真に最適なパスを計算できるものが存在します。 そのような複雑な要件を満たす SR Policy を各 PE ルーターで分散して計算するには限界があります。

一方で、SR-TE の実装には各 PE ルーターへの設定が必要です。 台数が増えるに従って設定作業のみならず、パスに用いる SID をはじめとしたパラメータの管理も複雑になります。

そこでコントローラーを用いて SR-TE を一元管理することにより、ネットワーク全体の状態を把握したうえでパスを計算し、かつ、設定項目を集約できることが期待されます。 このような SR-TE の一元管理を実現する技術として Path Computation Element(PCE)があります。

PCE は、歴史的には MPLS 網の TE を一元管理するために考案された技術であり、 RFC5440/8231/8281/8664 などで標準化されています。 一般的な PCE の構成を下記に示します。

PCE から SR-TE の経路を受け取るノードを Path Computation Client(PCC)と呼びます。 PCC は、PCE から Segment List や Policy 名、Color など、ある宛先に対する SR Policy を構成するための情報を受信し、SR-TE を実現します。

PCE と PCC の間は、SR ネットワークの LinkState の共有(図中緑部分の通信)と、作成した経路の共有(図中水色部分の通信)が行われます。 PCEP や BGP SR Policy は経路を state として、NETCONF は経路を config としてそれぞれ扱うことができます。

LinkState の共有

LinkState の共有には、BGP-LS という技術が用いられます。 BGP-LS とは、Multi-Protocol BGP(MP-BGP)を利用した LinkState の共有技術であり、RFC7752 で標準化されています。 MP-BGP の Address Family Identifier(AFI)16388、Sub-AFI(SAFI)71 を利用し、IS-IS や OSPF の LinkState を送信します。

PCE は BGP-LS により SR ネットワークの LinkState を収集することで、SR domain の トポロジーと SID 情報を入手し経路計算を実現します。

経路情報の共有

経路情報の共有には、BGP SR Policy、NETCONF の他に、Computation Element Communication Protocol(PCEP)という技術が用いられます。 PCEP とは、PCE-PCC 間や複数の PCE 間の通信を実現するプロトコルです。 TCP port 4189 を利用し、Segment List や SR Policy 名、Affinity など様々な情報を送受信できます。

なお、本記事では PCEP を利用して検証を実施します。

Stateless PCE と Stateful PCE

PCE には、発行済み の 経路(LSP / SR Policy)や帯域などの予約済みリソース、パス計算要求などの情報を管理しない Stateless PCE と、これらの情報を管理する Stateful PCE が存在します。 Stateful PCE は既存の予約済みリソースを管理するため、それらを条件として考慮した複雑な経路を計算することが可能となります。

Stateful PCE には、PCC からのリクエストに基づいた経路計算のみを行う Passive Stateful PCE と、自ら経路を発行し PCC へ送信する Active Stateful PCE が存在します。 Active Stateful PCE は新規 SR Policy の発行や既存 SR Policy の更新などの操作を実現できるため、SR Policy の集中的な管理に適しています。

次章では、Active Stateful PCE による SR Policy の集中的な管理を目的とし動作検証を行います。

検証

本章では、IOS XR に実装された SR-PCE 機能を利用し、Cisco/Juniper それぞれの PCC に SR Policy を送信します。 検証に使用するトポロジーは下記の通りです。

このトポロジーにおいて PCE から PE1/PE2 のそれぞれに SR Policy を送信し、下記の経路を実現します。

以降では、下記の手順で PCE による SR-TE の一元管理を検証します。

  1. BGP-LS ・ PCEP の設定: PCE ・ PCC のそれぞれに BGP-LS ・ PCEP を設定し、Active Stateful PCE による SR-TE の一元管理環境を構成
  2. SR Policy の設定: PCE に対し、送信する SR Policy を設定
  3. 動作確認: BGP-LS ・ PCEP セッション・ SR Policy の状態確認と Traceroute による動作確認

1. BGP-LS ・ PCEP の設定

PCE

BGP-LS
PE1 ・ PE2 向けの BGP-LS 設定を投入します。

※ 最低限1つのピアを設定すれば BGP-LS ですべての情報を受信し動作可能です。本検証では冗長化と Multi-vendor の相互接続検証を兼ねるため、双方に向けて設定します。

router bgp 65000
 bgp router-id 10.255.0.254
 address-family link-state link-state
 !
 neighbor 10.0.255.1
  remote-as 65000
  address-family link-state link-state
  !
 !
 neighbor 10.0.255.2
  remote-as 65000
  address-family link-state link-state
  !
 !
!

PCEP
PCEP の待ち受けアドレスを指定します。

※ IOS XR の SR-PCE 機能の仕様上、PCC 側が PCEP セッションに利用するアドレスは、BGP-LS の LinkState から参照可能な必要があるようです。そのため本検証環境では Loopback アドレスを PCEP セッションに利用します。

pce
 address ipv4 10.0.255.254

PCC/PE1(IOS XR)

BGP-LS IS-IS を TED に export し、BGP-LS で PCE へ広告します。

router isis 1
 distribute link-state instance-id 32
!
router bgp 65000
 address-family link-state link-state
 !
 neighbor 10.255.0.254
  remote-as 65000
  update-source Loopback0
  address-family link-state link-state
  !
 !
!

PCEP
PCC 機能を設定し、PCEP を利用可能にします。

segment-routing
 traffic-eng
  pcc
   source-address ipv4 10.255.0.1
   pce address ipv4 10.255.0.254

PCC/ PE2(Junos)

BGP-LS
IS-IS を TED に export し、BGP-LS で PCE へ広告します。

set policy-options policy-statement TE term 1 from family traffic-engineering
set policy-options policy-statement TE term 1 then accept

set protocols mpls traffic-engineering database import policy TE

set routing-options autonomous-system 65000
set protocols bgp group SR-PCE type internal
set protocols bgp group SR-PCE local-address 10.255.0.2
set protocols bgp group SR-PCE family traffic-engineering unicast
set protocols bgp group SR-PCE export TE
set protocols bgp group SR-PCE neighbor 10.255.0.254

PCEP
PCC 機能を設定し、PCEP を利用可能にします。

set protocols mpls lsp-external-controller pccd
set protocols source-packet-routing lsp-external-controller pccd
set protocols pcep pce SR-PCE local-address 10.255.0.2
set protocols pcep pce SR-PCE destination-ipv4-address 10.255.0.254
set protocols pcep pce SR-PCE pce-type active
set protocols pcep pce SR-PCE pce-type stateful
set protocols pcep pce SR-PCE lsp-provisioning
set protocols pcep pce SR-PCE spring-capability

2. SR Policy の設定(PCE)

PE1 から PE2、 PE2 から PE1 への各 SR-TE 経路を記述した SR Policy を設定します。

pce
 segment-routing
  traffic-eng
   segment-list name PE1-to-PE2
    index 1 mpls label 16003
    index 2 mpls label 16004
    index 3 mpls label 16002
   !
   segment-list name PE2-to-PE1
    index 1 mpls label 16004
    index 2 mpls label 16003
    index 3 mpls label 16001
   !
   peer ipv4 10.255.0.1
    policy PE1
     candidate-paths
      preference 1
       explicit segment-list PE1-to-PE2
       !
      !
     !
    !
   !
   peer ipv4 10.255.0.2
    policy PE2
     candidate-paths
      preference 1
       explicit segment-list PE2-to-PE1
       !
      !
     !
    !
   !
  !
 !
!

3. 動作確認

PCE

BGP-LS
BGP-LS による LinkState 受信を確認します。(出力が長いため一部省略)

RP/0/RP0/CPU0:pce#show bgp link-state link-state
Thu Oct 13 17:10:53.338 JST
BGP router identifier 10.255.0.254, local AS number 65000
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0x0   RD version: 339
BGP main routing table version 339
BGP NSR Initial initsync version 13 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs

Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Prefix codes: E link, V node, T IP reacheable route, S SRv6 SID, u/U unknown
              I Identifier, N local node, R remote node, L link, P prefix, S SID
              L1/L2 ISIS level-1/level-2, O OSPF, D direct, S static/peer-node
              a area-ID, l link-ID, t topology-ID, s ISO-ID,
              c confed-ID/ASN, b bgp-identifier, r router-ID, s SID
              i if-address, n nbr-address, o OSPF Route-type, p IP-prefix
              d designated router address
   Network            Next Hop            Metric LocPrf Weight Path
*>i[V][L2][I0x0][N[c65000][s0000.0aff.0001.00]]/264
                      10.255.0.2                    100      0 i
*>i[V][L2][I0x0][N[c65000][s0000.0aff.0002.00]]/264
                      10.255.0.2                    100      0 i
*>i[V][L2][I0x0][N[c65000][s0000.0aff.0003.00]]/264
                      10.255.0.2                    100      0 i
*>i[V][L2][I0x0][N[c65000][s0000.0aff.0004.00]]/264

<略>

PCEP
PCC とのセッションを確認します。 detail オプションを 利用することで PCEP で送受信されたメッセージの詳細を確認できます。

RP/0/RP0/CPU0:pce#show pce ipv4 peer detail
Thu Oct 13 16:55:22.855 JST

PCE's peer database:
--------------------
Peer address: 10.255.0.1
  State: Up
  Capabilities: Stateful, Segment-Routing, Update, Instantiation
  PCEP has been up for: 00:02:04
  PCEP session ID: local 0, remote 0
  Sending KA every 30 seconds
  Minimum acceptable KA interval: 20 seconds
  Peer timeout after 120 seconds
  Maximum SID Depth: 10
  Statistics:
    Keepalive messages: rx 4 tx 5
    Request messages:   rx     0 tx     0
    Reply messages:     rx     0 tx     0
    Error messages:     rx     0 tx     0
    Open messages:      rx     1 tx     1
    Report messages:    rx     4 tx     0
    Update messages:    rx     0 tx     0
    Initiate messages:  rx     0 tx     0
  Last PCError:
    Received: None
    Sent: None

Peer address: 10.255.0.2
  State: Up
  Capabilities: Stateful, Segment-Routing, Update, Instantiation
  PCEP has been up for: 00:00:49
  PCEP session ID: local 0, remote 0
  Sending KA every 30 seconds
  Minimum acceptable KA interval: 20 seconds
  Peer timeout after 120 seconds
  Maximum SID Depth: 5
  Statistics:
    Keepalive messages: rx 2 tx 2
    Request messages:   rx     0 tx     0
    Reply messages:     rx     0 tx     0
    Error messages:     rx     0 tx     0
    Open messages:      rx     1 tx     1
    Report messages:    rx     4 tx     0
    Update messages:    rx     0 tx     2
    Initiate messages:  rx     0 tx     1
  Last PCError:
    Received: None
    Sent: None

Stateful PCE として、それぞれの PE に送信済みの SR Policy を管理できていることを確認します。

RP/0/RP0/CPU0:pce#show pce lsp detail
Thu Oct 13 16:55:48.352 JST

PCE's tunnel database:
----------------------
PCC 10.255.0.1:

Tunnel Name: PE1
Color: 1
Interface Name: srte_c_1_ep_10.255.0.2
 LSPs:
  LSP[0]:
   source 10.255.0.1, destination 10.255.0.2, tunnel ID 4, LSP ID 2
   State: Admin up, Operation up
   Setup type: Segment Routing
   Binding SID: 24014
   Maximum SID Depth: 10
   Preference: 128
   Bandwidth: requested 0 kbps, applied 0 kbps
   Protection type: protected-preferred
   PCEP information:
     PLSP-ID 0x4, flags: D:0 S:0 R:0 A:1 O:1 C:1
   LSP Role: Single LSP
   State-sync PCE: None
   PCC: 10.255.0.1
   LSP is subdelegated to: None
   Reported path:
     Metric type: TE, Accumulated Metric 0
      SID[0]: Node, Label 16003, Address 10.255.0.3
      SID[1]: Node, Label 16004, Address 10.255.0.4
      SID[2]: Node, Label 16002, Address 10.255.0.2
   Computed path: (Local PCE)
     Computed Time: Wed Oct 12 20:25:43 JST 2022 (20:30:05 ago)
     Metric type: TE, Accumulated Metric 0
      SID[0]: Node, Label 16003, Address 10.255.0.3
      SID[1]: Node, Label 16004, Address 10.255.0.4
      SID[2]: Node, Label 16002, Address 10.255.0.2
   Recorded path:
     None
   Disjoint Group Information:
     None

PCC 10.255.0.2:

Tunnel Name: PE2
 LSPs:
  LSP[0]:
   source 10.255.0.2, destination 10.255.0.1, tunnel ID 4, LSP ID 0
   State: Admin up, Operation active
   Setup type: Segment Routing
   Binding SID: None
   Maximum SID Depth: 5
   Preference: 100
   Bandwidth: requested 0 kbps, applied 0 kbps
   Protection type: protected-preferred
   PCEP information:
     PLSP-ID 0x3, flags: D:1 S:0 R:0 A:1 O:2 C:1
   LSP Role: Single LSP
   State-sync PCE: None
   PCC: 10.255.0.2
   LSP is subdelegated to: None
   Reported path:
     Metric type: TE, Accumulated Metric 0
      SID[0]: Node, Label 16004, Address 10.255.0.4
      SID[1]: Node, Label 16003, Address 10.255.0.3
      SID[2]: Node, Label 16001, Address 10.255.0.1
   Computed path: (Local PCE)
     Computed Time: Thu Oct 13 16:55:09 JST 2022 (00:00:39 ago)
     Metric type: TE, Accumulated Metric 0
      SID[0]: Node, Label 16004, Address 10.255.0.4
      SID[1]: Node, Label 16003, Address 10.255.0.3
      SID[2]: Node, Label 16001, Address 10.255.0.1
   Recorded path:
      SR IPv4 Node 16004, Node-id: 10.255.0.4, flags 0x0
      SR IPv4 Node 16003, Node-id: 10.255.0.3, flags 0x0
      SR IPv4 Node 16001, Node-id: 10.255.0.1, flags 0x0
   Disjoint Group Information:
     None

PCC: IOS XR(PE1)

PCEP
PCEP セッションを確認します。

RP/0/RP0/CPU0:pe1#show segment-routing traffic-eng pcc ipv4 peer
Thu Oct 13 16:57:04.343 JST

PCC's peer database:
--------------------

Peer address: 10.255.0.254,
  Precedence: 255, (best PCE)
  State up
  Capabilities: Stateful, Update, Segment-Routing, Instantiation

PCE から受信した SR Policy を確認します。

RP/0/RP0/CPU0:pe1#show segment-routing traffic-eng policy
Thu Oct 13 16:58:13.189 JST

SR-TE policy database
---------------------

Color: 1, End-point: 10.255.0.2
  Name: srte_c_1_ep_10.255.0.2
  Status:
    Admin: up  Operational: up for 20:32:28 (since Oct 12 20:25:44.366)
  Candidate-paths:
    Preference: 128 (PCEP) (active)
      Name: PE1
      Requested BSID: dynamic
      PCC info:
        Symbolic name: PE1
        PLSP-ID: 4
        Protection Type: protected-preferred
        Maximum SID Depth: 10
      Dynamic (pce) (valid)
        Metric Type: TE,   Path Accumulated Metric: 0
          16003 [Prefix-SID, 10.255.0.3]
          16004 [Prefix-SID, 10.255.0.4]
          16002 [Prefix-SID, 10.255.0.2]
  Attributes:
    Binding SID: 24014
    Forward Class: Not Configured
    Steering labeled-services disabled: no
    Steering BGP disabled: no
    IPv6 caps enable: yes
    Invalidation drop enabled: no

Traceroute
Traceroute により SR Policy による TE を確認します。

RP/0/RP0/CPU0:pe1# traceroute 192.168.1.254 vrf 100
Thu Oct 13 16:58:35.907 JST

Type escape sequence to abort.
Tracing the route to 192.168.1.254

 1  10.0.0.2 [MPLS: Labels 16004/16002/16 Exp 0] 12 msec  3 msec  10 msec
 2  10.0.2.2 [MPLS: Labels 16002/16 Exp 0] 2 msec  7 msec  3 msec
 3  192.168.1.254 6 msec  11 msec  2 msec

PCC: Junos(PE2)

PCEP
PCE とのセッションを確認します。

user@pe2> show path-computation-client active-pce brief

PCE SR-PCE
--------------------------------------------
General
    PCE IP address           : 10.255.0.254
    Local IP address         : 10.255.0.2
    Priority                 : 0
    PCE status               : PCE_STATE_UP
    Session type             : PCE_TYPE_STATEFULACTIVE
    LSP provisioning allowed : On
    P2MP LSP report allowed  : Off
    P2MP LSP update allowed  : Off
    P2MP LSP init allowed    : Off
    PCE-mastership           : main
    PCE Traffic Steering     : Off

Counters
    PCReqs              Total: 0            last 5min: 0            last hour: 0
    PCReps              Total: 0            last 5min: 0            last hour: 0
    PCRpts              Total: 4            last 5min: 4            last hour: 4
    PCUpdates           Total: 2            last 5min: 2            last hour: 2
    PCCreates           Total: 1            last 5min: 1            last hour: 1

Timers
    Local  Keepalive timer:   30 [s]  Dead timer:  120 [s]  LSP cleanup timer:   60 [s]
    Remote Keepalive timer:   30 [s]  Dead timer:  120 [s]  LSP cleanup timer:    0 [s]

Errors
    PCErr-recv
    PCErr-sent
    PCE-PCC-NTFS
    PCC-PCE-NTFS

Pcupdate empty ero action counters
    Send-err               : 0
    Tear down path         : 0
    Routing decision       : 0
    Routing decision failed: 0

PCE から受信した SR Policy を確認します。

user@pe2> show spring-traffic-engineering lsp detail
Name: PE2
  Tunnel-source: Path computation element protocol(PCEP)
  Tunnel Forward Type: SRMPLS
  To: 10.255.0.1
  State: Up
    Path Status: NA
    Outgoing interface: NA
    Auto-translate status: Disabled Auto-translate result: N/A
    BFD status: N/A BFD name: N/A
    Segment ID : 128
    ERO Valid: true
      SR-ERO hop count: 3
        Hop 1 (Strict):
          NAI: IPv4 Node ID, Node address: 10.255.0.4
          SID type: 20-bit label, Value: 16004
        Hop 2 (Strict):
          NAI: IPv4 Node ID, Node address: 10.255.0.3
          SID type: 20-bit label, Value: 16003
        Hop 3 (Strict):
          NAI: IPv4 Node ID, Node address: 10.255.0.1
          SID type: 20-bit label, Value: 16001


Total displayed LSPs: 1 (Up: 1, Down: 0)

Traceroute
Traceroute により SR Policy による TE を確認します。

user@pe2> traceroute 192.168.0.254 routing-instance 100
traceroute to 192.168.0.254 (192.168.0.254), 30 hops max, 52 byte packets
 1  10.0.3.2 (10.0.3.2)  2.653 ms  2.063 ms  1.805 ms
     MPLS Label=16003 CoS=0 TTL=1 S=0
     MPLS Label=16001 CoS=0 TTL=1 S=0
     MPLS Label=24004 CoS=0 TTL=1 S=1
 2  10.0.2.1 (10.0.2.1)  2.305 ms  2.208 ms  2.083 ms
     MPLS Label=16001 CoS=0 TTL=1 S=0
     MPLS Label=24004 CoS=0 TTL=2 S=1
 3  10.0.0.1 (10.0.0.1)  3.548 ms *  4.584 ms

上記より、PCE による SR Policy の一元管理(送信&状態管理)と、PCC での TE が確認できました。

まとめ

本記事では、PCE を構築し、PCEP を用いた SR Policy の送信と SR-TE の実現を検証しました。 PCE を活用することで、大規模な SR 網の状態を一元管理し、効率的に運用することが可能となります。

次回は各社 PCE 実装を用いた SR Policy の発行方法を検証します。

(2022/11/28 追記) 公開しました:[Multi-AS Segment Routing 検証連載 #11] PCE 実装の検証

© NTT Communications Corporation All Rights Reserved.