diff options
Diffstat (limited to 'src/plugins/ioam/ioam_manycast_doc.md')
-rw-r--r-- | src/plugins/ioam/ioam_manycast_doc.md | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/plugins/ioam/ioam_manycast_doc.md b/src/plugins/ioam/ioam_manycast_doc.md new file mode 100644 index 00000000000..60321c58c31 --- /dev/null +++ b/src/plugins/ioam/ioam_manycast_doc.md @@ -0,0 +1,106 @@ +## IOAM and SRv6 for M-Anycast service selection {#ioam_manycast_doc} + +Anycast is often used to have a client choose one out of multiple servers. +This might be due to performance, scale, or availability reasons. +If a client initiates a TCP connection in an anycast scenario, +the TCP session is usually established with the server which answers the quickest. + +There are cases where it is desirable to: +- allow choosing the destination server not based on "fastest response time", +but based on the delay between server and client (e.g. for a streaming application). +- allow choosing the destination server based on other parameters, +such as server load information. +- ensure that all TCP connections of a particular client are hooked up to the same +server, i.e. that all TCP sessions following the first one are connected to the same server as the first session. + +M-anycast combines IOAM and Segment Routing v6 (SRv6) to provide for a solution: +- IOAM information is added to the initial TCP SYN packet to understand the transmit delay, as well as to the SYN-ACK packet to understand the return delay. +- SRv6 is used to steer traffic to the set of servers, rather than rely on anycast procedures. +Client and Servers can be left unchanged. +SRv6 and iOAM information is added and removed "in transit" + +Introduce M-Anycast Server as a solution component to leverage Segment Routing to steer +traffic, IOAM for optimized service selection. +M-Anycast Server: +- Hosts the Anycast address of the services +- Intercepts TCP-SYN, replicates the SYN and sends to a selected subset of all services using SRv6 spray policy +- Chooses an appropriate SYN-ACK using embedded in-band OAM data and forwards that SYN-ACK to the client with SRv6 header intact. The SRv6 header in the SYN-ACK received by the client is used to reach the selected server for subsequent packet exchange. + +VPP can function as an M-Anycast server. VPP can also be used as a IOAM and SRv6 decapsulating node at the application server edge. This allows for caching of IOAM and reattaching it to correlate the path performance across request-response (SYN/SYN-ACK) forwarding path. + +## Configuration +Example: Highly redundant video-caches as micro-services hosted in multiple public clouds. All Services have an IPv6 address allocated from anycast IPv6 prefix (db06::/64). +Here configuration to enable VPP as an M-Anycast server and IOAM caching/reattach node is provided. + +### M-Anycast Server +- Enable M-Anycast service selection using: + + + set ioam ip6 sr-tunnel-select [disable] [oneway|rtt] [wait_for_responses <n|default 3>] sr_localsid <IPv6 address> + +Example: + + + set ioam ip6 sr-tunnel-select oneway sr_localsid db0a::2 + +- Enable IOAM tracing. Override node for selected traffic processing +Example: +To enable M-Anycast service selection with IOAM tracing enabled for db06::/64 prefix and on the return path to process service selection for SRv6 localsid db0a::2: + + + classify table acl-miss-next ip6-node ip6-lookup mask hex 000000000000ffffffffffffffff0000 buckets 2 skip 2 match 1 + + classify session acl-hit-next ip6-node ip6-add-syn-hop-by-hop table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db060000000000000000 ioam-encap anycast + + classify session acl-hit-next ip6-node ip6-lookup table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db0a0000000000000000 ioam-decap anycast + + set int input acl intfc GigabitEthernet0/4/0 ip6-table 0 + set int input acl intfc GigabitEthernet0/5/0 ip6-table 0 + set ioam-trace profile trace-type 0x09 trace-elts 3 trace-tsp 1 node-id 0x1 + set ioam rewrite trace + + +- Enable SRv6 spray policy for steering traffic towards M-Anycast prefix. +Example: +To steer anycast prefix db06::/64 towards servers with address db07::1, db08::1, db09::1: + + + sr policy add bsid db11::2 next db07::1 insert spray + sr policy mod add sl bsid db11::2 next db08::1 + sr policy mod add sl bsid db11::2 next db09::1 + sr steer l3 db06::/64 via sr policy bsid db11::2 + sr localsid address db0a::2 behavior end + + +### IOAM Caching/reattach at application service edge +- Enable IOAM data caching + + + set ioam ip6 cache sr_localsid <ip6 address> [disable] + +Example: + + + set ioam ip6 cache sr_localsid db07::1 + +- Enable IOAM decap +Example: To decap IOAM and cache the data towards db06::/64 and reinsert the data towards db04::/64: + + + classify table acl-miss-next ip6-node ip6-lookup mask hex 000000000000ffffffffffffffff0000 buckets 2 skip 2 match 1 + + classify session acl-hit-next ip6-node ip6-lookup table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db060000000000000000 ioam-decap anycast + + classify session acl-hit-next ip6-node ip6-lookup table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db070000000000000000 ioam-decap anycast + + classify session acl-hit-next ip6-node ip6-add-from-cache-hop-by-hop table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db040000000000000000 ioam-encap anycast-response + + set int input acl intfc GigabitEthernet0/4/0 ip6-table 0 + + set ioam-trace profile trace-type 0x1f trace-elts 4 trace-tsp 1 node-id 0x3 app-data 0x1234 + +- Enable SRv6 localsid processing to strip SRv6 header before forwarding towards application service + + + sr localsid address db07::1 behavior end psp + |