From 929ca8b3539dc2e6650074640d4eec66ae733b99 Mon Sep 17 00:00:00 2001 From: Xu Liu Date: Thu, 13 Feb 2025 12:47:03 +0800 Subject: [PATCH] Fix test failure of ServiceExternalIP with LoadBalancerModeDSR Fixes: #6992 Signed-off-by: Xu Liu --- test/e2e/service_externalip_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/e2e/service_externalip_test.go b/test/e2e/service_externalip_test.go index aab57e935df..ce4e1d32f58 100644 --- a/test/e2e/service_externalip_test.go +++ b/test/e2e/service_externalip_test.go @@ -779,6 +779,26 @@ func testExternalIPAccess(t *testing.T, data *TestData) { externalIP, host, err := waitExternalIPConfigured(service) require.NoError(t, err) + // A route to the client IP is required for DSR mode. + nodeInfo := getNodeByName(host) + workerNodeIP := clusterInfo.nodes[nodeInfo.idx].ip() + addRouteToClientIPCmd := []string{"ip", "route", "replace", tt.clientIP, "via", workerNodeIP} + delRouteToClientIPCmd := []string{"ip", "route", "del", tt.clientIP, "via", workerNodeIP} + + for idx := range nodes { + node := nodes[idx] + if node == host { + continue + } + stdout, stderr, err := data.RunCommandFromAntreaPodOnNode(node, addRouteToClientIPCmd) + require.NoError(t, err, "Failed to add route to client IP on Node %s, stdout: %s, stderr: %s: cmd: %q", node, stdout, stderr, addRouteToClientIPCmd) + + defer func() { + stdout, stderr, err := data.RunCommandFromAntreaPodOnNode(node, delRouteToClientIPCmd) + assert.NoError(t, err, "Failed to delete route to client IP on Node %s, stdout: %s, stderr: %s", node, stdout, stderr) + }() + } + // Create a pod in a different netns with the same subnet of the external IP to mock as another Node in the same subnet. cmd, netns := getCommandInFakeExternalNetwork("sleep 3600", tt.clientIPMaskLen, tt.clientIP, tt.localIP)