3 votes

Personnaliser comment remplacer uniquement l'hôte dans la configuration Ingress

J'ai cette configuration de base 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: 8080

Je veux remplacer la valeur spoec.rules.host seulement (et garder tous les http.paths tels quels).

Je crée donc un env-var.yaml comme ceci :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: asap-ingress-internal
spec:
  rules:
    - host: the.real.hostname

Mais le résultat est le suivant :

$ 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

J'ai perdu toute la configuration de http.paths et je n'arrive pas à trouver comment faire.

J'ai essayé avec patches : ou patchesStrategicMerge dans kustomization.yaml mais le résultat est toujours le même.

Toute aide serait grandement appréciée.

2voto

mroma Points 23

Vous pouvez utiliser un patch json pour cela, ci-dessous un exemple.

Voici un exemple kustomization.yaml . Il appellera un correctif dans le patches section :

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../../base/app1

patches:
- target:
    kind: Ingress
    name: my-ingress
  path: ingress-patch.json  

Voici un exemple ingress-patch.json :

[
    { 
        "op": "replace", 
        "path": "/spec/rules/0/host", 
        "value": "the.real.hostname"
    }
]

-1voto

Ovidiu Buligan Points 524

Si vous êtes sur une version récente de Kubernetes (à partir de la version 18, je crois), la version de l'api Ingres n'est plus la version bêta. apiVersion: extensions/v1beta1 c'est maintenant apiVersion: networking.k8s.io/v1 .

J'ai testé l'échantillon ci-dessous et cela fonctionne :

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

Testé avec les deux kubectl kustomize (la version de kubectl est v1.19.7 ) et kustomize build (la version de kustomize standalone est v3.5.4 )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X