kubelet 授权 kube-apiserver 的一些操作 exec run logs 等

RBAC 只需创建一次就可以

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

创建 bootstrap kubeconfig 文件

注意: token 生效时间为 1day , 超过时间未创建自动失效,需要重新创建 token

  1. kubeadm token create --description kubelet-bootstrap-token --groups system:bootstrappers:kubernetes-clientgroup --kubeconfig ~/.kube/config

查看生成的 token

  1. kubeadm token list --kubeconfig ~/.kube/config

TOKEN                    TTL  EXPIRES                    USAGES                  DESCRIPTION              EXTRA GROUPS
 2kcmsb.hyl5s4g0l1mkff9z  23h  2018-11-16T11:08:00+08:00  authentication,signing  kubelet-bootstrap-token  system:bootstrappers:kubernetes-clientgroup

配置集群参数,生成kubernetes-clientgroup-bootstrap.kubeconfig

  1. kubectl config set-cluster kubernetes \
  2. --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  3. --embed-certs=true \
  4. --server=https://192.168.1.7:6443 \ #master节点ip
  5. --kubeconfig=kubernetes-clientgroup-bootstrap.kubeconfig

配置客户端认证

  1. kubectl config set-credentials kubelet-bootstrap \
  2. --token= 2kcmsb.hyl5s4g0l1mkff9z \ #上面生成的token
  3. --kubeconfig=kubernetes-clientgroup-bootstrap.kubeconfig

配置关联

  1. kubectl config set-context default \
  2. --cluster=kubernetes \
  3. --user=kubelet-bootstrap \
  4. --kubeconfig=kubernetes-clientgroup-bootstrap.kubeconfig

配置默认关联

  1. kubectl config use-context default --kubeconfig=kubernetes-clientgroup-bootstrap.kubeconfig

拷贝生成的 kubernetes-clientgroup-bootstrap.kubeconfig 文件到其它所有的node节点,并重命名

  1. scp kubernetes-clientgroup-bootstrap.kubeconfig 192.168.1.8:/etc/kubernetes/bootstrap.kubeconfig

配置 bootstrap RBAC 权限

  1. kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --group=system:bootstrappers
  1. 否则报如下错误
    failed to run Kubelet: cannot create certificate signing request: certificatesigningrequests.certificates.k8s.io is forbidden: User "system:bootstrap:1jezb7" cannot create
  2. certificatesigningrequests.certificates.k8s.io at the cluster scope

创建自动批准相关 CSR 请求的 ClusterRole

  1. vi /etc/kubernetes/tls-instructs-csr.yaml
  2. kind: ClusterRole
  3. apiVersion: rbac.authorization.k8s.io/v1
  4. metadata:
  5. name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
  6. rules:
  7. - apiGroups: ["certificates.k8s.io"]
  8. resources: ["certificatesigningrequests/selfnodeserver"]
  9. verbs: ["create"]

导入 yaml 文件

  1. kubectl apply -f /etc/kubernetes/tls-instructs-csr.yaml

clusterrole.rbac.authorization.k8s.io "system:certificates.k8s.io:certificatesigningrequests:selfnodeserver" created

查看创建的ClusterRole

  1. kubectl describe ClusterRole/system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
 
将 ClusterRole 绑定到适当的用户组
  1. # 自动批准 system:bootstrappers 组用户 TLS bootstrapping 首次申请证书的 CSR 请求
  2. kubectl create clusterrolebinding node-client-auto-approve-csr --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --group=system:bootstrappers
    # 自动批准 system:nodes 组用户更新 kubelet 自身与 apiserver 通讯证书的 CSR 请求
  3. kubectl create clusterrolebinding node-client-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes
    # 自动批准 system:nodes 组用户更新 kubelet api 端口证书的 CSR 请求
  4. kubectl create clusterrolebinding node-server-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver --group=system:nodes
  5.  
  6. 查看已有绑定 kubectl get clusterrolebindings

