0

我在 kubernetes 中安装默认令牌时遇到问题,它不再适用于我,我想在 Github 上创建问题之前直接询问,所以我的设置基本上包括一个 HA 裸机集群和手动部署的 etcd(其中包括证书 ca , 键)。部署运行节点注册,我只是无法部署 pod,总是给出错误:

MountVolume.SetUp failed for volume "default-token-ddj5s" : secrets "default-token-ddj5s" is forbidden: User "system:node:tweak-node-1" cannot get secrets in the namespace "default": no path found to object

其中tweak-node-1 是我的节点名和主机名之一,我发现了一些类似的问题: - https://github.com/kubernetes/kubernetes/issues/18239 - https://github.com/kubernetes/kubernetes /问题/25828

但没有一个能解决我的问题,因为问题不一样。我在尝试运行 pod 并尝试设置两个 RBAC ABAC 时只使用默认命名空间,两者都给出了相同的结果,这是我用于部署显示版本的模板etcd 配置:

apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
api:
advertiseAddress: IP1
bindPort: 6443
authorizationMode: ABAC
kubernetesVersion: 1.8.5
etcd:
endpoints:
- https://IP1:2379
- https://IP2:2379
- https://IP3:2379

caFile: /opt/cfg/etcd/pki/etcd-ca.crt
certFile: /opt/cfg/etcd/pki/etcd.crt
keyFile: /opt/cfg/etcd/pki/etcd.key
dataDir: /var/lib/etcd
etcdVersion: v3.2.9
networking:
podSubnet: 10.244.0.0/16
apiServerCertSANs:
- IP1
- IP2
- IP3
- DNS-NAME1
- DNS-NAME2
- DNS-NAME3
4

2 回答 2

0

您的节点必须使用与其节点 API 对象名称匹配的凭据,如https://kubernetes.io/docs/admin/authorization/node/#overview中所述

为了获得 Node 授权者的授权,kubelets 必须使用一个凭证来标识它们在 system:nodes 组中,用户名是 system:node:。此组和用户名格式与作为 kubelet TLS 引导的一部分为每个 kubelet 创建的身份相匹配。

于 2017-12-19T19:50:28.627 回答
0

更新

所以具体的解决方案,问题是因为我使用的是 1.8.x 版本并且手动复制证书和密钥每个 kubelet 没有自己的系统:节点绑定或https://kubernetes.io/中指定的特定密钥文档/管理/授权/节点/#overview

RBAC 节点权限 在 1.8 中,根本不会创建绑定。

使用 RBAC 时,将继续创建 system:node 集群角色,以便与将其他用户或组绑定到该角色的部署方法兼容。

我使用两种方法修复:

1 - 使用kubeadm join而不是从 master1 复制 /etc/kubernetes 文件

2 - 部署后修补集群角色绑定系统:节点

kubectl patch clusterrolebinding system:node -p '{"apiVersion": 
"rbac.authorization.k8s.io/v1beta1","kind": 
"ClusterRoleBinding","metadata": {"name": "system:node"},"subjects": 
[{"kind": "Group","name": "system:nodes"}]}'
于 2017-12-21T09:33:10.387 回答