K8S二进制部署

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值