动态 kubelet 配置

创建kubelet服务文件

  1. mkdir -p /var/lib/kubelet
  2. vim /etc/systemd/system/kubelet.service
  3. [Unit]
  4. Description=Kubernetes Kubelet
  5. Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  6. After=docker.service
  7. Requires=docker.service
  8. [Service]
  9. WorkingDirectory=/var/lib/kubelet
  10.  
  11. ExecStart=/usr/local/bin/kubelet \
  12. --hostname-override=k8s-wjoyxt \ #本地node节点的hostname
  13. --pod-infra-container-image=jicki/pause-amd64:3.1 \ #pod的基础镜像,即gcr的gcr.io/google_containers/pause-amd64:3.1镜像
  14. --bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig \
  15. --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
  16. --config=/etc/kubernetes/kubelet.config.json \
  17. --cert-dir=/etc/kubernetes/ssl \
  18. --logtostderr=true \
  19. --v=
  20. [Install]
  21. WantedBy=multi-user.target

创建 kubelet config 配置文件

  1. vim /etc/kubernetes/kubelet.config.json
  2.  
  3. {
  4. "kind": "KubeletConfiguration",
  5. "apiVersion": "kubelet.config.k8s.io/v1beta1",
  6. "authentication": {
  7. "x509": {
  8. "clientCAFile": "/etc/kubernetes/ssl/ca.pem"
  9. },
  10. "webhook": {
  11. "enabled": true,
  12. "cacheTTL": "2m0s"
  13. },
  14. "anonymous": {
  15. "enabled": false
  16. }
  17. },
  18. "authorization": {
  19. "mode": "Webhook",
  20. "webhook": {
  21. "cacheAuthorizedTTL": "5m0s",
  22. "cacheUnauthorizedTTL": "30s"
  23. }
  24. },
  25. "address": "172.16.6.66", #本地node节点的IP
  26. "port": ,
  27. "readOnlyPort": ,
  28. "cgroupDriver": "cgroupfs",
  29. "hairpinMode": "promiscuous-bridge",
  30. "serializeImagePulls": false,
  31. "RotateCertificates": true,
  32. "featureGates": {
  33. "RotateKubeletClientCertificate": true,
  34. "RotateKubeletServerCertificate": true
  35. },
  36. "MaxPods": "",
  37. "failSwapOn": false,
  38. "containerLogMaxSize": "10Mi",
  39. "containerLogMaxFiles": ,
  40. "clusterDomain": "cluster.local.",
  41. "clusterDNS": ["10.254.0.2"]
  42. }

以上配置中:

cluster.local. 为 kubernetes 集群的 domain
10.254.0.2 预分配的 dns 地址
"clusterDNS": ["10.254.0.2"] 可配置多个 dns地址,逗号可开, 可配置宿主机dns

启动Kubelet服务
  1. systemctl daemon-reload
  2. systemctl enable kubelet
  3. systemctl start kubelet
  4. systemctl status kubelet

验证nodes

注意:这里的 ROLES 是节点标签
关于 kubectl get node 中的 ROLES 的标签
单 Master 打标签 kubectl label node es-60 node-role.kubernetes.io/master="",当标签为 NoSchedule,表示不进行资源调度
更新标签命令为 kubectl label nodes es-60 node-role.kubernetes.io/master=:NoSchedule --overwrite
单 Node 打标签 kubectl label node es-61 node-role.kubernetes.io/node=""
关于删除 label 可使用 - 号相连 如: kubectl label nodes es-61 node-role.kubernetes.io/node-

查看自动生成的证书配置文件

  1. ls -lt /etc/kubernetes/ssl/kubelet-*

