kubernetes 部署完成后,需要其它机器上也可以使用kubelet 来访问k8s 集群。以下步骤生成~.kube/config文件
解决办法
将kubernetes 使用的证书复制到当前文件夹下
cp ../ca.pem ../ca-key.pem ../ca-config.json ./
- 创建管理用户的证书```json# cat admin-csr.json{"CN": "cluster-admin","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing","O": "k8s","OU": "System"}]}# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
最终生成如下证书
# ls admin*
admin.csr admin-csr.json admin-key.pem admin.pem
- 执行下面脚本
```bash
创建 config 配置文件
设置集群参数
kubectl config set-cluster kubernetes \ —certificate-authority=ca.pem \ —embed-certs=true \ —server=https://192.168.13.55:6443 \ —kubeconfig=config
设置客户端认证参数
kubectl config set-credentials cluster-admin \ —client-certificate=admin.pem \ —client-key=admin-key.pem \ —embed-certs=true \ —kubeconfig=config
设置上下文参数
kubectl config set-context default \ —cluster=kubernetes \ —user=cluster-admin \ —kubeconfig=config
设置默认上下文
kubectl config use-context default —kubeconfig=config
这个脚本会生成`config`文件,将其复制到需要kubelet 访问的机器上的 `~.kube/`即可,同时确保有kubelet 命令。 这样就可以访问远程访问了。
---
以上访问都集群的管理员权限,使用的`cluster-admin`这个用户。如果需要限制开发同学的访问,可以配置rbac。<br />首先,创建证书的时候,注意`CN`这个字段, 这个字段写的什么也就代表了你使用的哪个用户。
```bash
# cat admin-csr.json
{
"CN": "cluster-admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
注意:<br />kubernetes 集群本身并不会保存user信息,RBAC API 声明了四种 Kubernetes 对象:_Role_、_ClusterRole_、_RoleBinding_ 和 _ClusterRoleBinding_<br />kubernetes 会将 用户(user) 和 角色(role)或者集群角色(clusterrole) 绑定起来,以达到控制这个用户的权限。<br />例如:<br />我们创建证书时,用的`CN`为 test 用户。而test用户没有和任何role 绑定,也就是test 用户没有任何权限,我们在使用这个config 时,会提示没有权限,此时,我们只需要将test 用户 绑定到 cluster-admin 这个角色上,我们的test 用户就有了集群的所有权限了。
kubectl create clusterrolebinding testadmin --clusterrole=cluster-admin --user=test
