K8S二进制部署(更新中)
Posted 水木,年華
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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二进制部署(更新中)的主要内容,如果未能解决你的问题,请参考以下文章
Docker&K8s---跟我一步步部署K8s(二进制安装部署)