无法从client-go - /serviceaccount/token连接到kubectl:没有这样的文件

she*_*hen 5 go kubernetes kubectl client-go

我正在使用golang lib 客户端 - 去连接到正在运行的本地kubrenets.首先,我从示例中获取了代码:out-of-cluster-client-configuration.

运行这样的代码: $ KUBERNETES_SERVICE_HOST=localhost KUBERNETES_SERVICE_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/
Run Code Online (Sandbox Code Playgroud)

我不太确定我缺少哪部分配置.我研究了以下链接:

但没有运气.我想我需要让客户端知道要使用哪个令牌/ serviceAccount,或者以每个人都可以连接到它的api的方式配置kubectl.

这是我的kubectl的状态,虽然一些命令结果:

$ kubectl配置视图

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
Run Code Online (Sandbox Code Playgroud)

$ kubectl获取serviceAccounts

NAME        SECRETS   AGE
default     1         3d
test-user   1         1d
Run Code Online (Sandbox Code Playgroud)

$ 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>
Run Code Online (Sandbox Code Playgroud)

$ kubectl获取秘密test-user-token-hxcsk -o yaml

apiVersion: v1
data:
  ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0......=
  namespace: ZGVmYXVsdA==
  token: ZXlKaGJHY2lPaUpTVXpJMU5pSX......=
kind: Secret
metadata:
  annotations:
    kubernetes.io/service-account.name: test-user
    kubernetes.io/service-account.uid: 984b359a-6bd3-11e8-8600-XXXXXXX
  creationTimestamp: 2018-06-09T10:55:17Z
  name: test-user-token-hxcsk
  namespace: default
  resourceVersion: "110618"
  selfLink: /api/v1/namespaces/default/secrets/test-user-token-hxcsk
  uid: 98550de5-6bd3-11e8-8600-XXXXXX
type: kubernetes.io/service-account-token
Run Code Online (Sandbox Code Playgroud)

小智 0

只是为了澄清一下,以防它可以帮助您进一步调试它:问题与 Go 或您的代码无关,而与 Kubernetes 节点无法从 Kubernetes master 获取令牌有关。

在 中kubectl config viewclusters.cluster.server可能应该指向节点可以访问的 IP 地址。
它需要访问 CA,即主服务器,才能提供该令牌,我猜它因此而失败。
kubectl describe <your_pod_name>可能会告诉您获取令牌时出现的问题。

由于您假设问题出在 Go/您的代码上并专注于此,因此您忽略了提供有关您的 Kubernetes 设置的更多信息,这使得我更难为您提供比我上面的猜测更好的答案;-)

但我希望它有帮助!