TLS Bootstraping:在kubernetes集群中,Node上组件kebelet和kube-proxy都需要与kube-apiserver进行通信,为了增加传输安全性,采用https方式,

这就涉及到node组件需要具备kube-apiserver用的证书颁发机构CA签发客户端证书,当规模较大时,这种客户端证书颁发需要大量工作,同时也会增加集群扩展复杂度。

为了简化流程,kubernetes引入了TLS bootstraping机制来自动颁发客户端证书,所以强烈建议在node上使用这种方式

具体实现步骤有5步

前提是已经存在二进制环境的集群

1、kube-apiserver启用bootstrap Token (master操作)

--enable-bootstrap-token-auth=true (必须启用)

查看的文件路径:

1:ps -ef | grep kube-apiserver #查找到安装路径

2:确认system守护文件:cat /usr/lib/systemd/system/kube-apiserver.service

EnvironmentFile就是配置文件的位置,找到配置文件位置后查看是否有

--enable-bootstrap-token-auth=true 这个选项或者启用状态

2、使用Secret存储Bootstrap Token

Bootstrap Token值格式:07401b.f395accd246ae52d  (左边是token,右边是Token Secret)

生成token ID方式:

head -c 16 /dev/urandom | od -An -t x | tr -d ' '

cat secret-token.yaml

apiVersion: v1
kind: Secret
metadata:
name: bootstrap-token-07401b
namespace: kube-system
type: bootstrap.kubernetes.io/token
stringData:
description: "The default bootstrap token generated by 'kubeadm init'."
token-id: 07401b
token-secret: f395accd246ae52d
expiration: 2020-10-10T03:22:11Z #token id 过期时间,当前时间往后推
usage-bootstrap-authentication: "true"
usage-bootstrap-signing: "true"
auth-extra-groups: system:bootstrappers:worker,system:bootstrappers:ingress

生效清单文件

kubectl apply -f secret-token.yaml
kubectl get secret -n kube-system

3、创建RBAC角色绑定,运行kubelet bootstrap创建CSR请求

4、kubelet配置Bootstrap kubeconfig文件

5、查看申请和批准

kubectl get crs
kubectl certificate approve xxx

3-5一起操作

master操作

创建认证授权清单文件

cat bootstrap.yaml

# enable bootstrapping nodes to create CSR
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: create-csrs-for-bootstrapping
subjects:
- kind: Group
name: system:bootstrappers
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: system:node-bootstrapper
apiGroup: rbac.authorization.k8s.io

生效认证清单文件

kubectl apply -f bootstrap.yaml

node操作

相关系统优化

纯净的系统,优化相关参数,关闭防火墙、selinux、docker(加速)、关闭swap等

1、时间同步

echo "#time sync by fage at 2019-7-22" >>/var/spool/cron/root 
echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >>/var/spool/cron/root
systemctl restart crond.service

2、关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0 && sed -i s#SELINUX=enforcing#SELINUX=disable#g /etc/selinux/config

3、更改主机名

hostname k8s-node-3
echo " k8s-node-3" >/etc/hostname

4、更改hosts文件

cat >/etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.160 k8s-master-1
192.168.10.161 k8s-node-1
192.168.10.162 k8s-node-2
192.168.10.163 k8s-node-3
EOF

5、节点node要禁用swap设备  不禁用要配置声明

swapoff -a
sed -i "s@/dev/mapper/centos-swap swap@#/dev/mapper/centos-swap swap@g" /etc/fstab

6、将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效配置

安装docker

方法一:yum方式安装

yum install -y docker
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload && systemctl start docker.service && systemctl enable docker.service

方法二:二进制方式

在部署好的机器上直接复制新增加的节点上,没有就下载软件包或者选择yum安装

scp -r /usr/lib/systemd/system/docker.service root@192.168.10.163:/usr/lib/systemd/system/
cd /usr/bin/
scp -r containerd containerd-shim docker dockerd docker-init docker-proxy runc root@192.168.10.163:/usr/bin/
scp -r /etc/docker root@192.168.10.163:/etc/
systemctl daemon-reload && systemctl start docker.service && systemctl enable docker.service

其他部署好的node上操作:拷贝节点kubelet、CNI、kube-proxy组件到节点

scp -r /opt/kubernetes/ root@192.168.10.163:/opt/
scp -r /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@192.168.10.163:/usr/lib/systemd/system/
scp -r /opt/cni/ root@192.168.10.163:/opt

新部署的node操作:

需要删除kubelet的相关配置文件,kubelet的证书会自动颁发,每个节点上的证书都不一样,kubelet.kubeconfig自动生成,bootstrap.kubeconfig需要重新生成

rm -f /opt/kubernetes/ssl/kube*
cd /opt/kubernetes/cfg/ && rm -f kubelet.kubeconfig bootstrap.kubeconfig

更改指向master地址、主机名

