Kubernetes kubectl访问环境变量

62lalag4  于 2023-03-07  发布在  Kubernetes
关注(0)|答案(5)|浏览(262)

有人知道为什么这一个没有(显示空行):

kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST

但这个有用吗

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

rslzwgfq1#

能否成功运行取决于您为kube使用的映像。但一般来说,echo是一个内置的Bourne shell命令。
使用此命令:

$ kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST

您没有示例化Bourne Shell环境,并且容器中没有echo可执行文件。结果是kubectl所做的基本上是在客户端上运行echo $KUBERNETES_SERVICE_HOST!您可以尝试运行以下示例:

$ kubectl exec kube -- echo $PWD

您将看到这是客户机上的主目录。
而使用此命令:

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

您的环境中有一个sh可执行文件,即Bourne Shell,它可以理解Pod默认容器中给定Kubernetes环境的内置echo命令。

yr9zkbsy

yr9zkbsy2#

一个通常不使用sh -c的选项(如果需要)是:

kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST
pn9klfpd

pn9klfpd3#

显示空行的原因与kubernetes或容器无关。在第一行中,$KUBERNETES_SERVICE_HOST被解释为 * 您运行的shell *。并且您不能在该shell中设置KUBERNETES_SERVICE_HOST,因此它使用了一个空字符串。
根据您所看到的,我推断您正在尝试查找kubernetes容器 * 内 * 的KUBERNETES_SERVICE_HOST变量的值。您的上一个命令将为您完成此操作,我猜想下面的命令也会完成此操作。

kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'
13z8s7eq

13z8s7eq4#

在以下命令的情况下:
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
$KUBERNETES_SERVICE_HOST从您的本地环境展开。shell在执行命令之前执行 parameter expansion。使用parameter expansion,如果我们拼错了变量名或者变量没有定义,扩展仍将发生,但将导致空字符串。本地主机上未定义KUBERNETES_SERVICE_HOST,因此将导致空字符串。实际上,这是将在容器中执行的命令:
kubectl exec kube -- echo
当我们想要抑制所有的扩展时,我们使用单引号。所以,在这种情况下,下面的命令可以工作,因为单引号抑制了参数扩展,并且命令被原封不动地传递给容器。
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'

nqwrtyyt

nqwrtyyt5#

通常,使用以下命令:
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
$KUBERNETES_SERVICE_HOST将首先被展开并作为参数提供给echo。在您的环境中,这个变量可能没有被设置,因此会出现一个空行。
至于命令:
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
在容器中创建shell,并指示(-c)将'echo $KUBERNETES_SERVICE_HOST'视为命令字符串

相关问题