1
0
mirror of https://github.com/rancher/rke.git synced 2025-07-16 08:25:51 +00:00

Merge pull request #1911 from ibrokethecloud/master

Allow addons.go to parse http and https ports for ingress controller
This commit is contained in:
Sebastiaan van Steenis 2020-10-22 20:54:09 +02:00 committed by GitHub
commit 16f3089220
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 0 deletions

View File

@ -62,6 +62,9 @@ type ingressOptions struct {
AlpineImage string
IngressImage string
IngressBackend string
HTTPPort int
HTTPSPort int
NetworkMode string
UpdateStrategy *appsv1.DaemonSetUpdateStrategy
}
@ -565,6 +568,9 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{}
ExtraEnvs: c.Ingress.ExtraEnvs,
ExtraVolumes: c.Ingress.ExtraVolumes,
ExtraVolumeMounts: c.Ingress.ExtraVolumeMounts,
HTTPPort: c.Ingress.HTTPPort,
HTTPSPort: c.Ingress.HTTPSPort,
NetworkMode: c.Ingress.NetworkMode,
UpdateStrategy: &appsv1.DaemonSetUpdateStrategy{
Type: c.Ingress.UpdateStrategy.Strategy,
RollingUpdate: c.Ingress.UpdateStrategy.RollingUpdate,

View File

@ -514,6 +514,9 @@ func parseIngressConfig(clusterFile string, rkeConfig *v3.RancherKubernetesEngin
if err := parseIngressExtraVolumeMounts(ingressMap, rkeConfig); err != nil {
return err
}
if err := parseIngressDefaults(ingressMap, rkeConfig); err != nil {
return err
}
return nil
}
@ -598,6 +601,21 @@ func parseIngressExtraVolumeMounts(ingressMap map[string]interface{}, rkeConfig
return nil
}
func parseIngressDefaults(ingressMap map[string]interface{}, rkeConfig *v3.RancherKubernetesEngineConfig) error {
// Setting up default behaviour so as to not catch out
// existing users who use new version of RKE
if _, ok := ingressMap["network_mode"]; !ok {
rkeConfig.Ingress.NetworkMode = DefaultNetworkMode
}
if _, ok := ingressMap["http_port"]; !ok {
rkeConfig.Ingress.HTTPPort = DefaultHTTPPort
}
if _, ok := ingressMap["https_port"]; !ok {
rkeConfig.Ingress.HTTPSPort = DefaultHTTPSPort
}
return nil
}
func parseNodeDrainInput(clusterFile string, rkeConfig *v3.RancherKubernetesEngineConfig) error {
// setting some defaults here because for these fields there's no way of differentiating between user provided null value vs golang setting it to null during unmarshal
if rkeConfig.UpgradeStrategy == nil || rkeConfig.UpgradeStrategy.DrainInput == nil {

View File

@ -89,6 +89,9 @@ const (
DefaultMaxUnavailableControlplane = "1"
DefaultNodeDrainTimeout = 120
DefaultNodeDrainGracePeriod = -1
DefaultHTTPPort = 80
DefaultHTTPSPort = 443
DefaultNetworkMode = "hostNetwork"
)
var (

View File

@ -177,6 +177,24 @@ func validateIngressOptions(c *Cluster) error {
return fmt.Errorf("DNSPolicy %s was not a valid DNS Policy", c.Ingress.DNSPolicy)
}
if c.Ingress.NetworkMode == "hostPort" {
if !(c.Ingress.HTTPPort >= 0 && c.Ingress.HTTPPort <= 65535) {
return fmt.Errorf("https port is invalid. Needs to be within 0 to 65535")
}
if !(c.Ingress.HTTPPort >= 0 && c.Ingress.HTTPPort <= 65535) {
return fmt.Errorf("http port is invalid. Needs to be within 0 to 65535")
}
if c.Ingress.HTTPPort != 0 && c.Ingress.HTTPSPort != 0 &&
(c.Ingress.HTTPPort == c.Ingress.HTTPSPort) {
return fmt.Errorf("http and https ports need to be different")
}
}
if !(c.Ingress.NetworkMode == "" ||
c.Ingress.NetworkMode == "hostNetwork" || c.Ingress.NetworkMode == "hostPort" ||
c.Ingress.NetworkMode == "none") {
return fmt.Errorf("NetworkMode %s was not a valid network mode", c.Ingress.NetworkMode)
}
return nil
}

View File

@ -415,6 +415,12 @@ type IngressConfig struct {
ExtraVolumeMounts []ExtraVolumeMount `yaml:"extra_volume_mounts" json:"extraVolumeMounts,omitempty" norman:"type=array[json]"`
// nginx daemonset upgrade strategy
UpdateStrategy *DaemonSetUpdateStrategy `yaml:"update_strategy" json:"updateStrategy,omitempty"`
// Http port for ingress controller daemonset
HTTPPort int `yaml:"http_port" json:"httpPort,omitempty"`
// Https port for ingress controller daemonset
HTTPSPort int `yaml:"https_port" json:"httpsPort,omitempty"`
// NetworkMode selector for ingress controller pods. Default is HostNetwork
NetworkMode string `yaml:"network_mode" json:"networkMode,omitempty"`
}
type ExtraEnv struct {