Kubelet bootstrap认证配置步骤的更多相关文章

  1. Kubelet bootstrap 流程

    首先,什么是kubelet bootstrap?在安装 k8s worker node 时,基本上 worker 的初始状态仅仅是安装了 docker 和 kubelet,worker 需要一种机制跟 ...

  2. Kubernetes Kubelet安全认证连接Apiserver

    Kubelet使用安全认证连接Apiserver,可以用Token或证书连接.配置步骤如下. 1,生成Token命令 head -c /dev/urandom | od -An -t x | tr - ...

  3. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  4. APACHE + LDAP 的权限认证配置方法

    原文地址:http://www.chinaunix.net/jh/49/627646.html 一.前言 很多朋友希望利用 Apache 通过 LDAP 进行用户认证及权限管理.     通过多次试验 ...

  5. Fortinet网络接入及安全方案配置步骤

    http://sec.chinabyte.com/200/12553700.shtml 1.概述: Fortinet无线接入及方案由以下两类设备组成: AC(Wifi接入控制器)及安全网关:Forti ...

  6. log4j.properties 详解与配置步骤

    一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失IN ...

  7. log4j.properties 详解与配置步骤(转)

    找的文章,供参考使用 转自 log4j.properties 详解与配置步骤 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR ...

  8. MySQL数据库集群进行正确配置步骤

    MySQL数据库集群进行正确配置步骤 2010-06-09 10:47 arrowcat 博客园 字号:T | T 我们今天是要和大家一起分享的是对MySQL数据库集群进行正确配置,我前两天在相关网站 ...

  9. Apache安装配置步骤

    注释:这里以Linux 红帽商业版为例~~~~~~~纯手打啊 Apache安装配置步骤 准备:关闭其他虚拟设备 #/etc/init.d/libvirtd stop #/etc/init.d/xend ...

随机推荐

  1. 2.常用adb命令的使用

    使用电脑连接手机,查看手机的唯一编号,如果是模拟器,就是显示地址和端口号: adb devices 使用adb安装app应用: adb install apk路径和包名 -r 允许覆盖安装 -s 将a ...

  2. sqlserver查询当前库下,一张表的表名,字段名,字段类型,字段长度

    sqlserver版: 查询当前数据库下所有表名: select * from sys.tables; 查询当前库下,一张表的表名,字段名,字段类型,字段长度: select a.name 表名,b. ...

  3. PHP涉及的所有英文单词

    PHP涉及的所有英文单词拦路虎 PHP再火,也会让一部同学心生畏惧,因为看到编辑器中那一串串英文单词,担心自己英文不好,从而对能学会PHP的决心产生动摇.其实大可不必,英文在学习PHP过程中真的连级别 ...

  4. 【leetcode】453. Minimum Moves to Equal Array Elements

    problem 453. Minimum Moves to Equal Array Elements 相当于把不等于最小值的数字都减到最小值所需要次数的累加和. solution1: class So ...

  5. 移动端IOS 固定下方的输入框,点击输入框位置会变的修复

    if(data=="ios"){ var _this = $(".publish"); //无键盘时输入框到浏览器窗口顶部距离 var noInputViewH ...

  6. select添加option

    本文介绍select添加option的两种方法 1.使用selectObject.add(option,before)方法,其中 option为要添加选项元素.必需是 option 或 optgrou ...

  7. PythonStudy——Python 内置函数 Built-in function

    内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...

  8. jsp后台取出request请求头

    请求发到a2这个servlet 在这个servlet中请求转发到index.jsp 在jsp中如下的java代码 Enumeration headernames=request.getHeaderNa ...

  9. varchar字数

    每行数据最多65000字节 长度是当前字符集的字符长度,而不是字节长度! 参考:https://www.cnblogs.com/billyxp/p/3548540.html 经常变化的字段用varch ...

  10. Jenkins 配置 FindBugs,Checkstyle,PMD 实现代码的静态检查 (14)

    一.插件介绍 FindBugs:静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具,就可以在不实际运行程序的情况对软件进行分析.它可以帮助改进代码的 ...