Tengo esta configuración base de ingress.yaml:
apiVersion: extensions/v1beta1 kind: Ingress metadata: labels: sia: aza app: asap-ingress-internal name: asap-ingress-internal annotations: kubernetes.io/ingress.class: "nginx-external" nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - host: the-host-value http: paths: - path: /asap-srv-template/(.*) backend: serviceName: asap-srv-template servicePort: 8080Y desea reemplazar solo el valor spoec.rules.host (y mantener todas las rutas http.como están.
Así que creo un env-var.yaml como este:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: asap-ingress-internal spec: rules: - host: the.real.hostnamePero el resultado es el siguiente:
$ kustomize build apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx-external nginx.ingress.kubernetes.io/use-regex: "true" labels: app: asap-ingress-internal env: dev sia: aza name: asap-ingress-internal namespace: aza-72461-dev spec: rules: - host: the.real.hostnameHe perdido toda la configuración de http.paths y no puedo encontrar cómo hacerlo.
Probé con patches: o patchesStrategicMerge en kustomization.yaml pero el resultado siempre es el mismo.
Cualquier ayuda sería muy apreciada
Puede usar un parche json para esto, a continuación se muestra un ejemplo.
Aquí hay un ejemplo de kustomization.yaml . Llamará a un parche en la sección de patches :
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base/app1 patches: - target: kind: Ingress name: my-ingress path: ingress-patch.json Aquí sería un ejemplo ingress-patch.json :
[ { "op": "replace", "path": "/spec/rules/0/host", "value": "the.real.hostname" } ]Otra opción es hacer un parche en línea. Es el mismo enfoque que ofrece mroma, pero sin el archivo. Lo encuentro más simple.
# kustomization.yaml resources: - ingress.yaml patches: - target: kind: Ingress name: asap-ingress-internal patch: |- - op: replace path: /spec/rules/0/host value: the.real.hostnameSi tiene una versión reciente de kubernetes (creo que comienza con el formulario 18), la versión de API de Ingres ya no es la versión beta apiVersion: extensions/v1beta1 ahora es apiVersion: networking.k8s.io/v1 .
He probado la siguiente muestra y funciona:
ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: asap-ingress-internal annotations: kubernetes.io/ingress.class: "nginx-external" nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - host: the-host-value http: paths: - path: /asap-srv-template/(.*) backend: serviceName: asap-srv-template servicePort: 8080 ingress-patch.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: asap-ingress-internal spec: rules: - host: the.real.hostname kustomization.yaml
resources: - ingress.yaml patchesStrategicMerge: - ingress-patch.yaml Probado con kubectl kustomize (la versión de kubectl es v1.19.7 ) y kustomize build (la versión de kustomize independiente es v3.5.4 )