摘要:搭建集群前言安装的集群,默认是一个单机的容器化的,并且和通信没有经过加密和认证,这点是需要改造的。所以首先我们需要先部署一个三节点的集群,二进制部署,守护进程,并且需要生成证书。
搭建etcd集群 前言
kubeadm安装的集群,默认etcd是一个单机的容器化的etcd,并且k8s和etcd通信没有经过ssl加密和认证,这点是需要改造的。
所以首先我们需要先部署一个三节点的etcd集群,二进制部署,systemd守护进程,并且需要生成ca证书。
kuberntes 系统使用 etcd 存储所有数据,此外calico网络也使用该etcd集群,本文档介绍部署一个三节点高可用 etcd 集群的步骤,分别命名为etcd-host1、etcd-host2、etcd-host3:
etcd-host1:172.16.120.151
etcd-host2:172.16.120.152
etcd-host3:172.16.120.153
本文档用到的变量定义如下:
$ export NODE_NAME=etcd-host1 # 当前部署的机器名称(随便定义,只要能区分不同机器即可) $ export NODE_IP=172.16.120.151 # 当前部署的机器 IP $ export NODE_IPS="172.16.120.151 172.16.120.152 172.16.120.153" # etcd 集群所有机器 IP $ # etcd 集群间通信的IP和端口 $ export ETCD_NODES=etcd-host1=https://172.16.120.151:2380,etcd-host2=https://172.16.120.152:2380,etcd-host3=https://172.16.120.153:2380 $
本系列默认使用root用户操作。
创建 CA 证书和秘钥本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。
安装cfssl如果不希望将cfssl工具安装到部署主机上,可以在其他的主机上进行该步骤,生成以后将证书拷贝到部署etcd的主机上即可。本教程就是采取这种方法,在一台测试机上执行下面操作。
$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfssl_linux-amd64 $ mv cfssl_linux-amd64 /usr/local/bin/cfssl $ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 $ chmod +x cfssljson_linux-amd64 $ mv cfssljson_linux-amd64 /usr/local/bin/cfssljson $ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 $ chmod +x cfssl-certinfo_linux-amd64 $ mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo $生成ETCD的TLS 秘钥和证书
为了保证通信安全,客户端(如 etcdctl) 与 etcd 集群、etcd 集群之间的通信需要使用 TLS 加密,本节创建 etcd TLS 加密所需的证书和私钥。
创建 CA 配置文件:
$ cat > ca-config.json <ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证;
client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证;
创建 CA 证书签名请求:
$ cat > ca-csr.json <"CN":Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
"O":Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
生成 CA 证书和私钥:
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca $ ls ca* ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem $创建 etcd 证书签名请求:
$ cat > etcd-csr.json <hosts 字段指定授权使用该证书的 etcd 节点 IP;
生成 etcd 证书和私钥:
$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd $ ls etcd* etcd.csr etcd-csr.json etcd-key.pem etcd.pem ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem $ rm etcd.csr etcd-csr.json将生成好的etcd.pem和etcd-key.pem以及ca.pem三个文件拷贝到目标主机的/etc/etcd/ssl目录下。
下载二进制文件到 https://github.com/coreos/etcd/releases 页面下载最新版本的二进制文件:
$ wget https://github.com/coreos/etcd/releases/download/v3.2.11/etcd-v3.2.11-linux-amd64.tar.gz $ tar -xvf etcd-v3.2.11-linux-amd64.tar.gz $ mv etcd-v3.2.11-linux-amd64/etcd* /usr/local/bin $创建 etcd 的 systemd unit 文件$ mkdir -p /var/lib/etcd # 必须先创建工作目录 $ cat > etcd.service <指定 etcd 的工作目录和数据目录为 /var/lib/etcd,需在启动服务前创建这个目录;
为了保证通信安全,需要指定 etcd 的公私钥(cert-file和key-file)、Peers 通信的公私钥和 CA 证书(peer-cert-file、peer-key-file、peer-trusted-ca-file)、客户端的CA证书(trusted-ca-file);
--initial-cluster-state 值为 new 时,--name 的参数值必须位于 --initial-cluster 列表中;
启动 etcd 服务$ mv etcd.service /etc/systemd/system/ $ systemctl daemon-reload $ systemctl enable etcd $ systemctl start etcd $ systemctl status etcd $验证服务部署完 etcd 集群后,在任一 etcd 集群节点上执行如下命令:
$ etcdctl --endpoints=https://172.16.120.151:2379 --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem cluster-health预期结果:
member 71df888fdf6f0bb9 is healthy: got healthy result from https://172.16.120.153:2379 member 73b5207bc2491164 is healthy: got healthy result from https://172.16.120.151:2379 member 7a4ddb7c77253f4b is healthy: got healthy result from https://172.16.120.152:2379三台 etcd 的输出均为 healthy 时表示集群服务正常(忽略 warning 信息)。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/32623.html
摘要:搭建集群前言安装的集群,默认是一个单机的容器化的,并且和通信没有经过加密和认证,这点是需要改造的。所以首先我们需要先部署一个三节点的集群,二进制部署,守护进程,并且需要生成证书。 搭建etcd集群 前言 kubeadm安装的集群,默认etcd是一个单机的容器化的etcd,并且k8s和etcd通信没有经过ssl加密和认证,这点是需要改造的。所以首先我们需要先部署一个三节点的etcd集群,...
摘要:集群概述整个集群包括大部分集群节点节点集群主要作为集群和网络的数据存储。集群组件版本集群机器主从从后续计划用替换。 前言 k8s部署的方式多种多样,除去各家云厂商提供的工具,在bare metal中,也有二进制部署和一系列的自动化部署工具(kubeadm,kubespary,rke等)。具体二进制部署大家可以参考宋总的系列文章。而rke是由rancher提供的工具,由于刚刚出来,有不少...
摘要:集群概述整个集群包括大部分集群节点节点集群主要作为集群和网络的数据存储。集群组件版本集群机器主从从后续计划用替换。 前言 k8s部署的方式多种多样,除去各家云厂商提供的工具,在bare metal中,也有二进制部署和一系列的自动化部署工具(kubeadm,kubespary,rke等)。具体二进制部署大家可以参考宋总的系列文章。而rke是由rancher提供的工具,由于刚刚出来,有不少...
摘要:部署节点节点包含的组件本文档介绍部署一个三节点高可用集群的步骤,分别命名为安装在每台主机安装。出现如下错误解决办法启动参数增加参数增加在物理机上可能并不会出现该问题。至此一个完整的高可用集群搭建完毕。 部署master节点 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager ...
阅读 2278·2021-11-11 16:54
阅读 2538·2021-09-26 09:47
阅读 3922·2021-09-08 09:36
阅读 2687·2021-07-25 21:37
阅读 882·2019-08-30 15:54
阅读 2515·2019-08-30 14:22
阅读 3225·2019-08-30 13:57
阅读 2473·2019-08-29 17:17