赞
踩
CA证书
CA证书中包含密钥对
CA证书可以对通信加密,同时标识身份的唯一性
.pem :证书
1、制作官方颁发的证书:
① 、创建ca密钥(文件定义) ca-key.pem
② 、创建ca证书(文件定义) ca.pem
2、制作master端的证书(用于内部加密通讯,同时为了给与Client端颁发master签名的证书)
① 创建过程:需要以下几部
设置私钥 确保安全加密 .pem
私钥签名 确保身份真实 .csr
制作证书(需要CA官方颁发) cert.pem
② 创建私钥
③ 私钥签名
④ 使用ca证书与密钥证书签名
3、制作node端证书
① 由master端制作node端密钥
② 对node端的证书进行签名
③ 创建一个配置文件(区别于服务端,进行客户端验证)
④ 生成证书
CA 证书机构(签发电子证书)
在Kubernetes的组件之间进行通信时,数字证书的验证是在协议层面通过TLS
完成的,除了需要在建立通信时提供相关的证书和密钥外,在应用层面并不需要进行特殊处理。采用TTS进行验证有两种方式:
1、服务器单向认证:只需要服务器端提供证书,客户端通过服务器端证书验证服务的身份,但服务器并不验证客户端的身份。这种情况一般适用于对Internet开放的服务,例如搜索引擎网站,任何客户端都可以连接到服务器上进行访问,但客户端需要验证服务器的身份,以避免连接到伪造的恶意服务器。
2双向TLS认证:除了客户端需要验证服务器的证书,服务器也要通过客户端证书验证客户端的身份。这种情况下服务器提供的是敏感信息,只允许特定身份的客户端访问。在Kubernetes中,各个组件提供的接口中包含了集群的内部信息。如果这些接口被非法访问,将影响集群的安全,因此组件之间的通信需要采用双向rLs认证。即客户端和服务器端都需要验证对方的身份信息。在两个组件进行双向认证时,会涉及到下面这些证书相关的文件:
①服务器端证书:服务器用于证明自身身份的数字证书,里面主要包含了服务器端的公钥以及服务器的身份信息。
②服务器端私钥:服务器端证书中包含的公钥所对应的私钥。公钥和私钥是成对使用的,在进行rLs验证时,服务器使用该私钥来向客户端证明自己是服务器端证书的拥有者
③客户端证书:客户端用于证明自身身份的数字证书,里面主要包含了客户端的公钥以及客户端的身份信息。
④客户端私钥:客户端证书中包含的公钥所对应的私钥,同理,客户端使用该私钥来向服务器端证明自己是客户端证书的拥有。
⑤服务器端CA根证书:签发服务器端证书的CA根证书,客户端使用该CA根证书来验证服务器端证书的合法性。
⑥客户端端CA根证书:签发客户端证书的 CA根证书,服务器端使用该CA根证书来验证客户端证书的合法性。
K8S 二进制集群部署
k8s 默认有三种部署方式:Minikube 、kubeadm、 二进制
K8S二进制部署
分为几个模块部署
1、ETCD集群
2、FLANNEL网络
3、单master部署
4、n部ode部署
5、多master署
节点分配
master01 192.168.80.1
master02 192.168.80.4
node01 192.168.80.2
node02 192.168.80.3
HA高可用
nginx01 192.168.80.5
nginx02 192.168.80.6
二,ETCD集群部署
master节点操作
[root@master1 ~]# mkdir k8s && cd k8s
[root@master1 k8s]# ls
etcd-cert.sh etcd.sh
#etcd-cert.sh 是证书制作的脚本
#etcd.sh etcd启动脚本
[root@master1 k8s]# mkdir etcd-cert
[root@master1 k8s]# mv etcd-cert.sh etcd-cert
[root@master1 k8s]# ls
etcd-cert
cat etcd-cert.sh
cat > ca-config.json <<EOF #CA证书配置文件 { "signing": { #键名称 "default": { "expiry": "87600h" #证书有效期(10年) }, "profiles": { #简介 "www": { #名称 "expiry": "87600h", "usages": [ #使用方法 "signing", #键 "key encipherment", #密钥验证(密钥验证要设置在CA证书中) "server auth", #服务器端验证 "client auth" #客户端验证 ] } } } } EOF cat > ca-csr.json <<EOF #CA签名文件 { "CN": "etcd CA", #CA签名为etcd指定(三个节点均需要) "key": { "algo": "rsa", #使用rsa非对称密钥的形式 "size": 2048 #密钥长度为2048 }, "names": [ #在证书中定义信息(标准格式) { "C": "CN", #名称 "L": "Beijing", "ST": "Beijing" } ] } EOF #生成证书,生成ca-key.pem 和ca.pem cfssl gencert -initca ca-csr.json | cfssljson -bare ca - #----------------------- cat > server-csr.json <<EOF #服务器端的签名 { "CN": "etcd", "hosts": [ #定义三个节点的IP地址 "192.168.80.1", "192.168.80.2", "192.168.80.2" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "BeiJing", "ST": "BeiJing" } ] } EOF #根据服务端签名文件生成证书,cfssl 为证书制作工具 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
① 首先,必须先向CA机构申请证书,并且说明申请证书的用途(ca-config.json中www模块)
② 制作CA官方的证书文件,包含ca-Key.pem 密钥文件+ ca.pem 证书文件 :官方的
③ 再根据官方认证的CA.PEM + CA-KEY.PEM 来制作server端的证书
创建cfssl类型工具下载脚本
#从官网源中制作证书的工具下载下来,(-o:导出)放在/usr/local/bin中便于系统识别
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
#从另一个站点源中下载cfssljson工具,用于识别json配置文件格式
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
#下载cfssl-certinfo工具
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
给与权限
[root@master1 bin]# chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
生成证书
[root@master1 etcd-cert]# sh -x etcd-cert.sh
二、ETCD集群部署
master节点操作
将etcd、flannel、k8s软件包上传
解压etcd
[root@master1 k8s]# tar zxf etcd-v3.3.10-linux-amd64.tar.gz
创建配置文件,命令文件,证书
[root@master1 k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p
#拷贝命令文件至相应目录
[root@master1 k8s]# mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/
拷贝证书文件至相应目录
[root@master1 k8s]# cp etcd-cert/*.pem /opt/etcd/ssl/
执行etcd.sh启动脚本:
注:进入卡住状态等待其他节点加入,目的是生成启动脚本
[root@master1 k8s]# bash etcd.sh etcd01 192.168.80.1 etcd02=https://192.168.80.2:2380,etcd03=https://192.168.80.3:2380
使用另一个终端打开,会发现etcd进程已经开启
[root@master1 ~]# ps -ef | grep etcd
拷贝证书至其他节点
[root@master1 k8s]# scp -r /opt/etcd/ 192.168.80.2:/opt/
[root@master1 k8s]# scp -r /opt/etcd/ 192.168.80.3:/opt/
启动脚本拷贝其他节点
[root@master1 k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.80.2:/usr/lib/systemd/system/
[root@master1 k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.80.3:/usr/lib/systemd/system/
修改node节点node1和node2
[root@master1 k8s]# vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.80.2:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.80.2:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.80.2:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.80.2:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.80.1:2380,etcd02=https://192.168.80.2:2380,etcd03=https://192.168.80.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
etcd 启动
[root@node1 system]# systemctl start etcd
[root@node1 system]# systemctl status etcd
检查群集状态
[root@master1 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.80.1:2379,https://192.168.80.2:2379,https://192.168.80.3:2379" cluster-health
官方提供的三种部署K8S方式:
●minikube
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用。
部署地址:https://kubernetes.io/docs/setup/minikube/
●kubeadm
Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
●二进制包
推荐,从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
下载地址:https://github.com/kubernetes/kubernetes/releases
Kubernetes平台环境规划
单Master集群架构图
多Master集群架构图
Flannel容器集群网络部署
Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来。
VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封装并将数据发送给目标地址
Flannel:是Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VXLAN、AWS VPC和GCE路由等数据转发方式。
docker引擎配置
所有node节点部署docker引擎
yum install -y yum-utils device-mapper-persistent-data lvm2
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://483txl0m.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
开启路由转发,重启docker
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
flannel网络配置
#写入分配的子网段到ETCD中,供flannel使用
[root@master1 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.80.1:2379,https://192.168.80.2:2379,https://192.168.80.3:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
#查看写入的信息
[root@master1 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.80.1:2379,https://192.168.80.2:2379,https://192.168.80.3:2379" get /coreos.com/network/config
拷贝flannel-v0.10.0-linux-amd64.tar.gz到所有node节点(只需要部署在node节点即可)
[root@master1 k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz root@192.168.80.2:/root
[root@master1 k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz root@192.168.80.3:/root
所有node节点操作解压
[root@node1 ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz
//所有节点创建k8s工作目录
[root@node1 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@node1 ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/
定义flannel脚本
[root@node1 ~]# vim flannel.sh
!/bin/bash ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"} cat <<EOF >/opt/kubernetes/cfg/flanneld FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \ -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 [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
//执行脚本,开启flannel网络功能
#!/bin/bash ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"} cat <<EOF >/opt/kubernetes/cfg/flanneld FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \ -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 [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
//配置docker连接flannel
[root@node1 ~]# vim /usr/lib/systemd/system/docker.service
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=/run/flannel/subnet.env
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
[root@node1 ~]# cat /run/flannel/subnet.env
DOCKER_OPT_BIP="--bip=172.17.61.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"
#说明:bip指定启动时的子网
DOCKER_NETWORK_OPTIONS=" --bip=172.17.61.1/24 --ip-masq=false --mtu=1450"
//重启docker服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker
//查看flannel网络
//测试ping通对方docker0网卡 证明flannel起到路由作用
[root@node1 ~]# ping 127.17.52.1
//测试ping通两个node中的centos:7容器
[root@node1 ~]# docker run -it centos:7 /bin/bash
[root@cfa1e89115ff /]# yum install net-tools -y
部署master组件
//在master上操作,api-server生成证书
[root@master1 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@master1 ~]# mkdir k8s-cert
[root@master1 ~]# cd k8s-cert/
[root@master1 k8s-cert]# ls
k8s-cert.sh
[root@master1 k8s-cert]# cat k8s-cert.sh
cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } EOF cat > ca-csr.json <<EOF { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "ST": "Beijing", "O": "k8s", "OU": "System" } ] } EOF cfssl gencert -initca ca-csr.json | cfssljson -bare ca - #----------------------- cat > server-csr.json <<EOF { "CN": "kubernetes", "hosts": [ "10.0.0.1", "127.0.0.1", "192.168.80.1", "192.168.80.2", "192.168.80.3", "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 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server #----------------------- 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 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin #----------------------- 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 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
//生成k8s证书
[root@master1 k8s-cert]# bash k8s-cert.sh
拷贝证书
[root@master1 k8s-cert]# cp ca*pem server*pem /opt/kubernetes/ssl/
//解压kubernetes压缩包
[root@master1 k8s]# tar zxf kubernetes-server-linux-amd64.tar.gz
[root@master1 bin]# cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
//复制关键命令文件
[root@master1 ~]# head -c 16 /dev/urandom | od -An -t x | tr -d ' '
3a17de7ecdbe99b56f11fe7afa8d21bd
//使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 可以随机生成序列号
[root@master1 ~]# vim /opt/kubernetes/cfg/token.csv
3a17de7ecdbe99b56f11fe7afa8d21bd,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
序列号,用户名,id,角色
//二进制文件,token,证书都准备好,开启apiserver
[root@master1 ~]# bash apiserver.sh 192.168.195.149 https://192.168.80.1:2379,https://192.168.80.2:2379,https://192.168.80.3:2379
//检查进程是否启动成功
[root@master1 ~]# ps aux | grep kube
查看状态
[root@master1 ~]# systemctl status kube-apiserver
//监听的https端口
[root@master1 ~]# netstat -ntap | grep 6443
//启动scheduler服务
[root@master1 ~]# ./scheduler.sh 127.0.0.1
[root@master1 ~]# ps aux | grep ku
[root@master1 ~]# systemctl status kube-scheduler.service
//启动controller-manager
[root@master1 ~]# chmod +x controller-manager.sh
[root@master1 ~]# ./controller-manager.sh 127.0.0.1
[root@master1 ~]# ps aux | grep *controller*
[root@master1 ~]# systemctl status kube-controller-manager
//查看master 节点状态
root@master1 ~]# /opt/kubernetes/bin/kubectl get cs
node节点部署
//master上操作,把 kubelet、kube-proxy拷贝到node节点上去
[root@master1 bin]# cd /root/k8s/kubernetes/server/bin
[root@master1 bin]# scp kubelet kube-proxy root@192.168.80.2:/opt/kubernetes/bin/
[root@master1 bin]# scp kubelet kube-proxy root@192.168.80.3:/opt/kubernetes/bin/
//node节点操作(上传node.zip到/root目录下再解压)
[root@node1 ~]# unzip node.zip
Archive: node.zip
inflating: proxy.sh
inflating: kubelet.sh
//在master上操作
[root@master1 bin]# cd /root/k8s
[root@master1 k8s]# mkdir kubeconfig
[root@master1 k8s]# cd kubeconfig/
[root@master1 kubeconfig]# rz -E
rz waiting to receive.
[root@master1 kubeconfig]# ls
kubeconfig.sh
[root@master1 kubeconfig]# mv kubeconfig.sh kubeconfig
//获取token信息
[root@master1 kubeconfig]# cat /opt/kubernetes/cfg/token.csv
[root@master1 kubeconfig]# vim kubeconfig
APISERVER=$1 SSL_DIR=$2 # 创建kubelet bootstrapping kubeconfig export KUBE_APISERVER="https://$APISERVER:6443" # 设置集群参数 kubectl config set-cluster kubernetes \ --certificate-authority=$SSL_DIR/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=bootstrap.kubeconfig # 设置客户端认证参数 kubectl config set-credentials kubelet-bootstrap \ --token=3a17de7ecdbe99b56f11fe7afa8d21bd \ #写入token序列号 --kubeconfig=bootstrap.kubeconfig # 设置上下文参数 kubectl config set-context default \ --cluster=kubernetes \ --user=kubelet-bootstrap \ --kubeconfig=bootstrap.kubeconfig # 设置默认上下文 kubectl config use-context default --kubeconfig=bootstrap.kubeconfig #---------------------- # 创建kube-proxy kubeconfig文件 kubectl config set-cluster kubernetes \ --certificate-authority=$SSL_DIR/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=kube-proxy.kubeconfig kubectl config set-credentials kube-proxy \ --client-certificate=$SSL_DIR/kube-proxy.pem \ --client-key=$SSL_DIR/kube-proxy-key.pem \ --embed-certs=true \ --kubeconfig=kube-proxy.kubeconfig kubectl config set-context default \ --cluster=kubernetes \ --user=kube-proxy \ --kubeconfig=kube-proxy.kubeconfig kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
//设置环境变量(可以写入到/etc/profile中)
[root@master1 kubeconfig]# export PATH=$PATH:/opt/kubernetes/bin/
[root@master1 kubeconfig]# kubectl get cs
//生成配置文件
[root@master1 kubeconfig]# bash kubeconfig 192.168.80.1 /root/k8s-cert/
//拷贝配置文件到node节点
[root@master1 kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.80.2:/opt/kubernetes/cfg/
[root@master1 kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.80.3:/opt/kubernetes/cfg/
//创建bootstrap角色赋予权限用于连接apiserver请求签名(关键)
[root@master1 kubeconfig]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
//在node01节点上操作
[root@node1 ~]# bash kubelet.sh 192.168.80.2
//检查kubelet服务启动
[root@node1 ~]# ps aux | grep kubelet
[root@node1 ~]# systemctl status kubelet
//master上操作
//检查到node01节点的请求
[root@master1 kubeconfig]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-OzPWECHjyY0rsvWHmkScV3LfGb3OuSRfv-yaUdDn_Uo 12m kubelet-bootstrap Pending
Pending(等待集群给该节点颁发证书)
[root@master1 kubeconfig]# kubectl certificate approve node-csr-OzPWECHjyY0rsvWHmkScV3LfGb3OuSRfv-yaUdDn_Uo
[root@master1 kubeconfig]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-OzPWECHjyY0rsvWHmkScV3LfGb3OuSRfv-yaUdDn_Uo 15m kubelet-bootstrap Approved,Issued #表示已经被允许加入群集
//查看群集节点,成功加入node01节点
[root@master1 kubeconfig]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.80.2 Ready <none> 52s v1.12.3
node2加入集群
//node2操作
[root@node2 ~]# bash kubelet.sh 192.168.80.3
//master上操作
[root@master1 kubeconfig]# kubectl get csr
[root@master1 kubeconfig]# kubectl certificate approve node-csr-qWNyICaLbTonMNDbD5WFQAru-Z8eMuXwRZofAikcsJI
[root@master1 kubeconfig]# kubectl get node
//在node 节点操作,启动proxy服务
[root@node1 ~]# bash proxy.sh 192.168.80.2
[root@node1 ~]# systemctl status kube-proxy.service
[root@node2 ~]# bash proxy.sh 192.168.80.3
[root@node2 ~]# systemctl status kube-proxy.service
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。