4 votes

Ajout/suppression dynamique d'hôtes nommés à partir de k8s ingress

Je suis en train de mettre en place un cluster k8s sur GKE. Un DNS joker *.server.com pointera vers un contrôleur d'entrée. Au sein du cluster, il y aura des pods de serveur web, chacun exposant un service unique. Le contrôleur Ingress utilisera le nom du serveur pour se diriger vers les différents services.

Les serveurs seront créés et détruits sur une base presque quotidienne. J'aimerais savoir s'il existe un moyen d'ajouter et de supprimer un serveur nommé du contrôleur d'entrée sans modifier la liste complète des serveurs nommés.

4voto

ahmet alp balkan Points 7264

Il semble que vous prévoyez d'héberger plusieurs noms de domaine sur un seul équilibreur de charge (==singulier). Ingress ressource). Si ce n'est pas le cas, cette réponse ne s'applique pas.

Vous pouvez le faire en configurant Ingress avec une longue liste de noms de domaine comme :

spec:
  rules:
  - host: cats.server.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: cats
          servicePort: 8080
  - host: dogs.server.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: dogs
          servicePort: 8080
  - [...]

Si c'est votre intention, il n'y a aucun moyen de le faire sans modifier toute cette liste et l'appliquer au cluster à chaque fois.

Vous pouvez créer un outil pour construire ce fichier manifeste, puis appliquer les modifications. Le contrôleur Ingress est suffisamment intelligent pour que les domaines existants ne subissent pas d'interruption s'ils figurent toujours sur la liste.

Cependant, les domaines que vous avez supprimés de la liste seront également supprimés de l'URL Map de l'équilibreur de charge et cesseront donc d'accepter le trafic.

2voto

David Points 1

J'ai trouvé une solution pour ajouter une règle à un ingress en exécutant le patch suivant :

[
  {
    "op": "add",
    "path": "/spec/rules/-",
    "value": {
      "host": "<HOST>",
      "http": {
        "paths": [
          {
            "path": "/*",
            "backend": {
              "serviceName": "<SERVICE_NAME>",
              "servicePort": <PORT>
            }
          }
        ]
      }
    }
  }
]

kubectl patch ingress ${INGRESS_NAME} --type json -p "$(cat patch.json)"

Mais je ne trouve pas la solution pour le supprimer. Ce que j'ai essayé est le patch suivant ;

[
  {
    "op": "remove",
    "path": '{.spec.rules[?(@.host=="<HOST>")]}'
  }
]

Mais kubectl me renvoie l'erreur 'The "" is invalid'.

Qu'est-ce qui ne va pas ? J'ai suivi la syntaxe jsonPath à partir de https://kubernetes.io/docs/reference/kubectl/jsonpath/

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