无法从客户端go-/serviceaccount/token连接到kubectl:没有这样的文件
我正在使用golang lib连接到正在运行的本地kubrenets。首先,我从示例中获取代码: 运行如下代码:无法从客户端go-/serviceaccount/token连接到kubectl:没有这样的文件,go,kubernetes,kubectl,client-go,Go,Kubernetes,Kubectl,Client Go,我正在使用golang lib连接到正在运行的本地kubrenets。首先,我从示例中获取代码: 运行如下代码: $KUBERNETES\u SERVICE\u HOST=localhost KUBERNETES\u SERVICE\u PORT=6443 go run./main.go导致以下错误: panic: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory gorout
$KUBERNETES\u SERVICE\u HOST=localhost KUBERNETES\u SERVICE\u PORT=6443 go run./main.go
导致以下错误:
panic: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory
goroutine 1 [running]:
/var/run/secrets/kubernetes.io/serviceaccount/
我不太确定我缺少配置的哪一部分。我研究了以下链接:
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://localhost:6443
name: docker-for-desktop-cluster
contexts:
- context:
cluster: docker-for-desktop-cluster
user: docker-for-desktop
name: docker-for-desktop
current-context: docker-for-desktop
kind: Config
preferences: {}
users:
- name: docker-for-desktop
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
$kubectl获得服务帐户
NAME SECRETS AGE
default 1 3d
test-user 1 1d
$kubectl描述serviceaccount测试用户
Name: test-user
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: test-user-token-hxcsk
Tokens: test-user-token-hxcsk
Events: <none>
为了说明这一点,以防它帮助您进一步调试它:问题与Go或您的代码无关,而与Kubernetes节点无法从Kubernetes主节点获取令牌有关 在
kubectl配置视图中
,clusters.cluster.server
可能应该指向节点可以访问的IP地址。它需要访问CA,即主机,才能提供该令牌,我猜它因此无法访问。
kubectl description
可能会告诉您获取令牌的问题
由于您假设问题是Go/your code,并将重点放在这一点上,因此您忽略了提供有关Kubernetes设置的更多信息,这使得我很难给您提供比上述猜测更好的答案;-)
但我希望这会有帮助 这个答案可能有点过时,但我将尝试为遇到相同/类似问题的未来读者提供更多的视角/基准 TL;DR 出现以下错误:
panic: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory
goroutine 1 [running]:
/var/run/secrets/kubernetes.io/serviceaccount/
panic:open/var/run/secrets/kubernetes.io/servicecomport/token:没有这样的文件或目录
在群集客户端配置中使用时,很可能与/var/run/secrets/kubernetes.io/serviceaccount
位置中缺少令牌有关。此外,这可能与在集群客户机配置中使用集群外的代码有关(例如,直接在笔记本电脑或纯Docker容器中运行此代码)
您可以检查以下命令以进一步解决问题(假设此代码在Pod
内运行):
$kubectl获得服务帐户X-o yaml
:
- 查找:
automountServiceAccountToken:false
$kubectl描述pod XYZ
- 查找:
containers.mounts
和volumeMounts
安装了Secret
的位置
引用官方文件:
在集群内进行身份验证
此示例演示如何配置客户端,让客户端通过Kubernetes群集内运行的应用程序对Kubernetes API进行身份验证。
当使用rest.InClusterConfig()
时,客户机go在/var/run/secrets/kubernetes.io/serviceCount
路径中使用安装在Pod内部的
--
如果使用~/.kube/config
对Kubernetes API进行身份验证,则应使用集群外客户端配置
其他信息:
我已经添加了更多信息,以供在Pod
内运行代码时进一步排除故障时参考
automountServiceAccountToken:false
在版本1.6+中,您可以通过在服务帐户上设置automountServiceAccountToken:false来选择退出服务帐户的自动装载API凭据:
apiVersion:v1
种类:服务帐户
元数据:
姓名:go服务帐户
automountServiceAccountToken:false
在版本1.6+中,您还可以选择退出特定pod的自动装载API凭据:
apiVersion:v1
种类:豆荚
元数据:
名称:sdk
规格:
serviceAccountName:转到serviceaccount
automountServiceAccountToken:false
--
:$kubectl描述pod XYZ
servicAccount
令牌时,Pod
定义应如下所示:
<-- OMITTED -->
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from go-serviceaccount-token-4rst8 (ro)
<-- OMITTED -->
Volumes:
go-serviceaccount-token-4rst8:
Type: Secret (a volume populated by a Secret)
SecretName: go-serviceaccount-token-4rst8
Optional: false
挂载:
/var/run/secrets/kubernetes.io/serviceaccount来自go-serviceaccount-token-4rst8(ro)
卷数:
go-serviceaccount-token-4rst8:
类型:Secret(由Secret填充的卷)
SecretName:go-servicecount-token-4rst8
可选:false
如果不是:
<-- OMITTED -->
Mounts: <none>
<-- OMITTED -->
Volumes: <none>
挂载:
卷数:
额外资源:
go run./main.go--kubeconfig/path/to/your/kubeconfig/file
并告诉结果吗。我应该把什么放在配置文件中?“kubectl配置视图”的输出?我尝试了以下操作:$kubectl config view>kubeconfig
,然后KUBERNETES\u SERVICE\u HOST=localhost KUBERNETES\u SERVICE\u PORT=6443运行/main.go--kubeconfig./kubeconfig
并出现相同的错误:panic:open/var/run/secrets/KUBERNETES.io/servicecomport/token:没有这样的文件或目录
尝试在没有环境变量的情况下准确执行该命令。@NickRak抱歉更正:我正在运行这个示例-在集群内进行身份验证--引用-这是一个失败并出错的示例。示例集群外客户机配置
-对我来说很好