1
0
mirror of https://github.com/rancher/rke.git synced 2025-08-10 03:08:50 +00:00

Support to config Flannel backend

- Add `flannel_backend_port` and `canal_flannel_backend_port` to config
the port of Flannel
- Add `flanneld_backend_vni` and `canal_flannel_backend_vni` to config
the VxLan network identify of Flannel
This commit is contained in:
Frank Mai 2019-04-13 22:43:34 +08:00 committed by Alena Prokharchyk
parent 5660fd44d3
commit 471146b25c
4 changed files with 71 additions and 13 deletions

View File

@ -11,7 +11,7 @@ import (
"github.com/rancher/rke/log" "github.com/rancher/rke/log"
"github.com/rancher/rke/services" "github.com/rancher/rke/services"
"github.com/rancher/rke/templates" "github.com/rancher/rke/templates"
v3 "github.com/rancher/types/apis/management.cattle.io/v3" "github.com/rancher/types/apis/management.cattle.io/v3"
) )
const ( const (
@ -50,6 +50,10 @@ const (
DefaultEtcdHeartbeatIntervalValue = "500" DefaultEtcdHeartbeatIntervalValue = "500"
DefaultEtcdElectionTimeoutName = "election-timeout" DefaultEtcdElectionTimeoutName = "election-timeout"
DefaultEtcdElectionTimeoutValue = "5000" DefaultEtcdElectionTimeoutValue = "5000"
DefaultFlannelBackendVxLan = "vxlan"
DefaultFlannelBackendVxLanPort = "8472"
DefaultFlannelBackendVxLanVNI = "1"
) )
type ExternalFlags struct { type ExternalFlags struct {
@ -285,11 +289,15 @@ func (c *Cluster) setClusterNetworkDefaults() {
} }
case FlannelNetworkPlugin: case FlannelNetworkPlugin:
networkPluginConfigDefaultsMap = map[string]string{ networkPluginConfigDefaultsMap = map[string]string{
FlannelBackendType: "vxlan", FlannelBackendType: DefaultFlannelBackendVxLan,
FlannelBackendPort: DefaultFlannelBackendVxLanPort,
FlannelBackendVxLanNetworkIdentify: DefaultFlannelBackendVxLanVNI,
} }
case CanalNetworkPlugin: case CanalNetworkPlugin:
networkPluginConfigDefaultsMap = map[string]string{ networkPluginConfigDefaultsMap = map[string]string{
CanalFlannelBackendType: "vxlan", CanalFlannelBackendType: DefaultFlannelBackendVxLan,
CanalFlannelBackendPort: DefaultFlannelBackendVxLanPort,
CanalFlannelBackendVxLanNetworkIdentify: DefaultFlannelBackendVxLanVNI,
} }
} }
if c.Network.CalicoNetworkProvider != nil { if c.Network.CalicoNetworkProvider != nil {

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"net" "net"
"strconv"
"strings" "strings"
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
@ -27,14 +28,16 @@ const (
CPPortListenContainer = "rke-cp-port-listener" CPPortListenContainer = "rke-cp-port-listener"
WorkerPortListenContainer = "rke-worker-port-listener" WorkerPortListenContainer = "rke-worker-port-listener"
KubeAPIPort = "6443" KubeAPIPort = "6443"
EtcdPort1 = "2379" EtcdPort1 = "2379"
EtcdPort2 = "2380" EtcdPort2 = "2380"
ScedulerPort = "10251" ScedulerPort = "10251"
ControllerPort = "10252" ControllerPort = "10252"
KubeletPort = "10250" KubeletPort = "10250"
KubeProxyPort = "10256" KubeProxyPort = "10256"
FlannetVXLANPortUDP = "8472" FlannelVxLanPort = 8472
FlannelVxLanNetworkIdentify = 1
ProtocolTCP = "TCP" ProtocolTCP = "TCP"
ProtocolUDP = "UDP" ProtocolUDP = "UDP"
@ -44,6 +47,10 @@ const (
FlannelNetworkPlugin = "flannel" FlannelNetworkPlugin = "flannel"
FlannelIface = "flannel_iface" FlannelIface = "flannel_iface"
FlannelBackendType = "flannel_backend_type" FlannelBackendType = "flannel_backend_type"
// FlannelBackendPort must be 4789 if using VxLan mode in the cluster with Windows nodes
FlannelBackendPort = "flannel_backend_port"
// FlannelBackendVxLanNetworkIdentify should be greater than or equal to 4096 if using VxLan mode in the cluster with Windows nodes
FlannelBackendVxLanNetworkIdentify = "flannel_backend_vni"
CalicoNetworkPlugin = "calico" CalicoNetworkPlugin = "calico"
CalicoCloudProvider = "calico_cloud_provider" CalicoCloudProvider = "calico_cloud_provider"
@ -51,6 +58,10 @@ const (
CanalNetworkPlugin = "canal" CanalNetworkPlugin = "canal"
CanalIface = "canal_iface" CanalIface = "canal_iface"
CanalFlannelBackendType = "canal_flannel_backend_type" CanalFlannelBackendType = "canal_flannel_backend_type"
// CanalFlannelBackendPort must be 4789 if using Flannel VxLan mode in the cluster with Windows nodes
CanalFlannelBackendPort = "canal_flannel_backend_port"
// CanalFlannelBackendVxLanNetworkIdentify should be greater than or equal to 4096 if using Flannel VxLan mode in the cluster with Windows nodes
CanalFlannelBackendVxLanNetworkIdentify = "canal_flannel_backend_vni"
WeaveNetworkPlugin = "weave" WeaveNetworkPlugin = "weave"
WeaveNetowrkAppName = "weave-net" WeaveNetowrkAppName = "weave-net"
@ -132,6 +143,15 @@ func (c *Cluster) deployNetworkPlugin(ctx context.Context) error {
} }
func (c *Cluster) doFlannelDeploy(ctx context.Context) error { func (c *Cluster) doFlannelDeploy(ctx context.Context) error {
vni, err := atoiWithDefault(c.Network.Options[FlannelBackendVxLanNetworkIdentify], FlannelVxLanNetworkIdentify)
if err != nil {
return err
}
port, err := atoiWithDefault(c.Network.Options[FlannelBackendPort], FlannelVxLanPort)
if err != nil {
return err
}
flannelConfig := map[string]interface{}{ flannelConfig := map[string]interface{}{
ClusterCIDR: c.ClusterCIDR, ClusterCIDR: c.ClusterCIDR,
Image: c.SystemImages.Flannel, Image: c.SystemImages.Flannel,
@ -139,6 +159,8 @@ func (c *Cluster) doFlannelDeploy(ctx context.Context) error {
FlannelInterface: c.Network.Options[FlannelIface], FlannelInterface: c.Network.Options[FlannelIface],
FlannelBackend: map[string]interface{}{ FlannelBackend: map[string]interface{}{
"Type": c.Network.Options[FlannelBackendType], "Type": c.Network.Options[FlannelBackendType],
"VNI": vni,
"Port": port,
}, },
RBACConfig: c.Authorization.Mode, RBACConfig: c.Authorization.Mode,
ClusterVersion: util.GetTagMajorVersion(c.Version), ClusterVersion: util.GetTagMajorVersion(c.Version),
@ -169,6 +191,15 @@ func (c *Cluster) doCalicoDeploy(ctx context.Context) error {
} }
func (c *Cluster) doCanalDeploy(ctx context.Context) error { func (c *Cluster) doCanalDeploy(ctx context.Context) error {
flannelVni, err := atoiWithDefault(c.Network.Options[CanalFlannelBackendVxLanNetworkIdentify], FlannelVxLanNetworkIdentify)
if err != nil {
return err
}
flannelPort, err := atoiWithDefault(c.Network.Options[CanalFlannelBackendPort], FlannelVxLanPort)
if err != nil {
return err
}
clientConfig := pki.GetConfigPath(pki.KubeNodeCertName) clientConfig := pki.GetConfigPath(pki.KubeNodeCertName)
canalConfig := map[string]interface{}{ canalConfig := map[string]interface{}{
ClientCertPath: pki.GetCertPath(pki.KubeNodeCertName), ClientCertPath: pki.GetCertPath(pki.KubeNodeCertName),
@ -184,6 +215,8 @@ func (c *Cluster) doCanalDeploy(ctx context.Context) error {
CanalInterface: c.Network.Options[CanalIface], CanalInterface: c.Network.Options[CanalIface],
FlannelBackend: map[string]interface{}{ FlannelBackend: map[string]interface{}{
"Type": c.Network.Options[CanalFlannelBackendType], "Type": c.Network.Options[CanalFlannelBackendType],
"VNI": flannelVni,
"Port": flannelPort,
}, },
} }
pluginYaml, err := c.getNetworkPluginManifest(canalConfig) pluginYaml, err := c.getNetworkPluginManifest(canalConfig)
@ -510,3 +543,16 @@ func getPortBindings(hostAddress string, portList []string) []nat.PortBinding {
} }
return portBindingList return portBindingList
} }
func atoiWithDefault(val string, defaultVal int) (int, error) {
if val == "" {
return defaultVal, nil
}
ret, err := strconv.Atoi(val)
if err != nil {
return 0, err
}
return ret, nil
}

View File

@ -198,7 +198,9 @@ data:
{ {
"Network": "{{.ClusterCIDR}}", "Network": "{{.ClusterCIDR}}",
"Backend": { "Backend": {
"Type": "{{.FlannelBackend.Type}}" "Type": "{{.FlannelBackend.Type}}",
"VNI": {{.FlannelBackend.VNI}},
"Port": {{.FlannelBackend.Port}}
} }
} }

View File

@ -75,7 +75,9 @@ data:
{ {
"Network": "{{.ClusterCIDR}}", "Network": "{{.ClusterCIDR}}",
"Backend": { "Backend": {
"Type": "{{.FlannelBackend.Type}}" "Type": "{{.FlannelBackend.Type}}",
"VNI": {{.FlannelBackend.VNI}},
"Port": {{.FlannelBackend.Port}}
} }
} }
--- ---