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);
--自动发放证书和手动批准
参考文档--