From 03709180adad4f0d86c14dcf06de8d070b789831 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Steenis Date: Tue, 6 Jul 2021 10:22:49 +0200 Subject: [PATCH 1/2] Add IngressWebhook to sys imgs struct --- types/rke_types.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/types/rke_types.go b/types/rke_types.go index ab80b01a..9b8edbb8 100644 --- a/types/rke_types.go +++ b/types/rke_types.go @@ -173,6 +173,8 @@ type RKESystemImages struct { Ingress string `yaml:"ingress" json:"ingress,omitempty"` // Ingress Controller Backend image IngressBackend string `yaml:"ingress_backend" json:"ingressBackend,omitempty"` + // Ingress Webhook image + IngressWebhook string `yaml:"ingress_webhook" json:"ingressWebhook,omitempty"` // Metrics Server image MetricsServer string `yaml:"metrics_server" json:"metricsServer,omitempty"` // Pod infra container image for Windows From 97c4b102ce9b5826106a2b74ba73060d875dff63 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Steenis Date: Tue, 6 Jul 2021 10:23:00 +0200 Subject: [PATCH 2/2] Validate Ingress Webhook and pass to template --- cluster/addons.go | 2 ++ cluster/defaults.go | 1 + cluster/validation.go | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/cluster/addons.go b/cluster/addons.go index c11a8a14..83f1a87b 100644 --- a/cluster/addons.go +++ b/cluster/addons.go @@ -71,6 +71,7 @@ type ingressOptions struct { AlpineImage string IngressImage string IngressBackend string + IngressWebhook string HTTPPort int HTTPSPort int NetworkMode string @@ -588,6 +589,7 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{} DNSPolicy: c.Ingress.DNSPolicy, IngressImage: c.SystemImages.Ingress, IngressBackend: c.SystemImages.IngressBackend, + IngressWebhook: c.SystemImages.IngressWebhook, ExtraEnvs: c.Ingress.ExtraEnvs, ExtraVolumes: c.Ingress.ExtraVolumes, ExtraVolumeMounts: c.Ingress.ExtraVolumeMounts, diff --git a/cluster/defaults.go b/cluster/defaults.go index 4b1c5800..216ebaeb 100644 --- a/cluster/defaults.go +++ b/cluster/defaults.go @@ -509,6 +509,7 @@ func (c *Cluster) setClusterImageDefaults() error { &c.SystemImages.WeaveCNI: d(imageDefaults.WeaveCNI, privRegURL), &c.SystemImages.Ingress: d(imageDefaults.Ingress, privRegURL), &c.SystemImages.IngressBackend: d(imageDefaults.IngressBackend, privRegURL), + &c.SystemImages.IngressWebhook: d(imageDefaults.IngressWebhook, privRegURL), &c.SystemImages.MetricsServer: d(imageDefaults.MetricsServer, privRegURL), &c.SystemImages.Nodelocal: d(imageDefaults.Nodelocal, privRegURL), &c.SystemImages.AciCniDeployContainer: d(imageDefaults.AciCniDeployContainer, privRegURL), diff --git a/cluster/validation.go b/cluster/validation.go index 6f07e97b..06beb112 100644 --- a/cluster/validation.go +++ b/cluster/validation.go @@ -580,6 +580,25 @@ func validateIngressImages(c *Cluster) error { if len(c.SystemImages.IngressBackend) == 0 { return errors.New("ingress backend image is not populated") } + // Ingress Webhook image is used starting with k8s 1.21 + k8sVersion := c.RancherKubernetesEngineConfig.Version + toMatch, err := semver.Make(k8sVersion[1:]) + if err != nil { + return fmt.Errorf("%s is not valid semver", k8sVersion) + } + logrus.Debugf("Checking if ingress webhook image is required for cluster version [%s]", k8sVersion) + + IngressWebhookImageRequiredRange, err := semver.ParseRange(">=1.21.0-rancher0") + if err != nil { + logrus.Warnf("Failed to parse semver range for checking required ingress webhook image") + } + if IngressWebhookImageRequiredRange(toMatch) { + logrus.Debugf("Cluster version [%s] uses ingress webhook image, checking if image is populated", k8sVersion) + if len(c.SystemImages.IngressWebhook) == 0 { + return errors.New("ingress webhook image is not populated") + } + + } } return nil }