为什么我在 kubernetes 上没有默认的 serviceAccount?

Why don't I have a default serviceAccount on kubernetes?

我正在尝试在一些本地机器上安装 Kubernetes 运行ning 运行ning CoreOS。我松散地关注 this guide。一切似乎都正常 运行ning,我可以通过 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 似乎没有 运行ning。当我尝试 运行 它时,我收到此消息:

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="" 但它仍然抱怨同样的错误。

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

或者,如果您想在没有服务帐户的情况下取得一些进展,稍后再回来,您可以通过从您的 api-服务器的 --admission-controllers 标志。但您可能想稍后再回来解决这个问题。

这对我有用

--disable-admission-plugins=ServiceAccount