kubernetes 部署完成后,需要其它机器上也可以使用kubelet 来访问k8s 集群。以下步骤生成~.kube/config文件

解决办法

  • 准备现有kubernetes 使用的 ca 证书 ```bash

    创建一个文件夹

    mkdir /root/kubeconfig cd /root/kubeconfig

将kubernetes 使用的证书复制到当前文件夹下

cp ../ca.pem ../ca-key.pem ../ca-config.json ./

  1. - 创建管理用户的证书
  2. ```json
  3. # cat admin-csr.json
  4. {
  5. "CN": "cluster-admin",
  6. "hosts": [],
  7. "key": {
  8. "algo": "rsa",
  9. "size": 2048
  10. },
  11. "names": [
  12. {
  13. "C": "CN",
  14. "L": "BeiJing",
  15. "ST": "BeiJing",
  16. "O": "k8s",
  17. "OU": "System"
  18. }
  19. ]
  20. }
  21. # 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