mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Merge pull request #82800 from Random-Liu/fix-routes
Only set ipv4/ipv6 routes when there is corresponding CIDR.
This commit is contained in:
commit
4097a99fd7
@ -79,10 +79,7 @@ const (
|
|||||||
"ipam": {
|
"ipam": {
|
||||||
"type": "host-local",
|
"type": "host-local",
|
||||||
"ranges": [%s],
|
"ranges": [%s],
|
||||||
"routes": [
|
"routes": [%s]
|
||||||
{ "dst": "%s" },
|
|
||||||
{ "dst": "%s" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}`
|
}`
|
||||||
)
|
)
|
||||||
@ -281,7 +278,7 @@ func (plugin *kubenetNetworkPlugin) Event(name string, details map[string]interf
|
|||||||
//setup hairpinMode
|
//setup hairpinMode
|
||||||
setHairpin := plugin.hairpinMode == kubeletconfig.HairpinVeth
|
setHairpin := plugin.hairpinMode == kubeletconfig.HairpinVeth
|
||||||
|
|
||||||
json := fmt.Sprintf(NET_CONFIG_TEMPLATE, BridgeName, plugin.mtu, network.DefaultInterfaceName, setHairpin, plugin.getRangesConfig(), zeroCIDRv4, zeroCIDRv6)
|
json := fmt.Sprintf(NET_CONFIG_TEMPLATE, BridgeName, plugin.mtu, network.DefaultInterfaceName, setHairpin, plugin.getRangesConfig(), plugin.getRoutesConfig())
|
||||||
klog.V(4).Infof("CNI network config set to %v", json)
|
klog.V(4).Infof("CNI network config set to %v", json)
|
||||||
plugin.netConfig, err = libcni.ConfFromBytes([]byte(json))
|
plugin.netConfig, err = libcni.ConfFromBytes([]byte(json))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -842,6 +839,29 @@ func (plugin *kubenetNetworkPlugin) getRangesConfig() string {
|
|||||||
return strings.Join(ranges[:], ",")
|
return strings.Join(ranges[:], ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// given a n cidrs assigned to nodes,
|
||||||
|
// create bridge routes configuration that conforms to them
|
||||||
|
func (plugin *kubenetNetworkPlugin) getRoutesConfig() string {
|
||||||
|
var (
|
||||||
|
routes []string
|
||||||
|
hasV4, hasV6 bool
|
||||||
|
)
|
||||||
|
for _, thisCIDR := range plugin.podCIDRs {
|
||||||
|
if thisCIDR.IP.To4() != nil {
|
||||||
|
hasV4 = true
|
||||||
|
} else {
|
||||||
|
hasV6 = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if hasV4 {
|
||||||
|
routes = append(routes, fmt.Sprintf(`{"dst": "%s"}`, zeroCIDRv4))
|
||||||
|
}
|
||||||
|
if hasV6 {
|
||||||
|
routes = append(routes, fmt.Sprintf(`{"dst": "%s"}`, zeroCIDRv6))
|
||||||
|
}
|
||||||
|
return strings.Join(routes, ",")
|
||||||
|
}
|
||||||
|
|
||||||
func (plugin *kubenetNetworkPlugin) addPodIP(id kubecontainer.ContainerID, ip string) {
|
func (plugin *kubenetNetworkPlugin) addPodIP(id kubecontainer.ContainerID, ip string) {
|
||||||
plugin.mu.Lock()
|
plugin.mu.Lock()
|
||||||
defer plugin.mu.Unlock()
|
defer plugin.mu.Unlock()
|
||||||
|
@ -18,6 +18,7 @@ package kubenet
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -312,4 +313,33 @@ func TestTearDownWithoutRuntime(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetRoutesConifg(t *testing.T) {
|
||||||
|
for _, test := range []struct {
|
||||||
|
cidrs []string
|
||||||
|
routes string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
cidrs: []string{"10.0.0.1/24"},
|
||||||
|
routes: `{"dst": "0.0.0.0/0"}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cidrs: []string{"2001:4860:4860::8888/32"},
|
||||||
|
routes: `{"dst": "::/0"}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cidrs: []string{"2001:4860:4860::8888/32", "10.0.0.1/24"},
|
||||||
|
routes: `{"dst": "0.0.0.0/0"},{"dst": "::/0"}`,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
var cidrs []*net.IPNet
|
||||||
|
for _, c := range test.cidrs {
|
||||||
|
_, cidr, err := net.ParseCIDR(c)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
cidrs = append(cidrs, cidr)
|
||||||
|
}
|
||||||
|
fakeKubenet := &kubenetNetworkPlugin{podCIDRs: cidrs}
|
||||||
|
assert.Equal(t, test.routes, fakeKubenet.getRoutesConfig())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: add unit test for each implementation of network plugin interface
|
//TODO: add unit test for each implementation of network plugin interface
|
||||||
|
Loading…
Reference in New Issue
Block a user