K8s概念2

一、再次强调:api-server启动时,会自东创建kubernets服务,集群名称默认kubernetes

授权kube-apiserver访问kubelet API的权限

在执行kubectl命令时,apiserver会将请求转发到kubelet的https端口。

这里定义的RBAC规则,授权apiserver使用的证书(kubernetes.pem)用户名(CN:kubernetes)访问kubelet API的权限

kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes

创建一个授权绑定,名称是kube-apiserver:kubelet-apis ,给于用户kubernetes,系统预置角色system:kubelet-api-admin,这样apiserver就具备了访问
kubelet-api的能力

权限分析:

kubectl按照.kube/config----内嵌证书属于system:masters组,访问api-server的无限API的权限.
但是api-server访问kubelet的证书用户kubernetes,目前没有访问kubelet-api的权限,需要利用api-server授权的授权API进行授权。
预定义的ClusterRoleBinding cluster-admin
将Group system:masters与Role cluster-admin绑定,该Role授予访问api-server的无限API的权限
二、控制管理器( 多节点部署,选举)
负责和api-server打交道,管理多个独立的控制器,每个控制器有不同的功能。

证书:"CN": "system:kube-controller-manager", O- "system:kube-controller-manager",默认内置权限

比如自东扩展....

默认控制管理器启动时,证书身份所属组,具备内置---ClusteRole system:kube-controller-manager,权限太小
启动时配置:–use-service-account-credentials=true,
main controller 会为各 controller 创建对应的 ServiceAccount XXX-controller。
内置的 ClusterRoleBinding system:controller:XXX 将赋予各 XXX-controller ServiceAccount (自东创建服务账户)
对应的 ClusterRole system:controller:XXX 权限

kubectl get clusterrole|grep controller
kubectl describe clusterrole system:controller:deployment-controller
kubectl get endpoints kube-controller-manager --namespace=kube-system  -o yaml

二、kublet--负责接受api-server的调用,创建容器等操作(还提供工作节点度量信息服务)
 
1、需要创建bootstrape-token,----需要配置文件,初次启动,需要向api-server进行注册,由控制管理器,进行自动发放证书

export BOOTSTRAP_TOKEN=$(kubeadm token create \
      --description kubelet-bootstrap-token \
      --groups system:bootstrappers:${node_name} \
      --kubeconfig ~/.kube/config)
    # 设置集群参数
    kubectl config set-cluster kubernetes \
      --certificate-authority=/etc/kubernetes/cert/ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER} \
      --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig
    # 设置客户端认证参数
    kubectl config set-credentials kubelet-bootstrap \
      --token=${BOOTSTRAP_TOKEN} \
      --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig
    # 设置上下文参数
    kubectl config set-context default \
      --cluster=kubernetes \
      --user=kubelet-bootstrap \
      --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig
    # 设置默认上下文
    kubectl config use-context default --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig

 分发到各个节点的

kubelet-bootstrap-${node_name}.kubeconfig ===》改变文件名字 /etc/kubernetes/kubelet-bootstrap.kubeconfig
kube-apiserver接收kubelet的bootstrap token后,将请求的user设置为system:bootstrap; group设置为system:bootstrappers,

后续将为这个group设置ClusterRoleBinding

------授权

创建user和group的CSR权限,不创建kubelet会启动失败

$ kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --group=system:bootstrappers

--配置启动
kublet需要理解dns域,域名服务--配置文件中配置

authroization.mode=Webhook:kubelet 使用 SubjectAccessReview API 查询 kube-apiserver 某 user、group 是否具有操作资源的权限(RBAC);

--自动发放证书和手动批准

参考文档--







posted @ 2020-06-27 16:50  FromScratch  阅读(277)  评论(0编辑  收藏  举报