部署安全的etcd高可用集群
etcd作为Kubernetes集群的主数据库,在安装Kubernetes各服务之前需要首先安装和启动。
1. 下载etcd二进制文件,配置systemd服务
从GitHub官网下载etcd二进制文件,例如etcd-v3.4.13-linux-amd64.tar.gz。
curl -L https://github.com/coreos/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz -o etcd-v3.4.13-linux-amd64.tar.gz
解压缩后得到etcd和etcdctl文件,将它们复制到/usr/bin目录下。
[root@master ~]# curl -L https://github.com/coreos/etcd/releases/download/v3.2.10/etcd-v3.2.10-linux-amd64.tar.gz -o etcd-v3.2.10-linux-amd64.tar.gz ......................... [root@master ~]# tar xzvf etcd-v3.2.10-linux-amd64.tar.gz ........ [root@master ~]# ls anaconda-ks.cfg etcd-v3.4.13-linux-amd64 etcd-v3.4.13-linux-amd64.tar.gz original-ks.cfg [root@master ~]# cd etcd-v3.4.13-linux-amd64 [root@master etcd-v3.4.13-linux-amd64]# ls Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md [root@master ~]# cd etcd-v3.4.13-linux-amd64 [root@master etcd-v3.4.13-linux-amd64]# ls Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md [root@master etcd-v3.4.13-linux-amd64]# cp etcd /usr/bin [root@master etcd-v3.4.13-linux-amd64]# cp etcdctl /usr/bin [root@master ~]# cd /usr/bin [root@master bin]# ls | grep etcd etcd etcdctl [root@master bin]#
将其部署为一个systemd的服务,创建systemd服务配置文件/usr/lib/systemd/system/etcd.service,内容示例如下:
[root@master system]# cat etcd.service [Unit] Description=etcd key-value store Documentation=https://github.com/etcd-io/etcd After=network.target [Service] EnvironmentFile=/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd Restart=always [Install] WantedBy=multi-user.target [root@master system]#
其中,EnvironmentFile指定配置文件的全路径,例如/tc/etcd/etcd.conf,其中的参数以环境变量的格式进行配置。
接下来先对etcd需要的CA证书配置进行说明。对于配置文件/etc/etcd/etcd.conf中的完整配置参数,将在创建完CA证书后统一说明。
2. 创建etcd的CA证书
先创建一个x509 v3配置文件etcd_ssl.cnf,其中subjectAltName参数(alt_names)包括所有etcd主机的IP地址,例如:
[ req ] req_extensions = v3_req distinguished_name = req_distinguished_name
[ req_distinguished_name ] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digtalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] IP.1 = 192.168.18.3 IP.2 = 192.168.18.4 IP.2 = 192.168.18.5
然后使用openssl命令创建etcd的服务端CA证书,包括etcd_server.key和etcd_server.crt文件,将其保存到/etc/etcd/pki目录下:
1.修改Openssl配置文件CA目录: cat /etc/pki/tls/openssl.cnf dir = /etc/pki/CA
2.生成根证书及私钥:
cd /etc/pki/CA mkdir private crl certs newcerts #新建证书存放目录(如果已经存在则不用创建) echo '00' > serial #新建serial文件并写入初始序列号00 touch index.txt #新建index.txt空文件 openssl genrsa -out private/cakey.pem 1024 #生成CA根证书私钥 openssl req -new -x509 -key private/cakey.pem -out cacert.pem #生成CA根证书
3.生成服务器证书私钥、证书,可用于https服务器等:
openssl genrsa -out private/server.key 1024 openssl req -new -key private/server.key -out crl/server.csr #生成证书请求文件,可提供认证CA签核,或自签名。、、、 openssl ca -in crl/server.csr -out certs/server.crt #自签名证书、、、
3.etcd参数配置说明
对3个etcd节点进行配置。etcd节点的配置方式包括启动参数、环境变量、配置文件等,本例使用环境变量方式将其配置到/etc/etcd/etcd.conf文件中,供systemd服务读取。
3个etcd节点将被部署在192.168.72.133/2/4台主机上,配置文件/etc/etcd/etcd.conf的内容示例如下: