- 单节点部署规划
- K8S部署
- 一、etcd群集部署
- 二、flannel网络配置
- 三、部署master组件
- `在master上操作`
- 1.解压工具包
- 2.创建kubernetes工作目录及证书目录
- 3.定义ca证书配置的json文件
- 5.生成kubernetes的ca证书
- 6.用于请求服务端证书签发的请求文件
- 7.生成服务端ca证书
- 8.制作admin管理用户的证书请求文件
- 9.生成admin的ca证书
- 10.制作用于proxy代理的ca证书请求文件
- 11.生成proxy的ca证书
- 12.查看K8S证书
- 13.解压kubernetes压缩包
- 14.复制关键命令文件到/opt/kubernetes/bin/下
- 15.制作token令牌文件
- 16.开启apiserver
- 17.查看配置文件
- 18.查看监听的https端口
- 19.启动scheduler服务
- 20.启动controller-manager
- 21.查看master 节点状态
- 22.将kubelet 和 kube-proxy 两个国家scp给两个节点
- `在node01节点上部署`
- `回到master上`
- `在node01节点操作`
- `在node02节点操作`
- `再回到master上操作`
- `到node01节点操作`
- `到node01节点操作`
- `到node01节点操作`
- `到node01节点操作`
单节点部署规划
1.相关软件包
Master:192.168.10.10 kube-apiserver kube-controller-manager kube-scheduler etcd
Node01:192.168.10.20 kubelet kube-proxy docker flannel etcd
Node02:192.168.10.30 kubelet kube-proxy docker flannel etcd
2.注意点
- 在生产环境中 Etcd 一般都是放在master上的,(因为master是要确保不能宕机的,因此放在master上较为安全,因为是实验环境,因此放到node节点上也行)
- master服务器上需要apiserver核心部件,contorller、scheduler部件以及etcd数据库node节点需要docker环境,flannel网络插件分配网络,etcd数据库群集(部署在node上方便实验),proxy代理部件,以及kubelet部件,kubelet在这个单节点实验中主要的作用是想master提交证书的申请
注意点:在master上一定不要安装docker,为了保障master的安全性,预防黑客攻破接地那服务器,通过docker控制master
K8S部署
一、etcd群集部署
官网地址:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1
在所有主机上操作
1.给三台主机设置别名
[root@localhost ~]# hostnamectl set-hostname master01
[root@localhost ~]# su
[root@master01 ~]#
[root@localhost ~]# hostnamectl set-hostname node01
[root@localhost ~]# su
[root@master01 ~]#
[root@localhost ~]# hostnamectl set-hostname node02
[root@localhost ~]# su
[root@master01 ~]#
在master上操作
1.创建k8s工作目录
[root@master01 ~]# mkdir k8s
[root@master01 ~]# cd k8s/
2.下载cfssl工具,三个工具
下载证书制作工具(cfssl cfssl-certinfo cfssljson)已经下载好了,直接从宿主机拿过来
[root@localhost k8s]# vim cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
[root@localhost k8s]# bash cfssl.sh ##执行脚本下载cfssl官方包
[root@master01 k8s]# ls /usr/local/bin/ ##已经下载好了,直接从宿主机拉取过来
cfssl cfssl-certinfo cfssljson
[root@master01 k8s]# mv * /usr/local/bin/
[root@master01 k8s]# cd /usr/local/bin/
[root@master01 bin]# chmod +x *
--------------------------------------------------------------------------------------------------------------
工具包用途
cfssl :生成证书工具
cfssljson:通过传入json文件生成证书
cfssl-certinfo:查看证书信息
--------------------------------------------------------------------------------------------------------------
3.定义ca证书的配置文件
[root@master01 bin]# mkdir ~/k8s/etcd-cert ##创建证书存放目录 [root@master01 k8s]# cd ~/k8s/etcd-cert/ [root@master01 etcd-cert]# cat > ca-config.json <<EOF > { > "signing": { ##定义了下面的签字内容 > "default": { > "expiry": "87600h" ## 有效期10年 > }, > "profiles": { ## 定义文件类型为配置文件 > "www": { ## 以www开头 > "expiry": "87600h", ## 有效期10年 > "usages": [ ## 用法 > "signing", ## 签字 > "key encipherment", ## 加密秘钥的方式 > "server auth", ## 服务器认证 > "client auth" ## 客户端认证 > ] > } > } > } > } > EOF
—————————————————————————————————————
补充解释:
ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证;
client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证;
—————————————————————————————————————
4.实现证书签名的请求文件
[root@master01 etcd-cert]# cat > ca-csr.json <<EOF
{
"CN": "etcd CA", ## CN 指定该证书的 User 为 etcd CA;etcd的ca证书
"key": { ## 定义key类型
"algo": "rsa", ## rsa非对称秘钥
"size": 2048 ## 秘钥长度,注意点:几个证书指明的秘钥长度一定要一样
},
"names": [ ## 证书的names内指定证书包含的信息,可以包含国家,地区,公司,部门等等(注意:几个证书的names信息一定要相同)
{
"C": "CN", ## 中国
"L": "Beijing", ## 北京
"ST": "Beijing" ## 北京时区
}
]
}
EOF
————————————————————————————————
补充解释:
- “CN”:“Common Name”,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
CN 指定该证书的 User 为 etcd CA; - “O”:“Organization”,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);也可以是组织
- “OU”:组织单位
- key:证书加密的方式,一般是RSA 2048
- L 字段 :所在城市 (Locality) 简称
- S 字段:所在省份 (State/Provice)
- C 字段:所在国家 (Country),只能是国家字母缩写,如中国:CN
- names:证书包含的信息,可以包含国家,地区,公司,部门等等,我们可以在kubeadm中修改对于这部分内容的验证,达到证书的管理控制功能。
———————————————————————————————
5.生成ca证书,生成ca-key.pem ca.pem
[root@master01 etcd-cert]# ls
ca-config.json ca-csr.json
[root@master01 etcd-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
2020/11/22 02:59:32 [INFO] generating a new CA key and certificate from CSR
2020/11/22 02:59:32 [INFO] generate received request
2020/11/22 02:59:32 [INFO] received CSR
2020/11/22 02:59:32 [INFO] generating key: rsa-2048
2020/11/22 02:59:33 [INFO] encoded CSR
2020/11/22 02:59:33 [INFO] signed certificate with serial number 9797308770013994243491625199529899647280639512
[root@master01 etcd-cert]# ls ##生成两个ca证书
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
-
cfssl gencert生成"CA证书"和"CA私钥"的指令,cfssljson -bare ca - 指读取基本信息
-
cfssljson:通过传入json文件生成证书
-
生成: ca.pem ca-key.pem ca.csr (证书签名请求,用于交叉签名或重新签名)
6.指定etcd三个节点之间的通信验证
[root@master01 etcd-cert]# cat > server-csr.json <<EOF
{
"CN": "etcd", ## 指明 CN 指定该证书的 User 为 etcd ,etcd的server证书
"hosts": [ ## 指定通讯节点
"192.168.10.10",
"192.168.10.20",
"192.168.10.30"
],
"key": { ##定义秘钥
"algo": "rsa", ## rsa类型
"size": 2048 ## 长度是2048
},
"names": [ ## 证书的名称内指定了授权证书的CA机构的具体区域
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
7. 生成ETCD服务端证书
server-key.pem 和 server.pem
[root@master01 etcd-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
2020/11/22 03:06:19 [INFO] generate received request
2020/11/22 03:06:19 [INFO] received CSR
2020/11/22 03:06:19 [INFO] generating key: rsa-2048
2020/11/22 03:06:19 [INFO] encoded CSR
2020/11/22 03:06:19 [INFO] signed certificate with serial number 703113062882105094636341796051856934816186724582
[root@master01 etcd-cert]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server.csr server-csr.json server-key.pem server.pem
———————————————————————————
注意:到这一步, 有用的文件是:
-
ca-key.pem ca.pem server-key.pem server.pem 这四个证书(两个server证书,两个ca证书)
-
ca的签名文件ca.csr可以删除,是没有用的,但是 ca-csr.json server-csr.json ca-config.json 这三个json格式的证书最好自己保留一份下来,里面记录了秘钥长度,CA机构信息(如beijin)等,以防更新证书时忘记了里面的信息,导致更新失败。毕竟生产环境中的服务节点有很多
—————————————————————------------————————
8.下载ETCD二进制包,并解压
————————————————————————-----———————
ETCD 二进制包下载地址:https://github.com/etcd-io/etcd/releases
需要用到下面三个软件包,可以在上面网址下载,(已经下载好了,直接从宿主机中拿来)
etcd-v3.3.10-linux-amd64.tar.gz
flannel-v0.10.0-linux-amd64.tar.gz
kubernetes-server-linux-amd64.tar.gz
———————————————————————————————
[root@master01 ~]# ls *.tar.gz ##查看相关软件包
etcd-v3.3.10-linux-amd64.tar.gz flannel-v0.10.0-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz
[root@master01 ~]# mv $(ls *.tar.gz) k8s/ ## 将这几个包移动到 k8s 目录下
[root@master01 k8s]# ls ~/k8s/*.tar.gz ## 查看是否移动到 k8s 目录下
etcd-cert etcd-v3.3.10-linux-amd64.tar.gz flannel-v0.10.0-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz
[root@master01 k8s]# tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
[root@master01 k8s]# ls
etcd-v3.3.10-linux-amd64Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
9.创建etcd工作目录
[root@master01 k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p ##创建k8s目录下三个子目录,cfg配置文件目录、bin命令文件目录、ssl证书文件目录
[root@master01 k8s]# mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/ ##将etcd 和 etcdctl这两个工具存放到/opt/etcd/bin/下
[root@master01 k8s]# cp etcd-cert/*.pem /opt/etcd/ssl/ ## 将几个证书文件复制放到ssl目录下
[root@master01 k8s]# cd /opt/etcd/bin/ ##cd 到 /opt/etcd/bin/ 下
[root@master01 bin]# rz -E ##将宿主机上已经写好的 etcd.sh 构建集群的脚本复制过来
[root@master01 bin]# ls etcd.sh
etcd.sh
————————————————————————————————
[root@master01 bin]# cat etcd.sh ##查看etcd.sh脚本内容
# !/bin/bash
# example: bash etcd.sh etcd01 192.168.10.10 etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380 ##执行脚本侯建集群的示例,
ETCD_NAME=$1 ## 定义了变量,值是"示例命令"中的etcd01
ETCD_IP=$2 ## 定义的变量,值是etcd01的ip
ETCD_CLUSTER=$3 ## 定义了变量值为 etcd 群集中的其他成员的 名称 及 ip 地址
WORK_DIR=/opt/etcd ##定义了工作目录
cat <<EOF >$WORK_DIR/cfg/etcd ## 生成etcd文件到cfg配置文件目录下
# [Member] ## 对etcd成员的配置
ETCD_NAME="${ETCD_NAME}"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ## 定义数据存放目录
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380" ## 开放群集之间内部通讯的一个端口 2379
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379" ## 自己(即etcd01)对外客户端开放的一个端口是2380
# [Clustering] ## 集群内的配置
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380" ## 同样群集内部通讯的端口
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379" ## 对外开放的端口
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}" ## 群集内所有节点的配置
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ## token认证令牌"etcd-cluster",每个etcd节点必须一致
ETCD_INITIAL_CLUSTER_STATE="new" ## 指明状态,构建新集群的状态
EOF
cat <<EOF >/usr/lib/systemd/system/etcd.service ## systemctl启动文件
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify ## 类型:notify
EnvironmentFile=${WORK_DIR}/cfg/etcd ## 配置文件所在位置
ExecStart=${WORK_DIR}/bin/etcd \ ## 启动文件 /opt/etcd/bin/etcd
--name=\${ETCD_NAME} \ ## 指明了名称 etcd01
--data-dir=\${ETCD_DATA_DIR} \ ## 指明数据存放目录
--listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \ ## 指定群集间内部通讯端口2380
--listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \ ## 客户端监听端口2379,监听本地2379端口,放开给客户端
--advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \
--initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=\${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \
--initial-cluster-state=new \
--cert-file=${WORK_DIR}/ssl/server.pem \ ## 指明服务端证书
--key-file=${WORK_DIR}/ssl/server-key.pem \ ## 指明服务端秘钥证书
--peer-cert-file=${WORK_DIR}/ssl/server.pem \ ## 匹配服务端证书
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \ ## 匹配服务端秘钥证书
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \ ## 指定可信证书CA证书
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem ## 匹配可信证书CA证书
Restart=on-failure ## 重启策略
LimitNOFILE=65536 ## 限制用户打开最大文件数
[Install]
WantedBy=multi-user.target ## 运行多用户登入
EOF
systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd
—————————————————————————————————
10.进入卡住状态等待其他节点加入
[root@master01 bin]# bash etcd.sh etcd01 192.168.10.10 etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380
[root@master01 bin]# ps aux | grep etcd ##使用另外一个终端打开,会发现etcd进程已经开启
11.将 /opt/ 目录下 etcd/ 目和启动文件cp到其他etcd节点
(里面有配置文件、证书文件、命令文件),然后进行部分修改即可
[root@master01 bin]# scp -r /opt/etcd/ root@192.168.10.20:/opt/
root@192.168.10.20's password:
etcd 100% 509 238.5KB/s 00:00
etcd 100% 18MB 67.1MB/s 00:00
etcdctl 100% 15MB 91.6MB/s 00:00
etcd.sh 100% 1764 929.1KB/s 00:00
ca-key.pem 100% 1675 2.2MB/s 00:00
ca.pem 100% 1265 958.4KB/s 00:00
server-key.pem 100% 1679 1.7MB/s 00:00
server.pem 100% 1338 1.4MB/s 00:00
[root@master01 bin]# scp -r /opt/etcd/ root@192.168.10.30:/opt/
root@192.168.10.30's password:
etcd 100% 509 238.5KB/s 00:00
etcd 100% 18MB 67.1MB/s 00:00
etcdctl 100% 15MB 91.6MB/s 00:00
etcd.sh 100% 1764 929.1KB/s 00:00
ca-key.pem 100% 1675 2.2MB/s 00:00
ca.pem 100% 1265 958.4KB/s 00:00
server-key.pem 100% 1679 1.7MB/s 00:00
server.pem 100% 1338 1.4MB/s 00:00
[root@master01 bin]# scp /usr/lib/systemd/system/etcd.service root@192.168.10.20:/usr/lib/systemd/system/
[root@master01 bin]# scp /usr/lib/systemd/system/etcd.service root@192.168.10.30:/usr/lib/systemd/system/
在node01节点上操作
1.修改配置文件
[root@node01 ~]# cd /opt/etcd/cfg
[root@node01 ~]# vim etcd
# [Member]
ETCD_NAME="etcd03" ##修改etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.30:2380" ##修改ip
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.30:2379" ##修改ip
# [Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.10.30:2380" ##修改ip
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.10.30:2379" ##修改ip
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.10.10:2380,etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
2.启动etcd服务
注意:要在master处于等待etcd群集节点加入状态下启动etcd服务
[root@localhost ssl]# systemctl start etcd
[root@localhost ssl]# systemctl status etcd
在node02节点上操作
1.修改配置文件
[root@node02 ~]# cd /opt/etcd/cfg
[root@node02 ~]# vim etcd
# [Member]
ETCD_NAME="etcd03" ##修改etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.30:2380" ##修改ip
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.30:2379" ##修改ip
# [Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.10.30:2380" ##修改ip
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.10.30:2379" ##修改ip
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.10.10:2380,etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
2.启动etcd服务
[root@localhost ssl]# systemctl start etcd
[root@localhost ssl]# systemctl status etcd
3.检查etcd群集状态
在任意etcd节点都可以检查
[root@node02 cfg]# cd /opt/etcd/ssl/
[root@node02 ssl]# /opt/etcd/bin/etcdctl \
--ca-file=ca.pem \
--cert-file=server.pem \
--key-file=server-key.pem \
--endpoints=\
"https://192.168.10.10:2379,\
https://192.168.10.20:2379,\
https://192.168.10.30:2379" \
cluster-health
member 23599d5be7403bf7 is healthy: got healthy result from https://192.168.10.30:2379
member 245f0eaff21d8741 is healthy: got healthy result from https://192.168.10.10:2379
member be3fc3d5e1dfe2ce is healthy: got healthy result from https://192.168.10.20:2379
cluster is healthy
二、flannel网络配置
在node01节点操作
1.安装docker-ce
[root@node01 cfg]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@node01 ssl]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node01 ssl]# yum install -y docker-ce
[root@node01 cfg]# sudo mkdir -p /etc/docker
[root@node01 cfg]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://c98mzoaz.mirror.aliyuncs.com"]
}
EOF
[root@node01 cfg]# sudo systemctl daemon-reload
[root@node01 cfg]# echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
[root@node01 cfg]# sysctl -p
net.ipv4.ip_forward = 1
[root@node01 cfg]# systemctl restart network
[root@node01 cfg]# systemctl restart docker
[root@node02 cfg]# systemctl enable docker
[root@node02 cfg]# systemctl restart network
node02节点操作
1.安装docker-ce
[root@node01 cfg]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@node01 ssl]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node01 ssl]# yum install -y docker-ce
[root@node01 cfg]# sudo mkdir -p /etc/docker
[root@node01 cfg]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://c98mzoaz.mirror.aliyuncs.com"]
}
EOF
[root@node01 cfg]# sudo systemctl daemon-reload
[root@node01 cfg]# echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
[root@node01 cfg]# sysctl -p
net.ipv4.ip_forward = 1
[root@node01 cfg]# systemctl restart network
[root@node01 cfg]# systemctl restart docker
[root@node02 cfg]# systemctl enable docker
[root@node02 cfg]# systemctl restart network
master上操作
1.入分配的子网段到ETCD中,供flannel使用
在这个实验中并不一定非要在master上操作,因为节点上也有etcd群集,但是生产环境中etcd一般是布局在master上的
[root@master01 ssl]# cd /opt/etcd/ssl/
[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \
--endpoints="https://192.168.10.10:2379,\
https://192.168.10.20:2379,\
https://192.168.10.30:2379" \
set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
##解释:
--endpoints :指定etcd节点
set :插入 "键值对" 数据信息 ,/coreos.com/network/config 为自定义的集合名;
'{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}' 为 集合内的键值对信息
##返回结果{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}##
2.查看写入etcd数据库的网络规划信息
[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \
--endpoints="https://192.168.10.10:2379,\
https://192.168.10.20:2379,\
https://192.168.10.30:2379" \
get /coreos.com/network/config ## get查看数据
{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}
到node节点操作
(两个节点操作相同)
1.解压flannel工具包
[root@localhost ~]# ls ## 需要 flannel 软件包
flannel-v0.10.0-linux-amd64.tar.gz
[root@localhost ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz ##解压压缩包,生成下面是两个文件
flanneld
mk-docker-opts.sh
README.md
2.创建kubernetes工作目录
目录下创建配置文件目录、执行脚本目录、证书文件目录,并将解压生成的 mk-docker-opts.sh 和 flanneld 放到执行脚本目录下
[root@node01 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@node01 ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/
[root@localhost bin]# ls ## 将 flannel.sh 脚本文件从宿主机拉进来
flannel.sh
[root@localhost bin]# chmod +x flannel.sh ##给执行权限
—————------———————分析脚本——————---------——————
[root@localhost bin]# cat flannel.sh ## 查看分析脚本
# !/bin/bash
ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"}
## 指定etcd节点,从2379端口请求,${1:-"http://127.0.0.1:2379"} 的含义是传入参数$1,若没有$1,这赋值变量"http://127.0.0.1:2379"
cat <<EOF >/opt/kubernetes/cfg/flanneld ## 制作 kubernetes 配置文件
FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \ ## 通过证书连接etcd,请求网段信息
-etcd-cafile=/opt/etcd/ssl/ca.pem \
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem"
EOF
cat <<EOF >/usr/lib/systemd/system/flanneld.service ##生成启动脚本
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service ## 指明了依赖于docker服务,所以要先安装docker
[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure ## 重启策略
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld
———————————————————————————————
3.开启flannel网络功能
[root@node01 bin]# ./flannel.sh https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379
Created symlink from /etc/systemd/system/multi-user.target.wants/flanneld.service to /usr/lib/systemd/system/flanneld.service.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86V1PlYU-1605984203975)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605973039103.png)]
4.配置docker连接 flannel
[root@localhost bin]# vim /usr/lib/systemd/system/docker.service ##修改docker服务文件
EnvironmentFile=/run/flannel/subnet.env ## 添加这个环境配置文件
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock ##在准启动项后面添加"$DOCKER_NETWORK_OPTIONS",在-H前面添加
[root@localhost bin]# systemctl daemon-reload
[root@localhost bin]# systemctl restart docker
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGJjZx3y-1605984203978)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605973514472.png)]
——————————————————————————————
补充:
我们可以在flannel的网段划分的环境文件 /run/flannel/subnet.env 中查看到 $DOCKER_NETWORK_OPTIONS 这个变量的值
[root@localhost bin]# cat /run/flannel/subnet.env
DOCKER_OPT_BIP="--bip=172.17.37.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"
DOCKER_NETWORK_OPTIONS=" --bip=172.17.37.1/24 --ip-masq=false --mtu=1450"
## 可以看到这个变量,设置了bip网桥地址,--ip-masq=false不进行地址伪装,--mtu=1450最大传输单元1450(最大值是1500)
flannelhi依据写入到etcd数据库的网段信息,进行子网划分,并将划分的网段信息写入到/run/flannel/subnet.env环境变量文件中。
——————————————————————————————
5.进行flannel 网络的测试,证明其路由功能
5.1 在node1节点创建容器
[root@node01 bin]# docker run -itd --name centos centos:7 /bin/bash
[root@node01 bin]# docker exec -it centos /bin/bash
[root@748e61b13bda /]# yum -y install net-tools
5.2 在node2节点创建容器
[root@node02 bin]# docker run -itd --name centos centos:7 /bin/bash
[root@node02 bin]# docker exec -it centos /bin/bash
[root@feb848f18a3a /]# yum -y install net-tools
三、部署master组件
master三部件:apiserver、controller-manager、scheduler
在master上操作
1.解压工具包
[root@master01 ~]# ls ##从宿主机将软件包拿过来
master.zip
[root@master01 ~]# unzip master.zip ##解压后获得三部件的脚本
Archive: master.zip
inflating: apiserver.sh
inflating: controller-manager.sh
inflating: scheduler.sh
[root@master01 ~]# ls *.sh
apiserver.sh controller-manager.sh scheduler.sh
[root@master01 ~]# mv *.sh k8s/
2.创建kubernetes工作目录及证书目录
[root@master01 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@master01 ~]# mkdir ~/k8s/k8s-cert
3.定义ca证书配置的json文件
[root@master01 ~]# cd ~/k8s/k8s-cert/
[root@master01 k8s-cert]# cat > ca-config.json <<EOF
{
"signing": { ## 签名,定义了签署的证书可以用于其他多个证书的申请
"default": {
"expiry": "87600h" ## 签名有效期10年
},
"profiles": { ## 描述信息
"kubernetes": { ## 服务名
"expiry": "87600h", ## 有效期10年
"usages": [ ## 使用说明,用法
"signing", ## 用于签名
"key encipherment", ## 加密秘钥
"server auth", ## 用于服务端认证
"client auth" ## 用于客户端认证
]
}
}
}
}
EOF
[root@master01 k8s-cert]# ls
ca-config.json
4.用于ca证书签发的请求文件
[root@master01 k8s-cert]# cat > ca-csr.json <<EOF
{
"CN": "kubernetes", ## 该证书的 User 为 "kubernetes"
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing",
"O": "k8s", ##kube-apiserver从证书中提取该字段作为请求用户所属的组 (Group);也可以是组织
"OU": "System"
}
]
}
EOF
[root@master01 k8s-cert]# ls
ca-config.json ca-csr.json
5.生成kubernetes的ca证书
依赖于ca-csr.json(ca签发请求证书)来签发ca证书
[root@master01 k8s-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
2020/11/22 08:40:06 [INFO] generating a new CA key and certificate from CSR
2020/11/22 08:40:06 [INFO] generate received request
2020/11/22 08:40:06 [INFO] received CSR
2020/11/22 08:40:06 [INFO] generating key: rsa-2048
2020/11/22 08:40:06 [INFO] encoded CSR
2020/11/22 08:40:06 [INFO] signed certificate with serial number 144724952924774536196355667686885693995953286118
6.用于请求服务端证书签发的请求文件
[root@master01 k8s-cert]# cat > server-csr.json <<EOF
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1",
"127.0.0.1",
"192.168.10.10",
"192.168.10.40",
"192.168.10.100",
"192.168.10.50",
"192.168.10.60",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
[root@master01 k8s-cert]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server-csr.json
7.生成服务端ca证书
依赖于ca.pem(ca证书)、ca-key.pem(ca秘钥证书)、 ca-config.json(ca配置文件)来生成服务端证书
[root@master01 k8s-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
2020/11/22 08:45:32 [INFO] generate received request
……省略部分
specifically, section 10.2.3 ("Information Requirements").
[root@master01 k8s-cert]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server.csr server-csr.json server-key.pem server.pem
8.制作admin管理用户的证书请求文件
[root@master01 k8s-cert]# cat > admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "system:masters",
"OU": "System"
}
]
}
EOF
9.生成admin的ca证书
[root@master01 k8s-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
2020/11/22 08:55:02 [INFO] generate received request
2020/11/22 08:55:02 [INFO] received CSR
……省略部分
Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
[root@master01 k8s-cert]# ls
admin.csr admin-key.pem ca-config.json ca-csr.json ca.pem server-csr.json server.pem
admin-csr.json admin.pem ca.csr ca-key.pem server.csr server-key.pem
10.制作用于proxy代理的ca证书请求文件
[root@master01 k8s-cert]# cat > kube-proxy-csr.json <<EOF
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
11.生成proxy的ca证书
同样依赖于ca.pem(ca证书)、ca-key.pem(ca秘钥证书)、 ca-config.json(ca配置文件)来生成proxy的证书
[root@master01 k8s-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
2020/11/22 08:59:29 [INFO] generate received request
2020/11/22 08:59:29 [INFO] received CSR
……省略部分
(https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
[root@master01 k8s-cert]# ls
admin.csr admin.pem ca-csr.json kube-proxy.csr kube-proxy.pem server-key.pem
admin-csr.json ca-config.json ca-key.pem kube-proxy-csr.json server.csr server.pem
admin-key.pem ca.csr ca.pem kube-proxy-key.pem server-csr.json
12.查看K8S证书
批注:在宿主机内写了8个证书生成的汇总脚本,可以直接拿来用,不用一步一步来生成。
[root@master01 k8s-cert]# ls *pem
admin-key.pem admin.pem ca-key.pem ca.pem kube-proxy-key.pem kube-proxy.pem server-key.pem server.pem
[root@master01 k8s-cert]# cp ca*pem server*pem /opt/kubernetes/ssl/
[root@master01 k8s-cert]# ls /opt/kubernetes/ssl/
ca-key.pem ca.pem server-key.pem server.pem
13.解压kubernetes压缩包
批注:压缩包下载在宿主机内,直接拿出来用
[root@master01 k8s]# tar zxvf kubernetes-server-linux-amd64.tar.gz
14.复制关键命令文件到/opt/kubernetes/bin/下
[root@master01 k8s]# cd /root/k8s/kubernetes/server/bin
[root@master01 bin]# cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
15.制作token令牌文件
[root@localhost k8s]# cat > /opt/kubernetes/cfg/token.csv <<EOF
$(head -c 16 /dev/urandom | od -An -t x | tr -d ' '),kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
##使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 可以随机生成序列号
[root@master01 ~]# cat /opt/kubernetes/cfg/token.csv
89c3f368ad830f644d746b31e0b4554c,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
token令牌序列号 用户名 id 角色
16.开启apiserver
二进制文件,token,证书都准备好,开启apiserver
[root@master01 ~]# cd /root/k8s/
[root@master01 k8s]# bash apiserver.sh 192.168.10.10 https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service.
[root@master01 k8s]# ps aux | grep kube ##检查进程是否启动成功
root 43776 51.6 8.0 399676 312700 ? Ssl 09:40 0:08 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379 --bind-address=192.168.10.10 --secure-port=6443 --advertise-address=192.168.10.10 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 ……省略部分
cafile=/opt/etcd/ssl/ca.pem --etcd-certfile=/opt/etcd/ssl/server.pem --etcd-keyfile=/opt/etcd/ssl/server-key.pem
root 43794 0.0 0.0 112660 968 pts/0 R+ 09:41 0:00 grep --color=auto kube
17.查看配置文件
[root@master01 k8s]# cat /opt/kubernetes/cfg/kube-apiserver
KUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379 \
--bind-address=192.168.10.10 \
--secure-port=6443 \
--advertise-address=192.168.10.10 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--kubelet-https=true \
--enable-bootstrap-token-auth \
--token-auth-file=/opt/kubernetes/cfg/token.csv \
--service-node-port-range=30000-50000 \
--tls-cert-file=/opt/kubernetes/ssl/server.pem \
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem"
18.查看监听的https端口
[root@master01 k8s]# netstat -ntap | grep 6443
tcp 0 0 192.168.10.10:6443 0.0.0.0:* LISTEN 43776/kube-apiserve
tcp 0 0 192.168.10.10:39106 192.168.10.10:6443 ESTABLISHED 43776/kube-apiserve
tcp 0 0 192.168.10.10:6443 192.168.10.10:39106 ESTABLISHED 43776/kube-apiserve
[root@master01 k8s]# netstat -ntap | grep 8080
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 43776/kube-apiserve
19.启动scheduler服务
[root@master01 k8s]# ./scheduler.sh 127.0.0.1
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.
[root@master01 k8s]# ps aux | grep ku
……省略部分
/opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379 --bind-address=192.168.10.10 --secure-port=6443 --advertise-address=192.168.10.10 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction --authorization-mode=RBAC,Node --kubelet-https=true --enable-bootstrap-token-auth --……省略部分
20.启动controller-manager
[root@master01 k8s]# bash controller-manager.sh 127.0.0.1
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service.
21.查看master 节点状态
[root@master01 k8s]# /opt/kubernetes/bin/kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-1 Healthy {"health":"true"}
etcd-0 Healthy {"health":"true"}
etcd-2 Healthy {"health":"true"}
22.将kubelet 和 kube-proxy 两个国家scp给两个节点
也可以重新去节点解压压缩包获得者两个工具
[root@master01 bin]# cd /root/k8s/kubernetes/server/bin/
[root@master01 bin]# scp kubelet kube-proxy root@192.168.10.20:/opt/kubernetes/bin/
root@192.168.10.20's password:
kubelet 100% 168MB 89.6MB/s 00:01
kube-proxy 100% 48MB 73.4MB/s 00:00
[root@master01 bin]# scp kubelet kube-proxy root@192.168.10.30:/opt/kubernetes/bin/
root@192.168.10.30's password:
kubelet 100% 168MB 105.7MB/s 00:01
kube-proxy 100% 48MB 60.3MB/s 00:00
在node01节点上部署
1.复制node.zip到/root目录下再解压
解压node.zip,获得kubelet.sh proxy.sh
[root@node01 ~]# unzip node.zip ## 在宿主机上已下载,拿过来解压
Archive: node.zip
inflating: proxy.sh
inflating: kubelet.sh
回到master上
1.拷贝kubeconfig.sh文件进行重命名
[root@master01 k8s]# mkdir ~/k8s/kubeconfig
[root@master01 k8s]# cd kubeconfig/
[root@master01 kubeconfig]# ls ##直接从宿主机上复制过来
kubeconfig.sh
2.设置环境变量
[root@master01 kubeconfig]# export PATH=$PATH:/opt/kubernetes/bin/
[root@master01 kubeconfig]# kubectl get cs ##可以直接调用命令
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
etcd-1 Healthy {"health":"true"}
etcd-2 Healthy {"health":"true"}
3.生成配置文件
[root@master01 kubeconfig]# bash kubeconfig 192.168.10.10 /root/k8s/k8s-cert/
Cluster "kubernetes" set.
User "kubelet-bootstrap" set.
Context "default" created.
Switched to context "default".
Cluster "kubernetes" set.
User "kube-proxy" set.
Context "default" created.
Switched to context "default".
[root@master01 kubeconfig]# ls ##新生成了bootstrap.kubeconfig和kube-proxy.kubeconfig
bootstrap.kubeconfig kubeconfig kube-proxy.kubeconfig
4.拷贝配置文件到node节点
[root@master01 kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.10.20:/opt/kubernetes/cfg/
root@192.168.10.20's password:
bootstrap.kubeconfig 100% 2167 508.1KB/s 00:00
kube-proxy.kubeconfig 100% 6269 3.8MB/s 00:00
[root@master01 kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.10.30:/opt/kubernetes/cfg/
root@192.168.10.30's password:
bootstrap.kubeconfig 100% 2167 573.4KB/s 00:00
kube-proxy.kubeconfig 100% 6269 4.9MB/s 00:00
5.创建bootstrap角色赋予权限用于连接apiserver请求签名(关键)
[root@master01 kubeconfig]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
clusterrolebinding.rbac.authorization.k8s.io/kubelet-bootstrap created
在node01节点操作
1.启动kubelete服务
[root@node01 ~]# bash kubelet.sh 192.168.10.20
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@node01 ~]# ps aux | grep kube ##查看进程
……省略部分
/opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --hostname-override=192.168.10.20 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
root 57316 0.0 0.0 112664 972 pts/0 S+ 10:18 0:00 grep --color=auto kube
在node02节点操作
1.启动kubelete服务
[root@node02 ~]# bash kubelet.sh 192.168.10.30
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@node02 ~]# ps aux | grep kube ##查看进程
……省略部分
/opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --hostname-override=192.168.10.30 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
root 57315 0.0 0.0 112660 972 pts/0 S+ 10:19 0:00 grep --color=auto kube
再回到master上操作
1.检查到node01节点的请求
[root@master01 kubeconfig]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY 3m28s kubelet-bootstrap Pending
node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA 3m20s kubelet-bootstrap Pending
##Pending(等待集群给该节点颁发证书),记录下分配给两个节点的编号
## node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY
## node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA
2.给该节点颁发证书
[root@master01 kubeconfig]# kubectl certificate approve node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY
certificatesigningrequest.certificates.k8s.io/node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY approved
[root@master01 kubeconfig]# kubectl certificate approve node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA
certificatesigningrequest.certificates.k8s.io/node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA approved
3.继续查看证书状态
[root@master01 kubeconfig]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY 8m6s kubelet-bootstrap Approved,Issued
node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA 7m58s kubelet-bootstrap Approved,Issued
## Approved,Issued 状态变为被认可,已发布状态(已经被允许加入群集)
4.查看群集节点,成功加入的节点
[root@master01 kubeconfig]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.10.20 Ready <none> 3m50s v1.12.3
192.168.10.30 Ready <none> 3m38s v1.12.3
到node01节点操作
1.启动proxy服务
[root@node01 ~]# bash proxy.sh 192.168.10.20
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.
[root@node02 ~]# systemctl status kube-proxy.service
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwtjSWXF-1605984203984)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605983674452.png)]
到node01节点操作
1.启动proxy服务
[root@node02 ~]# bash proxy.sh 192.168.10.30
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.
[root@node02 ~]# systemctl status kube-proxy.service
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-chpmqSOD-1605984203985)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605983491987.png)]
RYA approved
#### 3.继续查看证书状态
```bash
[root@master01 kubeconfig]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY 8m6s kubelet-bootstrap Approved,Issued
node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA 7m58s kubelet-bootstrap Approved,Issued
## Approved,Issued 状态变为被认可,已发布状态(已经被允许加入群集)
4.查看群集节点,成功加入的节点
[root@master01 kubeconfig]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.10.20 Ready <none> 3m50s v1.12.3
192.168.10.30 Ready <none> 3m38s v1.12.3
到node01节点操作
1.启动proxy服务
[root@node01 ~]# bash proxy.sh 192.168.10.20
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.
[root@node02 ~]# systemctl status kube-proxy.service
到node01节点操作
1.启动proxy服务
[root@node02 ~]# bash proxy.sh 192.168.10.30
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.
[root@node02 ~]# systemctl status kube-proxy.service