【问题标题】:Why don't I have a default serviceAccount on kubernetes?为什么我在 kubernetes 上没有默认的 serviceAccount?
【发布时间】:2018-12-12 19:20:50
【问题描述】:

我正在尝试让 Kubernetes 在一些运行 CoreOS 的本地机器上运行。我正在松散地关注this guide。一切似乎都已启动并正在运行,我可以通过 kubectl 连接到 api。但是,当我尝试创建一个 pod 时,我收到了这个错误:

Pod "redis-master" is forbidden: Missing service account default/default: <nil> 

执行kubectl get serviceAccounts 确认我没有任何 ServiceAccounts:

NAME      SECRETS

根据documentation,每个命名空间都应该有一个默认的ServiceAccount。运行kubectl get namespace 确认我有默认命名空间:

NAME      LABELS    STATUS
default   <none>    Active

我是 Kubernetes 和 CoreOS 的新手,所以我确信我忽略了一些东西,但我终生无法弄清楚发生了什么。我会很感激任何指针。

更新

kube-controller-manager 似乎没有运行。当我尝试运行它时,我收到以下消息:

I1104 21:09:49.262780   26292 plugins.go:69] No cloud provider specified.
I1104 21:09:49.262935   26292 nodecontroller.go:114] Sending events to api server.
E1104 21:09:49.263089   26292 controllermanager.go:217] Failed to start service controller: ServiceController should not be run without a cloudprovider.
W1104 21:09:49.629084   26292 request.go:302] field selector: v1 - secrets - type - kubernetes.io/service-account-token: need to check if this is versioned correctly.
W1104 21:09:49.629322   26292 request.go:302] field selector: v1 - serviceAccounts - metadata.name - default: need to check if this is versioned correctly.
W1104 21:09:49.636082   26292 request.go:302] field selector: v1 - serviceAccounts - metadata.name - default: need to check if this is versioned correctly.
W1104 21:09:49.638712   26292 request.go:302] field selector: v1 - secrets - type - kubernetes.io/service-account-token: need to check if this is versioned correctly.

由于我在本地运行它,我没有云提供商。我试图定义--cloud-provider="",但它仍然报同样的错误。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    每个命名空间的默认服务帐户由服务帐户控制器创建,这是一个循环,是 kube-controller-manager 二进制文件的一部分。因此,请验证二进制文件是否正在运行,并检查其日志中是否存在任何表明它无法创建服务帐户的内容,确保将“--service-account-private-key-file=somefile”设置为具有有效的 PEM 密钥。

    或者,如果您想在没有服务帐户的情况下取得一些进展,稍后再回来,您可以通过从 api-server 的 --admission-controllers 标志中删除“ServiceAccount”选项来禁用阻塞您的 Pod 的准入控制器.但您可能希望稍后再回来修复它。

    【讨论】:

    • 感谢您的回复!似乎它没有开始,因为没有云提供商。我已经用尝试启动 kube-controller-manager 的输出更新了我的问题
    • 顺便说一句,从 --admission_control 中删除 ServiceAccount 有效,所以谢谢!虽然我想找出一种让默认 ServiceAccount 在本地工作的方法。
    • 关于没有云提供商的错误消息是误导性的错误消息。见github.com/kubernetes/kubernetes/issues/12716
    • 为控制器管理器提供用于创建服务帐户令牌的私钥文件应该是创建它们所需的全部内容。您需要向 kube-api-server 提供相应的公钥,以允许服务帐户向 API 进行身份验证。如果您仍然没有在每个命名空间中创建那些,您能否提供您正在使用的 kube-controller-manager 的完整调用?
    • 根据更新中的最后一条警告日志消息,服务帐户控制器似乎正在运行。不幸的是,它没有任何详细的日志记录让我们验证这一点。您能否查看是否有任何看起来像是由服务帐户控制器创建的秘密?这将提供一个线索。您能否尝试创建一个新的命名空间(例如kubectl create -f examples/cluster-dns/namespace-dev.yaml)并查看该新命名空间是否获得了机密和创建的服务帐户?
    【解决方案2】:

    这对我有用

    --disable-admission-plugins=ServiceAccount

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      相关资源
      最近更新 更多