小编典典

如何在容器内运行kubectl命令?

docker

在pod内的容器中,如何使用kubectl运行命令?例如,如果我需要在容器内执行以下操作:

kubectl得到豆荚

我已经试过了:在我的dockerfile中,我有以下命令:

RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
RUN chmod +x ./kubectl
RUN sudo mv ./kubectl /usr/local/bin/kubectl

编辑:我正在尝试OSX文件,我已将其更正为linux二进制文件。(由@svenwltr纠正

在创建docker文件时,这是成功的,但是当我在容器中运行kubectl get pod时,

kubectl get pods

我收到此错误:

与服务器的连接:被拒绝-您是否指定了正确的主机或端口?

当我在本地部署时,如果我的docker-machine没有运行,那么我会遇到此错误,但是在容器内部,docker-machine如何运行?

在本地,我通过运行以下命令来解决此错误:(dev是docker-machine的名称)

docker-machine env dev
eval $(docker-machine env dev)

有人可以告诉我我需要做什么吗?


阅读 2191

收藏
2020-06-17

共1个答案

小编典典

我将使用kubernetes api,您只需要安装curl,而不是kubectl其余的即可。

curl http://localhost:8080/api/v1/namespaces/default/pods

我在我的一个apiserver上运行以上命令。将 localhost 更改为 apiserver ip地址/ dns名称

根据您的配置,您可能需要使用ssl或提供客户端证书。

为了找到API端点,可以使用--v=8kubectl

例:

kubectl get pods --v=8

资源:

Kubernetes API文档

RBAC更新:

我假设您已经配置了rbac,为您的pod创建了一个服务帐户并使用它运行。此服务帐户应具有所需名称空间中的Pod的列表权限。为此,您需要为该服务帐户创建角色和角色绑定。

群集中的每个容器都填充有可用于向API服务器进行身份验证的令牌。要验证,在容器内部运行:

cat /var/run/secrets/kubernetes.io/serviceaccount/token

要向apiserver发出请求,请在容器内运行:

curl -ik \
     -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
     https://kubernetes.default.svc.cluster.local/api/v1/namespaces/default/pods
2020-06-17