1
0
mirror of https://github.com/rancher/rke.git synced 2025-04-27 19:25:44 +00:00
rke/cluster/defaults.go

188 lines
6.9 KiB
Go
Raw Normal View History

package cluster
import (
"context"
"github.com/rancher/rke/k8s"
"github.com/rancher/rke/log"
"github.com/rancher/rke/services"
2018-02-26 16:27:32 +00:00
"github.com/rancher/types/apis/management.cattle.io/v3"
)
const (
2018-03-29 19:51:35 +00:00
DefaultServiceClusterIPRange = "10.43.0.0/16"
DefaultClusterCIDR = "10.42.0.0/16"
DefaultClusterDNSService = "10.43.0.10"
DefaultClusterDomain = "cluster.local"
DefaultClusterName = "local"
DefaultClusterSSHKeyPath = "~/.ssh/id_rsa"
2018-04-21 01:44:21 +00:00
DefaultK8sVersion = v3.DefaultK8s
2018-02-26 16:27:32 +00:00
2018-01-19 18:42:42 +00:00
DefaultSSHPort = "22"
DefaultDockerSockPath = "/var/run/docker.sock"
2017-12-14 21:56:19 +00:00
DefaultAuthStrategy = "x509"
2017-12-16 09:48:42 +00:00
DefaultAuthorizationMode = "rbac"
DefaultNetworkPlugin = "canal"
DefaultNetworkCloudProvider = "none"
2018-05-09 17:39:19 +00:00
DefaultIngressController = "nginx"
DefaultEtcdBackupCreationPeriod = "5m0s"
DefaultEtcdBackupRetentionPeriod = "24h"
)
func setDefaultIfEmptyMapValue(configMap map[string]string, key string, value string) {
if _, ok := configMap[key]; !ok {
configMap[key] = value
}
}
func setDefaultIfEmpty(varName *string, defaultValue string) {
if len(*varName) == 0 {
*varName = defaultValue
}
}
func (c *Cluster) setClusterDefaults(ctx context.Context) {
if len(c.SSHKeyPath) == 0 {
c.SSHKeyPath = DefaultClusterSSHKeyPath
}
// Default Path prefix
if len(c.PrefixPath) == 0 {
c.PrefixPath = "/"
}
for i, host := range c.Nodes {
if len(host.InternalAddress) == 0 {
c.Nodes[i].InternalAddress = c.Nodes[i].Address
}
if len(host.HostnameOverride) == 0 {
// This is a temporary modification
c.Nodes[i].HostnameOverride = c.Nodes[i].Address
}
if len(host.SSHKeyPath) == 0 {
c.Nodes[i].SSHKeyPath = c.SSHKeyPath
}
2018-01-19 18:42:42 +00:00
if len(host.Port) == 0 {
c.Nodes[i].Port = DefaultSSHPort
}
// For now, you can set at the global level only.
c.Nodes[i].SSHAgentAuth = c.SSHAgentAuth
}
if len(c.Authorization.Mode) == 0 {
c.Authorization.Mode = DefaultAuthorizationMode
}
if c.Services.KubeAPI.PodSecurityPolicy && c.Authorization.Mode != services.RBACAuthorizationMode {
log.Warnf(ctx, "PodSecurityPolicy can't be enabled with RBAC support disabled")
c.Services.KubeAPI.PodSecurityPolicy = false
}
if len(c.Ingress.Provider) == 0 {
c.Ingress.Provider = DefaultIngressController
}
if len(c.ClusterName) == 0 {
c.ClusterName = DefaultClusterName
}
if len(c.Version) == 0 {
c.Version = DefaultK8sVersion
}
if c.AddonJobTimeout == 0 {
c.AddonJobTimeout = k8s.DefaultTimeout
}
c.setClusterImageDefaults()
c.setClusterServicesDefaults()
c.setClusterNetworkDefaults()
}
func (c *Cluster) setClusterServicesDefaults() {
serviceConfigDefaultsMap := map[*string]string{
&c.Services.KubeAPI.ServiceClusterIPRange: DefaultServiceClusterIPRange,
&c.Services.KubeController.ServiceClusterIPRange: DefaultServiceClusterIPRange,
&c.Services.KubeController.ClusterCIDR: DefaultClusterCIDR,
&c.Services.Kubelet.ClusterDNSServer: DefaultClusterDNSService,
&c.Services.Kubelet.ClusterDomain: DefaultClusterDomain,
&c.Services.Kubelet.InfraContainerImage: c.SystemImages.PodInfraContainer,
&c.Authentication.Strategy: DefaultAuthStrategy,
&c.Services.KubeAPI.Image: c.SystemImages.Kubernetes,
&c.Services.Scheduler.Image: c.SystemImages.Kubernetes,
&c.Services.KubeController.Image: c.SystemImages.Kubernetes,
&c.Services.Kubelet.Image: c.SystemImages.Kubernetes,
&c.Services.Kubeproxy.Image: c.SystemImages.Kubernetes,
&c.Services.Etcd.Image: c.SystemImages.Etcd,
2018-05-09 17:39:19 +00:00
&c.Services.Etcd.Creation: DefaultEtcdBackupCreationPeriod,
&c.Services.Etcd.Retention: DefaultEtcdBackupRetentionPeriod,
}
for k, v := range serviceConfigDefaultsMap {
setDefaultIfEmpty(k, v)
}
}
func (c *Cluster) setClusterImageDefaults() {
2018-02-26 16:27:32 +00:00
imageDefaults, ok := v3.K8sVersionToRKESystemImages[c.Version]
if !ok {
imageDefaults = v3.K8sVersionToRKESystemImages[DefaultK8sVersion]
}
systemImagesDefaultsMap := map[*string]string{
2018-02-26 16:27:32 +00:00
&c.SystemImages.Alpine: imageDefaults.Alpine,
&c.SystemImages.NginxProxy: imageDefaults.NginxProxy,
&c.SystemImages.CertDownloader: imageDefaults.CertDownloader,
&c.SystemImages.KubeDNS: imageDefaults.KubeDNS,
&c.SystemImages.KubeDNSSidecar: imageDefaults.KubeDNSSidecar,
&c.SystemImages.DNSmasq: imageDefaults.DNSmasq,
&c.SystemImages.KubeDNSAutoscaler: imageDefaults.KubeDNSAutoscaler,
&c.SystemImages.KubernetesServicesSidecar: imageDefaults.KubernetesServicesSidecar,
&c.SystemImages.Etcd: imageDefaults.Etcd,
&c.SystemImages.Kubernetes: imageDefaults.Kubernetes,
&c.SystemImages.PodInfraContainer: imageDefaults.PodInfraContainer,
&c.SystemImages.Flannel: imageDefaults.Flannel,
&c.SystemImages.FlannelCNI: imageDefaults.FlannelCNI,
&c.SystemImages.CalicoNode: imageDefaults.CalicoNode,
&c.SystemImages.CalicoCNI: imageDefaults.CalicoCNI,
&c.SystemImages.CalicoCtl: imageDefaults.CalicoCtl,
&c.SystemImages.CanalNode: imageDefaults.CanalNode,
&c.SystemImages.CanalCNI: imageDefaults.CanalCNI,
&c.SystemImages.CanalFlannel: imageDefaults.CanalFlannel,
&c.SystemImages.WeaveNode: imageDefaults.WeaveNode,
&c.SystemImages.WeaveCNI: imageDefaults.WeaveCNI,
&c.SystemImages.Ingress: imageDefaults.Ingress,
&c.SystemImages.IngressBackend: imageDefaults.IngressBackend,
}
2018-02-26 16:27:32 +00:00
for k, v := range systemImagesDefaultsMap {
setDefaultIfEmpty(k, v)
}
}
func (c *Cluster) setClusterNetworkDefaults() {
setDefaultIfEmpty(&c.Network.Plugin, DefaultNetworkPlugin)
if c.Network.Options == nil {
// don't break if the user didn't define options
c.Network.Options = make(map[string]string)
}
networkPluginConfigDefaultsMap := make(map[string]string)
// This is still needed because RKE doesn't use c.Network.*NetworkProvider, that's a rancher type
switch c.Network.Plugin {
case CalicoNetworkPlugin:
networkPluginConfigDefaultsMap = map[string]string{
CalicoCloudProvider: DefaultNetworkCloudProvider,
}
}
if c.Network.CalicoNetworkProvider != nil {
setDefaultIfEmpty(&c.Network.CalicoNetworkProvider.CloudProvider, DefaultNetworkCloudProvider)
networkPluginConfigDefaultsMap[CalicoCloudProvider] = c.Network.CalicoNetworkProvider.CloudProvider
2018-03-29 20:58:46 +00:00
}
if c.Network.FlannelNetworkProvider != nil {
networkPluginConfigDefaultsMap[FlannelIface] = c.Network.FlannelNetworkProvider.Iface
2018-03-29 20:58:46 +00:00
}
2018-04-26 03:10:53 +00:00
if c.Network.CanalNetworkProvider != nil {
networkPluginConfigDefaultsMap[CanalIface] = c.Network.CanalNetworkProvider.Iface
}
for k, v := range networkPluginConfigDefaultsMap {
setDefaultIfEmptyMapValue(c.Network.Options, k, v)
}
}