sed -i "s#k8s-master#k8s-node-3#g" /opt/kubernetes/cfg/kubelet.conf
sed -i "s#k8s-master#k8s-node-3#g" /opt/kubernetes/cfg/kube-proxy-config.yml

创建bootstrap

cat >/opt/kubernetes/cfg/bootstrap.kubeconfig <<EOF
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: /opt/kubernetes/ssl/ca.pem
server: https://192.168.10.160:6443
name: bootstrap
contexts:
- context:
cluster: bootstrap
user: kubelet-bootstrap
name: bootstrap
current-context: bootstrap
preferences: {}
users:
- name: kubelet-bootstrap
user:
token: 07401b.f395accd246ae52d
EOF

需要重启docker和kubelet

systemctl restart docker.service
systemctl start kubelet && systemctl enable kubelet
systemctl start kube-proxy && systemctl enable kube-proxy

master操作:验证配置、批准加入

kubectl get csr       #查询到最新的颁发请求,复制这个请求
kubectl certificate approve node-csr-xxxxxxxxxxxxx #批准颁发证书
kubectl get nodes # 会自动安装cni网络插件,安装完成后就会就绪了

至此node节点加入完成

二进制K8S集群使用Bootstrap Token 方式增加Node的更多相关文章

  1. k8s集群,使用pvc方式实现数据持久化存储

    环境: 系统 华为openEulerOS(CentOS7) k8s版本 1.17.3 master 192.168.1.244 node1 192.168.1.245 介绍: 在Kubernetes中 ...

  2. k8s集群Canal的网络控制 原

    1 简介 直接上干货 public class DispatcherServlet extends HttpServlet { private Properties contextConfigProp ...

  3. 二进制方法-部署k8s集群部署1.18版本

    二进制方法-部署k8s集群部署1.18版本 1. 前置知识点 1.1 生产环境可部署kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式 kuberadm Kubea ...

  4. Kubernetes全栈架构师(二进制高可用安装k8s集群部署篇)--学习笔记

    目录 二进制高可用基本配置 二进制系统和内核升级 二进制基本组件安装 二进制生成证书详解 二进制高可用及etcd配置 二进制K8s组件配置 二进制使用Bootstrapping自动颁发证书 二进制No ...

  5. Kubernetes全栈架构师(二进制高可用安装k8s集群扩展篇)--学习笔记

    目录 二进制Metrics&Dashboard安装 二进制高可用集群可用性验证 生产环境k8s集群关键性配置 Bootstrapping: Kubelet启动过程 Bootstrapping: ...

  6. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  7. 国内k8s集群部署的几种方式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lusyoe/article/details/80217291前言总所周知,由于某种原因,通过官方的方 ...

  8. 二进制部署1.23.4版本k8s集群-5-部署Master节点服务

    1.安装Docker 在21.22.200三台机器上安装Docker.安装命令: 在21.22.200三台主机上部署Docker. ~]# curl -fsSL https://get.docker. ...

  9. 二进制部署1.23.4版本k8s集群-6-部署Node节点服务

    本例中Master节点和Node节点部署在同一台主机上. 1 部署kubelet 1.1 集群规划 主机名 角色 IP CFZX55-21.host.com kubelet 10.211.55.21 ...

随机推荐

  1. 解读AngularJS的setupModuleLoader函数

    http://www.cnblogs.com/whitewolf/p/angular-module-declare-and-get.html 看了上面这篇文章,自己读了一下代码,以下是个人理解,如有请 ...

  2. ThreadLocal是什么?谈谈你对他的理解

    1.ThreadLocal是什么 从名字我们就可以看到ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的.ThreadLocal为变 ...

  3. 11_Python的69个内置函数详解

    1.内置函数分类 思维导图: https://www.processon.com/view/link/5dcabc48e4b0bd68d813b24f 2.基础数据类型-和数字相关的函数(14) 数据 ...

  4. ZT:做一个连自己都羡慕的人

    当你越来越杰出时,自然有人关注你, 当你越来越有能力时,自然会有人看得起你, 改变自己,你才有自信,梦想才会慢慢的实现. 做最好的自己,懒可以毁掉一个人,勤可以激发一个人! 不要等夕阳西下的时候才对自 ...

  5. .NET Core 下使用 Apollo 配置中心

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景.服务 ...

  6. 让document.write的广告无阻塞的加载

    广告代码分析 很多第三方的广告系统都是使用document.write来加载广告,如下面的一个javascript的广告链接. 1 <script type="text/javascr ...

  7. EMQ集群搭建实现高可用和负载均衡(百万级设备连接)

    一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...

  8. 超详细!盘点Python中字符串的常用操作

    在Python中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a = 'abc' b= "abc" c = '''abc''' d = " ...

  9. linux下锁定关键文件/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab

    锁定/etc/passwd./etc/shadow./etc/group./etc/gshadow./etc/inittab,锁定关键的系统文件可以防止服务器提权后被篡改 1.对关键文件进行加锁,任何 ...

  10. Swift入门

    Swift 入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者工 ...