【问题标题】:No API token found for service account \"default\"未找到服务帐户“默认”的 API 令牌
【发布时间】:2018-08-24 01:10:13
【问题描述】:

无法在 Kubernetes 中创建 Pod 版本:v1.10.0-beta.3

当我在主节点上创建 pod 时,我遇到以下错误:

kubectl create -f ./nginx-rc.yaml

ERROR:
No API token found for service account \"default\", retry after the token is automatically created and added to the service account\
  1. 执行命令:openssl genrsa -out /tmp/serviceaccount.ket 2048

  2. 修改/etc/kubernetes/apiserver 文件以添加以下内容:

    KUBE_API_ARGS="--service_account_key_file=/tmp/serviceaccount.key"
    
  3. 修改/etc/kubernetes/controller-manager并添加以下内容:

    KUBE_CONTROLLER_MANAGER_ARGS="--
    service_account_private_key_file=/tmp/serviceaccount.key"
    
  4. 重新启动了 Kubernetes,但我仍然遇到同样的错误:

    No API token found for service account \"default\", retry after the token is automatically created and added to the service account\
    

在 apiservice 上删除 SecurityContextDeny,ServiceAccount 的另一种方法 之前:

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

之后:

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,ResourceQuota"

还是报错:

No API token found for service account \"default\", retry after the token is automatically created and added to the service account\

我该如何解决?

【问题讨论】:

  • 您是否对这个 pod 也有问题,例如 kubectl run nginx --image=nginx?您使用的是 google-kubernetes-engine 吗?因为您无法在 Google Cloud 实现中的 master 上运行 pod,而且我认为 v1.10 不可用,所以我认为您使用了错误的标签。
  • 你找到解决办法了吗?

标签: kubernetes kubernetes-security


【解决方案1】:

我遇到了同样的问题,并按照以下步骤操作。

  1. 检查下一页的最后一部分并根据您的 Kubernetes 版本匹配 --admission-control https://kubernetes.io/docs/admin/admission-controllers/
  2. Kube-Api 服务器必须有“--service-account-key-file”,并且它应该指向 API 服务器用于认证的公钥
  3. Kube-Controller 必须有“--service-account-private-key-file”,并且应该指向 API server 用来认证的私钥
  4. 确保 API 服务器先启动,然后控制器服务启动,并确保控制器服务在启动时没有抛出任何错误。

同时验证以下内容

  1. kubectl get serviceaccounts --> 输出必须显示具有一个密码的默认帐户。

  2. kubectl get secrets --> 输出必须具有服务帐户的默认令牌

  3. kubectl describe secrets/default-token-qxxw6 --> 它必须在 Data 部分显示 ca.crt 和 token

如果没有任何效果,则停止集群,主节点和节点上的所有服务。 然后删除干净的 ETCD 数据库,将您的网络配置加载到 ETCD 并将集群作为新集群启动。

【讨论】:

  • 在哪里可以找到公钥和私钥文件?在我的例子中,kubectl get sa 返回零个“0”密钥。我还通过“ openssl genrsa -out /etc/kubernetes/serviceaccount.key 2048 ”创建并将其与 apiserver 和 controller-manager 文件中的相应文件相关联。但它似乎对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2019-01-05
  • 2022-01-17
  • 2017-10-28
  • 2021-12-02
相关资源
最近更新 更多