web-dev-qa-db-fra.com

Entrée de sous-domaine dynamique générique pour Kubernetes

J'utilise actuellement Kubernetes sur GKE pour servir les différentes parties de mon produit sur différents sous-domaines avec la ressource Ingress. Par exemple: api.mydomain.com, console.mydomain.com, etc.

ingress.yml (actuel) :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - Host: api.mydomain.com
    http:
      paths:
        - backend:
            serviceName: api-service
            servicePort: 80
  - Host: console.mydomain.com
    http:
      paths:
        - backend:
            serviceName: console-service
            servicePort: 80

Cela fonctionne à merveille, avec le routage de l'équilibreur de charge L7 GCE vers les endroits appropriés. Ce que je voudrais faire, cependant, est de déployer de nombreux déploiements de branches de fonctionnalités en tant que sous-domaines pour tester et démontrer de nouvelles fonctionnalités avant de passer en production. Cela pourrait être quelque chose comme new-stylesheet.console.mydomain.com ou upgraded-algorithm.api.mydomain.com, inspiré des GitLab CI's environnements .

Voici un workflow potentiel pour chaque déploiement:

  1. Créez feature-api-deployment.yml
  2. Créez feature-api-service.yml
  3. Mettez à jour ingress.yml avec la nouvelle règle de sous-domaine: feature.api.mydomain.com en précisant serviceName: feature-api-service

Mais l'énumération et la maintenance de tous les mappages de sous-domaine-> services compliqueront la suppression des déploiements et créeront une tonne de backends GCE (le quota par défaut est 5 ...), ce n'est donc pas idéal.

Y a-t-il quelque chose de intégré à Kubernetes que j'oublie pour gérer cela? Quelque chose comme ça serait idéal pour choisir un service cible basé sur un sous-domaine correspondant:

ingress.yml (voulu)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - Host: *.api.mydomain.com
    http:
      paths:
        - backend:
            serviceName: {value of *}-api-service
            servicePort: 80
18
Nick Faughey

Il n'y a certainement rien de tel que les domaines génériques disponibles dans kubernetes, mais vous pourrez peut-être obtenir ce que vous voulez en utilisant Helm

Avec helm, vous pouvez modèle des variables à l'intérieur de vos manifestes, ainsi vous pouvez avoir le nom de votre branche dans la barre fichier de valeurs

À partir de là, vous pouvez demander à gitlab-ci d'effectuer l'installation de la barre dans un pipeline de build et si vous configurez votre graphique correctement, vous pouvez spécifier un argument de barre du nom du pipeline.

Il existe un excellent article de blog sur ce type de flux de travail ici - j'espère que cela vous mènera là où vous devez aller.

6
jaxxstorm

Les services sont disponibles localement

my-svc.svc.cluster.local

Vous pouvez écrire un simple proxy NGINX qui peut transmettre ce qui peut analyser le sous-domaine et le passer par proxy à http: // $ service tant que le sous-domaine et le nom du service correspondent comme dans ce cas.

0
cloudpre