I've got this ingress.yaml base configuration:
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: 8080
And want to replace the spoec.rules.host value only (and keep all http.paths as is.
So I create a env-var.yaml like this :
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: asap-ingress-internal
spec:
rules:
- host: the.real.hostname
But the result is the following:
$ 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.hostname
I have lost all http.paths configuration and I can't find out how to do.
I tried with patches: or patchesStrategicMerge in kustomization.yaml but the result is always the same.
Any help would be greatly appreciated
You can use a json patch for this, below is an example.
Here is an example kustomization.yaml
. It will call out a patch in the patches
section:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../..app1
patches:
- target:
kind: Ingress
name: my-ingress
path: ingress-patch.json
Here would be an example ingress-patch.json
:
[
{
"op": "replace",
"path": "/spec/rules/0/host",
"value": "the.real.hostname"
}
]
Another option is to do inline patch. It's the same approach mroma offered, but without the file. I find it simpler.
# kustomization.yaml
resources:
- ingress.yaml
patches:
- target:
kind: Ingress
name: asap-ingress-internal
patch: |-
- op: replace
path: /spec/rules/0/host
value: the.real.hostname
If you are on a recent version of kubernetes (I think starting form 18) the Ingres api version is no longer the beta one apiVersion: extensions/v1beta1
it is now apiVersion: networking.k8s.io/v1
.
I have tested bellow sample and it works :
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
Tested with both kubectl kustomize
(version of kubectl is v1.19.7
) and kustomize build
(version of standalone kustomize is v3.5.4
)