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:
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
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.
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.