二进制部署1.23.4版本k8s集群-3-部署架构及根证书签发
##1、系统架构 系统架构图如下:
本次部署使用了5台虚拟机,各主机功能分配如下:
2台是代理,分别是4层和7层代理。L7反代Ingress,L4反代Apiserver。还用来安装DNS服务以及etcd。2个节点上面跑一个VIP,其ip地址是10.211.55.10。
2台部署K8S核心服务,Master节点和Node节点部署在一起,这两台主机即充当主控节点,又充当运算节点,如果资源充分,主控节点和运算节点可以分开部署;
1台作运维主机,主要功能上Docker资源仓库,K8S资源清单仓库,提供了K8S共享存储服务(NFS),还用来签发证书。etcd部署在12、21、22三台主机上
##2、集群网络规划
集群三条网络规划如下: 节点网络:10.211.55.0/24 Pod网络:172.7.0.0/16 Service网络:虚网络,地址为192.168.0.0/16
两台宿主机IP分别是:10.211.55.21和10.211.55.22 宿主机上Pod网络分别是:172.7.21.0/24和172.7.22.0/24
Pod网络和宿主机网络对应关系:Pod网络的第三位和宿主机网络的最后一位对应。这样可以很方便的定位Pod在哪台宿主机上。
##3、系统资源 系统资源如下图:
主机名 | IP | 服务器类型 | 环境配置 |
---|---|---|---|
10.211.55.10 | VIP | 无 | |
CFZX55-11 | 10.211.55.11 | 负载均衡(主) | Bind、Nginx、Keepalived |
CFZX55-12 | 10.211.55.12 | 负载均衡(从) | etcd、Nginx、Keepalived |
CFZX55-21 | 10.211.55.21 | Master+Node | Ingress、kubelet、kube-proxy、pod、etcd、apiserver、controller-manager、scheduler |
CFZX55-22 | 10.211.55.22 | Master+Node | Ingress、kubelet、kube-proxy、pod、etcd、apiserver、controller-manager、scheduler |
CFZX55-200 | 10.211.55.200 | 运维主机 | cfssl、harbor、NFS |
##4、证书签发环境 证书签发环境部署在运维主机200上。 证书保存路径:/opt/certs ###4.1 安装cfssl工具 cfssl版本:1.6.1
安装路径:/opt/cfssl
[root@cfzx55-200 cfssl]# pwd /opt/cfssl [root@cfzx55-200 cfssl]# ll -rwxr-xr-x 1 root root 16659824 Mar 12 15:52 cfssl -rwxr-xr-x 1 root root 13502544 Mar 12 15:52 cfssl-certinfo -rwxr-xr-x 1 root root 11029744 Mar 12 15:52 cfssl-json [root@cfzx55-200 cfssl]# cfssl version Version: 1.6.1 Runtime: go1.12.12 [root@cfzx55-200 cfssl]#
- cfssl: 用于签发证书,输出json格式文本;
- cfssl-json: 将cfssl签发生成的证书(json格式)变成文件承载式文件;
- cfssl-certinfo: 验证查看证书信息。
cfssl所在目录添加到系统PATH环境变量
[root@hdss7-200 ~]# vim /etc/profile export PATH=$PATH:/opt/cfssl [root@hdss7-200 ~]# source /etc/profile [root@hdss7-200 ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/cfssl
###4.2 cfssl工具使用说明 cfssl工具的子命令包括:
- genkey: 生成一个key(私钥)和CSR(证书签名请求)
- certinfo: 输出给定证书的证书信息
- gencert: 生成新的key(密钥)和签名证书,该命令的参数如下: -initca:初始化一个新ca,生成根CA时需要。
- -ca:指明ca的证书(ca.pem)
- -ca-key:指明ca的私钥文件(ca-key.pem)
- -config:指明证书请求csr的json文件(ca-config.json)
- -profile:与-config中的profile对应,是指根据config中的profile段来生成证书的相关信息
###4.3 生成根证书
自签证书时,首先需要一个根证书,也叫CA证书。
创建生成CA证书签名请求(CSR)的JSON配置文件,文件路径及内容:
/opt/certs/cd-csr.json
{ "CN": "kubernetes", "hosts": [ ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "beijing", "L": "beijing", "O": "k8s", "OU": "system" } ], "ca": { "expiry": "175200h" } }
说明:
CN:Common Name,一般写域名。kube-apiserver从证书中提取该字段作为请求的用户名(User Name)。浏览器使用该字段验证网站是否合法。
hosts:网络请求url中合法的主机名或域名。
key:密钥信息,其内容一般也比较固定就是:{"algo":"rsa”,"size":2048},表示使用的加密算法rsa,密文长度2048。
names:证书对外公开显示的信息,常见的有:
C:Country,所在国家简称
ST:State,所在州/省份简称
L:Locality,所在地区/城市简称
O:Organization Name,组织名称或公司名称,kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)
OU:Organization Unit Name,组织单位名称或公司部门
expiry:过期时间,175200h表示有效期20年。
生成CA证书和私钥命令
[root@cfzx55-200 certs]# cfssl gencert -initca ca-csr.json | cfssl-json -bare ca 2022/03/12 16:21:32 [INFO] generating a new CA key and certificate from CSR 2022/03/12 16:21:32 [INFO] generate received request 2022/03/12 16:21:32 [INFO] received CSR 2022/03/12 16:21:32 [INFO] generating key: rsa-2048 2022/03/12 16:21:32 [INFO] encoded CSR 2022/03/12 16:21:32 [INFO] signed certificate with serial number 122333134122661078506271870600245516429626531350 [root@cfzx55-200 certs]# ll total 16 -rw-r--r-- 1 root root 333 Mar 12 16:20 ca-csr.json -rw------- 1 root root 1679 Mar 12 16:21 ca-key.pem -rw-r--r-- 1 root root 1045 Mar 12 16:21 ca.csr -rw-r--r-- 1 root root 1310 Mar 12 16:21 ca.pem [root@cfzx55-200 certs]#
生成的文件:
ca.pem :CA根证书
ca-key.pem:CA 根证书的私钥
至此,CA根证书及其私钥文件已经生成,可以用它们来签发其它证书了。
###4.4 创建CA根证书策略文件
CA根证书策略文件,一般命名为ca-config.json,用于配置根证书的使用场景(profile)和具体参数(usage、过期时间、服务端认证、客户端认证、加密等),后续签名其它证书时需要指定特定场景(profile)
/opt/certs/ca-config.json
{ "signing": { "default": { "expiry": "175200h" }, "profiles": { "server": { "expiry": "175200h", "usages": [ "signing", "key encipherment", "server auth" ] }, "client": { "expiry":"175200h", "usages": [ "signing", "key enchiperment", "client auth" ] }, "kubernetes": { "expiry":"175200h", "usages": [ "signing", "key enchiperment", "server auth", "client auth" ] }, "peer": { "expiry": "175200h", "usages": [ "signing", "key enchiperment", "server auth", "client auth" ] } } } }
profile:指定证书使用场景,后续签名生成证书及其私钥时需要指定场景名称
server auth:表示 client 可以用该该证书对 server 提供的证书进行验证。- client auth:表示 server 可以用该该证书对 client 提供的证书进行验证。
signing:表示该证书可用于签名其它证书,生成的ca.pem证书中CA=TRUE
文件中定义了多个profile,可以根据情况使用。
- server:服务端使用,客户端以此验证服务端身份。
- client:客户端使用,用于服务端认证客户端。
- peer/kubernetes:双向证书,通信双方都需要证书,用于集群成员间通信。
后续签发证书时,需要指定文件名(ca-config.json)以及使用的profile,本例中,为了简化操作,全部使用kubernetes。
- 二进制部署1.23.4版本k8s集群-4-部署etcd集群
- 二进制手动部署kubernetes集群-k8s-1.17.9
- 二进制部署K8s集群第26节之storageClass动态挂载对接NFS存储
- (三)二进制安装k8s-1.11版本之flanneld部署
- 二进制部署K8s集群第5节之私有仓库Harbor搭建
- (四)二进制安装k8s-1.11版本之master组件部署
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
- (五)二进制安装k8s-1.11版本之node组件部署
- (七)二进制安装k8s-1.11版本之coredns部署
- k8s集群二进制部署过程
- k8s实践19:kubernetes二进制部署集群v1.12升级v1.15
- K8S入门系列之集群二进制部署--> master篇(二)
- (二)二进制安装k8s1.11版本之etcd集群部署
- K8S入门系列之集群二进制部署-->node篇(三)
- 二进制部署K8s集群第25节之k8s技术点整理
- K8S 二进制集群部署--------单master集群
- Redis部署及主从集群架构
- centos7 k8s集群配置部署修正版
- 同一个Docker swarm集群中部署多版本的测试环境
- 使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点