J'utilise actuellement une spécification Kubernetes Deployment.yaml
pour déployer un service. La spécification comprend une référence textuelle à une adresse IP spécifique (marquée comme <static-ip-address>
ci-dessous):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Je souhaite transférer des informations telles que des mots de passe ou des adresses IP dans des référentiels Git distants. Puis-je éviter cela, par exemple en utilisant des variables d'environnement, par exemple avec une spécification de déploiement et un déploiement réel à peu près comme suit:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
et
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Évidemment, cette syntaxe spécifique ne fonctionne pas encore. Mais quelque chose comme cela est-il possible et si oui, comment?
Je préférerais ne pas compter sur un outil de provisioning distinct . Les secrets et les secretsConfigMap
semblent prometteurs, mais apparemment, ils ne peuvent pas être consommés d'une manière qui convient à cet effet. Si je pouvais référencer directement une adresse IP statique définie avec gcloud compute addresses create service-address
ce serait le mieux.
envsubst
. ne le savait pas jusqu'à présentsed
. Selon votre définition, la solution proposée avecsed
ne serait pas plus facile / plus propre, car il n'y a pas d'sed
installation sur les machines Windows par défaut.Il y avait une autre solution agréablement simple: j'ai une adresse Google Compute
my-address
défini, et je peux apparemment l' utiliser dans la spécification de service comme ceci:loadBalancerIP: my-address
.Avec ceci comme source "externe" pour les adresses IP et les secrets pour les mots de passe, il n'y a plus besoin d'un outil de provisioning (ou de modèles) pour mon cas d'utilisation simple (dans un environnement GKE).
OBSOLÈTE MAINTENANT: J'ai décidé d'utiliser un outil de provisioning en quelque sorte, à savoir "intégré"
sed
, après tout.Mon
Deployment.yaml
contient maintenant une "variable de modèle", par exemple danset je déploie le service avec, par exemple, 1.2.3.4 comme adresse IP externe avec
la source
Vous pouvez écrire un simple pré-processeur pour effectuer la substitution de variables sur vos fichiers yaml (ou vous pouvez utiliser jsonnet pour accomplir la même chose sur les fichiers de configuration json).
Il y a une discussion sur l' ajout de modèles directement dans la configuration de Kubernetes mais il n'est pas encore implémenté ou disponible.
la source
Jusqu'à ce que des modèles soient disponibles, la façon la plus simple de le faire est d'exécuter un travail qui utilise l'API Kubernetes pour mettre à jour le service. Un court script shell dans une image alpine, couplé à un secret (contenant l'adresse IP) et une configmap (contenant le modèle), devrait être assez simple. Le bit difficile utilise correctement les fonctionnalités d'authentification et d'autorisation de l'apiserver.
/programming/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container donne un exemple d'accès à l'API. Évidemment, vous voudrez POSTER dans / api / v1 / namespaces / default / services au lieu de GET dans cet exemple.
la source