3
votes

Variables d'environnement d'accès Kubernetes Kubectl

Est-ce que quelqu'un sait pourquoi celui-ci ne le fait pas (montre une ligne vide):

kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'

mais celui-ci fonctionne?

kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST


0 commentaires

3 Réponses :


6
votes

L'exécution réussie dépendra de l'image que vous utilisez pour kube . Mais en termes généraux, echo est une commande Bourne shell intégrée.

Avec cette commande:

$ kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'

Vous n'instanciez pas un environnement Bourne Shell et il n'y a pas d'exécutable echo dans le conteneur. Il s'avère que ce kubectl fait kubectl est essentiellement d'exécuter echo $KUBERNETES_SERVICE_HOST sur votre client! Vous pouvez essayer d'exécuter par exemple:

$ kubectl exec kube -- echo $PWD

Vous verrez que c'est le répertoire personnel de votre client.

Alors qu'avec cette commande:

$ kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST

Il existe un exécutable sh dans votre environnement et c'est Bourne Shell qui comprend la commande echo intégrée avec l'environnement Kubernetes donné dans le conteneur par défaut de votre pod.


0 commentaires

0
votes

La raison pour laquelle cela montre une ligne vide n'a rien à voir avec kubernetes ou le conteneur. Dans votre première ligne, $KUBERNETES_SERVICE_HOST est interprété par le shell dans lequel vous exécutez . Et vous ne devez pas avoir KUBERNETES_SERVICE_HOST défini dans ce shell, il utilise donc une chaîne vide à la place.

Sur la base de ce que vous voyez, j'en déduis que vous essayez de trouver la valeur de la variable KUBERNETES_SERVICE_HOST à l' intérieur de votre conteneur kubernetes. Votre dernière commande fera cela pour vous, et je suppose que la suivante ferait de même.

kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'


1 commentaires

Btw, cette commande ne fonctionne pas. La réponse acceptée mentionnait que l' echo sera simplement exécuté sur le shell actuel. Donc, cette commande affichera simplement $KUBERNETES_SERVICE_HOST dans le shell actuel.



0
votes

Une option qui fonctionne généralement sans sh -c , au cas où cela serait nécessaire, est:

kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST


0 commentaires