mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-05 07:27:21 +00:00
AWS: Remove blackhole routes in our managed range
Blackhole routes otherwise acccumulate unboundedly. We also are careful to ensure that we do so only within the managed range, which requires enlisting the help of the routecontroller. Fix #47524
This commit is contained in:
@@ -118,7 +118,9 @@ func (rc *RouteController) reconcile(nodes []*v1.Node, routes []*cloudprovider.R
|
||||
// routeMap maps routeTargetNode->route
|
||||
routeMap := make(map[types.NodeName]*cloudprovider.Route)
|
||||
for _, route := range routes {
|
||||
routeMap[route.TargetNode] = route
|
||||
if route.TargetNode != "" {
|
||||
routeMap[route.TargetNode] = route
|
||||
}
|
||||
}
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
@@ -171,8 +173,8 @@ func (rc *RouteController) reconcile(nodes []*v1.Node, routes []*cloudprovider.R
|
||||
}
|
||||
for _, route := range routes {
|
||||
if rc.isResponsibleForRoute(route) {
|
||||
// Check if this route applies to a node we know about & has correct CIDR.
|
||||
if nodeCIDRs[route.TargetNode] != route.DestinationCIDR {
|
||||
// Check if this route is a blackhole, or applies to a node we know about & has an incorrect CIDR.
|
||||
if route.Blackhole || (nodeCIDRs[route.TargetNode] != route.DestinationCIDR) {
|
||||
wg.Add(1)
|
||||
// Delete the route.
|
||||
go func(route *cloudprovider.Route, startTime time.Time) {
|
||||
|
||||
@@ -97,12 +97,12 @@ func TestReconcile(t *testing.T) {
|
||||
&node2,
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
@@ -114,11 +114,11 @@ func TestReconcile(t *testing.T) {
|
||||
&node2,
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
@@ -131,8 +131,8 @@ func TestReconcile(t *testing.T) {
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
@@ -144,14 +144,14 @@ func TestReconcile(t *testing.T) {
|
||||
&node2,
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-03", "node-3", "10.120.2.0/24"},
|
||||
{cluster + "-04", "node-4", "10.120.3.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
{cluster + "-03", "node-3", "10.120.2.0/24", false},
|
||||
{cluster + "-04", "node-4", "10.120.3.0/24", false},
|
||||
},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
@@ -163,12 +163,12 @@ func TestReconcile(t *testing.T) {
|
||||
&node2,
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-03", "node-3", "10.120.2.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-03", "node-3", "10.120.2.0/24", false},
|
||||
},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
@@ -181,11 +181,48 @@ func TestReconcile(t *testing.T) {
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24"},
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, false},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, nodeNoCidr}}),
|
||||
},
|
||||
// 2 nodes, an extra blackhole route in our range
|
||||
{
|
||||
nodes: []*v1.Node{
|
||||
&node1,
|
||||
&node2,
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
{cluster + "-03", "", "10.120.2.0/24", true},
|
||||
},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
},
|
||||
// 2 nodes, an extra blackhole route not in our range
|
||||
{
|
||||
nodes: []*v1.Node{
|
||||
&node1,
|
||||
&node2,
|
||||
},
|
||||
initialRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
{cluster + "-03", "", "10.1.2.0/24", true},
|
||||
},
|
||||
expectedRoutes: []*cloudprovider.Route{
|
||||
{cluster + "-01", "node-1", "10.120.0.0/24", false},
|
||||
{cluster + "-02", "node-2", "10.120.1.0/24", false},
|
||||
{cluster + "-03", "", "10.1.2.0/24", true},
|
||||
},
|
||||
expectedNetworkUnavailable: []bool{true, true},
|
||||
clientset: fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{node1, node2}}),
|
||||
},
|
||||
}
|
||||
for i, testCase := range testCases {
|
||||
cloud := &fakecloud.FakeCloud{RouteMap: make(map[string]*fakecloud.FakeRoute)}
|
||||
|
||||
Reference in New Issue
Block a user