diff --git a/app/kubernetes/ingress/constants.js b/app/kubernetes/ingress/constants.js index bd7a5cfea..053952789 100644 --- a/app/kubernetes/ingress/constants.js +++ b/app/kubernetes/ingress/constants.js @@ -2,12 +2,25 @@ export const KubernetesIngressClassAnnotation = 'kubernetes.io/ingress.class'; // keys must match KubernetesIngressClassTypes values to map them quickly using the ingress type // KubernetesIngressClassRewriteTargetAnnotations[KubernetesIngressClassTypes.NGINX] for example -export const KubernetesIngressClassRewriteTargetAnnotations = Object.freeze({ - nginx: { 'nginx.ingress.kubernetes.io/rewrite-target': '/' }, - traefik: { 'traefik.ingress.kubernetes.io/rewrite-target': '/' }, -}); + +export const KubernetesNginxRewriteTargetAnnotations = { + Key: 'nginx.ingress.kubernetes.io/rewrite-target', + Value: '/$1', +}; + +export const KubernetesTraefikRewriteTargetAnnotations = { + Key: 'traefik.ingress.kubernetes.io/rewrite-target', + Value: '/$1', +}; + +export const KubernetesNginxUseregexAnnotations = { + Key: 'nginx.ingress.kubernetes.io/use-regex', + Value: 'true', +}; export const KubernetesIngressClassTypes = Object.freeze({ NGINX: 'nginx', TRAEFIK: 'traefik', }); + +export const PortainerIngressClassTypes = 'ingress.portainer.io/ingress-type'; diff --git a/app/kubernetes/ingress/converter.js b/app/kubernetes/ingress/converter.js index 6a1dac903..4fea053da 100644 --- a/app/kubernetes/ingress/converter.js +++ b/app/kubernetes/ingress/converter.js @@ -10,7 +10,7 @@ import { import { KubernetesApplicationPublishingTypes } from '../models/application/models'; import { KubernetesIngress, KubernetesIngressRule } from './models'; import { KubernetesIngressCreatePayload, KubernetesIngressRuleCreatePayload, KubernetesIngressRulePathCreatePayload } from './payloads'; -import { KubernetesIngressClassAnnotation, KubernetesIngressClassRewriteTargetAnnotations } from './constants'; +import { KubernetesIngressClassAnnotation, PortainerIngressClassTypes } from './constants'; export class KubernetesIngressConverter { static apiToModel(data) { @@ -151,10 +151,7 @@ export class KubernetesIngressConverter { res.Namespace = formValues.Namespace; const pairs = _.map(formValues.Annotations, (a) => [a.Key, a.Value]); res.Annotations = _.fromPairs(pairs); - if (formValues.RewriteTarget) { - _.extend(res.Annotations, KubernetesIngressClassRewriteTargetAnnotations[formValues.IngressClass.Type]); - } - res.Annotations[KubernetesIngressClassAnnotation] = formValues.IngressClass.Name; + res.Annotations[PortainerIngressClassTypes] = formValues.IngressClass.Name; res.IngressClassName = formValues.IngressClass.Name; res.Hosts = formValues.Hosts; res.Paths = formValues.Paths; @@ -180,11 +177,8 @@ export class KubernetesIngressConverter { hfv.IsNew = false; return hfv; }); - const [[rewriteKey]] = _.toPairs(KubernetesIngressClassRewriteTargetAnnotations[ic.Type]); const annotations = _.map(_.toPairs(ingress.Annotations), ([key, value]) => { - if (key === rewriteKey) { - fv.RewriteTarget = true; - } else if (key !== KubernetesIngressClassAnnotation) { + if (key !== PortainerIngressClassTypes) { const annotation = new KubernetesResourcePoolIngressClassAnnotationFormValue(); annotation.Key = key; annotation.Value = value; @@ -204,6 +198,7 @@ export class KubernetesIngressConverter { const res = new KubernetesIngressCreatePayload(); res.metadata.name = data.Name; res.metadata.namespace = data.Namespace; + res.metadata.annotations = data.Annotations; res.spec.ingressClassName = data.IngressClassName; if (data.Paths && data.Paths.length) { _.forEach(data.Paths, (p) => { diff --git a/app/kubernetes/models/resource-pool/formValues.js b/app/kubernetes/models/resource-pool/formValues.js index d174bf2a8..9259feba5 100644 --- a/app/kubernetes/models/resource-pool/formValues.js +++ b/app/kubernetes/models/resource-pool/formValues.js @@ -1,3 +1,5 @@ +import { KubernetesNginxRewriteTargetAnnotations, KubernetesNginxUseregexAnnotations, KubernetesTraefikRewriteTargetAnnotations } from 'Kubernetes/ingress/constants'; + export function KubernetesResourcePoolFormValues(defaults) { this.Name = ''; this.MemoryLimit = defaults.MemoryLimit; @@ -41,3 +43,15 @@ export function KubernetesResourcePoolIngressClassHostFormValue() { IsNew: true, }; } + +export function KubernetesResourcePoolNginxRewriteAnnotationFormValue() { + return KubernetesNginxRewriteTargetAnnotations; +} + +export function KubernetesResourcePoolNginxUseregexAnnotationFormValue() { + return KubernetesNginxUseregexAnnotations; +} + +export function KubernetesResourcePoolTraefikRewriteAnnotationFormValue() { + return KubernetesTraefikRewriteTargetAnnotations; +} diff --git a/app/kubernetes/views/resource-pools/create/createResourcePool.html b/app/kubernetes/views/resource-pools/create/createResourcePool.html index 657df3ec5..4b0e4eea1 100644 --- a/app/kubernetes/views/resource-pools/create/createResourcePool.html +++ b/app/kubernetes/views/resource-pools/create/createResourcePool.html @@ -277,42 +277,16 @@ -
You can specify a list of annotations that will be associated to the ingress.
You can specify a list of annotations that will be associated to the ingress.