diff --git a/cluster/addons.go b/cluster/addons.go index 3582cc1d..6b7b2307 100644 --- a/cluster/addons.go +++ b/cluster/addons.go @@ -613,9 +613,21 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{} } // since nginx ingress controller 0.16.0, it can be run as non-root and doesn't require privileged anymore. // So we can use securityContext instead of setting privileges via initContainer. - ingressSplits := strings.SplitN(c.SystemImages.Ingress, ":", 2) - if len(ingressSplits) == 2 { - version := strings.Split(ingressSplits[1], "-")[0] + // There are two formats currently in use: + // rancher/nginx-ingress-controller:0.21.0-rancher3 + // rancher/nginx-ingress-controller:nginx-0.43.0-rancher1 + // This code was adjusted to match both and look at the tag (last element) + ingressSplits := strings.Split(c.SystemImages.Ingress, ":") + if len(ingressSplits) >= 2 { + var version string + ingressTag := ingressSplits[len(ingressSplits)-1] + ingressTagSplits := strings.Split(ingressTag, "-") + // both formats are caught here, either first or second element based on count of elements + if len(ingressTagSplits) == 2 { + version = ingressTagSplits[0] + } else { + version = ingressTagSplits[1] + } if version < "0.16.0" { ingressConfig.AlpineImage = c.SystemImages.Alpine } @@ -633,6 +645,21 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{} } } } + // This ensures ingresses created before upgrade are watched else they would all stop working + // This is because ingressClass is required on the ingress + // User can disable it by configuring watch-ingress-without-class: "false" in extra_args for ingress + if version >= "1.1.0" { + if c.Ingress.ExtraArgs != nil { + if _, ok := c.Ingress.ExtraArgs["watch-ingress-without-class"]; !ok { + ingressConfig.ExtraArgs["watch-ingress-without-class"] = "true" + } + } else { + extraArgs := map[string]string{ + "watch-ingress-without-class": "true", + } + ingressConfig.ExtraArgs = extraArgs + } + } } tmplt, err := templates.GetVersionedTemplates(kdm.NginxIngress, data, c.Version) if err != nil {