We would like to use the nse-icmp-responder and nsc endpoint kernel2kernel example for NSM upgrade tests. Our tests fail, the connection is OK before 'helm upgrade', but after the upgrade the connection between NSE and NSC is usually lost. (NSE and NSC are not upgraded, only the NSM infrastructure below them.) The behavior is not entirely deterministic, in some cases multiple interfaces appear in the NSE after the upgrade with conflicting IP addresses.
For example:
Before the upgrade (ping OK):
NSC:
kubectl exec -n nsm endpoint-nsc-7789d64bcc-wc7p5 -- ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if194402: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1430 qdisc noqueue state UP
link/ether 66:82:28:2c:47:4c brd ff:ff:ff:ff:ff:ff
inet 192.168.215.162/32 scope global eth0
valid_lft forever preferred_lft forever
194404: nsm-1@if194403: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether e6:0b:fb:1a:cf:54 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.97/32 scope global nsm-1
valid_lft forever preferred_lft forever
inet6 fe80::e40b:fbff:fe1a:cf54/64 scope link
valid_lft forever preferred_lft forever
NSE:
kubectl exec -n nsm endpoint-nse-5bd8b66987-bwj4l -- ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if194401: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1430 qdisc noqueue state UP
link/ether 6e:b7:f4:fc:1f:88 brd ff:ff:ff:ff:ff:ff
inet 192.168.215.142/32 scope global eth0
valid_lft forever preferred_lft forever
194406: icmp-respo-f913@if194405: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether fa:3c:f2:96:2d:f2 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.96/32 scope global icmp-respo-f913
valid_lft forever preferred_lft forever
inet6 fe80::f83c:f2ff:fe96:2df2/64 scope link
valid_lft forever preferred_lft forever
After the upgrade (connection lost):
NSC:
kubectl exec -n nsm endpoint-nsc-7789d64bcc-wc7p5 -- ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if194402: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1430 qdisc noqueue state UP
link/ether 66:82:28:2c:47:4c brd ff:ff:ff:ff:ff:ff
inet 192.168.215.162/32 scope global eth0
valid_lft forever preferred_lft forever
194409: nsm-1@if194408: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether b6:9e:d6:9b:ec:b3 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.97/32 scope global nsm-1
valid_lft forever preferred_lft forever
inet 172.16.1.99/32 scope global nsm-1
valid_lft forever preferred_lft forever
inet6 fe80::b49e:d6ff:fe9b:ecb3/64 scope link
valid_lft forever preferred_lft forever
NSE:
kubectl exec -n nsm endpoint-nse-5bd8b66987-bwj4l -- ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if194401: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1430 qdisc noqueue state UP
link/ether 6e:b7:f4:fc:1f:88 brd ff:ff:ff:ff:ff:ff
inet 192.168.215.142/32 scope global eth0
valid_lft forever preferred_lft forever
194406: icmp-respo-f913@if194405: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether fa:3c:f2:96:2d:f2 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.96/32 scope global icmp-respo-f913
valid_lft forever preferred_lft forever
inet6 fe80::f83c:f2ff:fe96:2df2/64 scope link
valid_lft forever preferred_lft forever
194411: icmp-respo-57e2@if194410: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether de:61:0c:9d:e4:d3 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.96/32 scope global icmp-respo-57e2
valid_lft forever preferred_lft forever
inet 172.16.1.98/32 scope global icmp-respo-57e2
valid_lft forever preferred_lft forever
inet6 fe80::dc61:cff:fe9d:e4d3/64 scope link
valid_lft forever preferred_lft forever
After a minute:
NSC:
kubectl exec -n nsm endpoint-nsc-7789d64bcc-wc7p5 -- ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if194402: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1430 qdisc noqueue state UP
link/ether 66:82:28:2c:47:4c brd ff:ff:ff:ff:ff:ff
inet 192.168.215.162/32 scope global eth0
valid_lft forever preferred_lft forever
194414: nsm-1@if194413: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether fe:fe:22:ea:b5:88 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.97/32 scope global nsm-1
valid_lft forever preferred_lft forever
inet 172.16.1.101/32 scope global nsm-1
valid_lft forever preferred_lft forever
inet6 fe80::fcfe:22ff:feea:b588/64 scope link
valid_lft forever preferred_lft forever
NSE:
kubectl exec -n nsm endpoint-nse-5bd8b66987-bwj4l -- ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if194401: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1430 qdisc noqueue state UP
link/ether 6e:b7:f4:fc:1f:88 brd ff:ff:ff:ff:ff:ff
inet 192.168.215.142/32 scope global eth0
valid_lft forever preferred_lft forever
194406: icmp-respo-f913@if194405: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether fa:3c:f2:96:2d:f2 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.96/32 scope global icmp-respo-f913
valid_lft forever preferred_lft forever
inet6 fe80::f83c:f2ff:fe96:2df2/64 scope link
valid_lft forever preferred_lft forever
194411: icmp-respo-57e2@if194410: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether de:61:0c:9d:e4:d3 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.96/32 scope global icmp-respo-57e2
valid_lft forever preferred_lft forever
inet 172.16.1.98/32 scope global icmp-respo-57e2
valid_lft forever preferred_lft forever
inet6 fe80::dc61:cff:fe9d:e4d3/64 scope link
valid_lft forever preferred_lft forever
194416: icmp-respo-6c1c@if194415: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9000 qdisc noqueue state UP qlen 1000
link/ether e2:c0:69:72:63:60 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.96/32 scope global icmp-respo-6c1c
valid_lft forever preferred_lft forever
inet 172.16.1.100/32 scope global icmp-respo-6c1c
valid_lft forever preferred_lft forever
inet6 fe80::e0c0:69ff:fe72:6360/64 scope link
valid_lft forever preferred_lft forever
Images used:
- cmd-nse-icmp-responder 1.0.0
- cmd-nsc 1.0.0
- nsmgr 1.0.0
- registry-memory 1.0.0
- forwarder-vpp 1.0.0
kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.1", GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192", GitTreeState:"clean", BuildDate:"2021-05-12T14:18:45Z", GoVersion:"go1.16.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.4", GitCommit:"ec2760d6d916781de466541a6babb4309766c995", GitTreeState:"clean", BuildDate:"2021-02-27T17:18:03Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}
helm version
version.BuildInfo{Version:"v3.6.0", GitCommit:"7f2df6467771a75f5646b7f12afb408590ed1755", GitTreeState:"clean", GoVersion:"go1.16.3"}