- Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)
- 龚正等编著
- 1015字
- 2024-01-22 18:49:52
2.3.3 部署安全的etcd高可用集群
etcd作为Kubernetes集群的主数据库,在安装Kubernetes各服务之前需要首先安装和启动。
1.下载etcd二进制文件,配置systemd服务
从GitHub官网下载etcd二进制文件,例如etcd-v3.4.13-linux-amd64.tar.gz,如图2.2所示。
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_42.jpg?sign=1739346828-4wtNsD9HaMxY2R9cNKUykZNmlP9bv1Qx-0-6ed76ce5be80a4db53a5c7b3f5dce99b)
图2.2 下载界面
解压缩后得到etcd和etcdctl文件,将它们复制到/usr/bin目录下。
然后将其部署为一个systemd的服务,创建systemd服务配置文件/usr/lib/systemd/system/etcd.service,内容示例如下:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_43.jpg?sign=1739346828-4W2QtxsoacBcxGeIYwG7XuYZBWdYDyGJ-0-66bb96ea0f2ba686e6093ad43d7a22d6)
其中,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地址,例如:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_44.jpg?sign=1739346828-kdDiOiqol1kB2QCPWHcphXpK3PzseU4X-0-9e62db8ed8d1b1bf5002228e50a376a0)
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_45.jpg?sign=1739346828-UdcrahcnjaBysH1fIpg7yqVK51mlaie1-0-18b36f6f83af019e945e93d12c938396)
然后使用openssl命令创建etcd的服务端CA证书,包括etcd_server.key和etcd_server.crt文件,将其保存到/etc/etcd/pki目录下:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_46.jpg?sign=1739346828-F60rICjREkeQqcpcL7x6WKSgYgVUyNPk-0-65a37ea28d7d25759fb7e3202b1fbe65)
再创建客户端使用的CA证书,包括etcd_client.key和etcd_client.crt文件,也将其保存到/etc/etcd/pki目录下,后续供kube-apiserver连接etcd时使用:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_47.jpg?sign=1739346828-LLcQKCRFZW3N48CzEAKYe4MyTfDIgjHe-0-a1c365ec0a95c84ec32dfc7d3e978e2e)
3.etcd参数配置说明
接下来对3个etcd节点进行配置。etcd节点的配置方式包括启动参数、环境变量、配置文件等,本例使用环境变量方式将其配置到/etc/etcd/etcd.conf文件中,供systemd服务读取。
3个etcd节点将被部署在192.168.18.3、192.168.18.4和192.168.18.5 3台主机上,配置文件/etc/etcd/etcd.conf的内容示例如下:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_48.jpg?sign=1739346828-u8zqLxcNFNnXrZJAuQfswSqURccp1JXn-0-024ed3ad47ce249e8570a710f1f2b82d)
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_49.jpg?sign=1739346828-p6pXNIikhyzf3U57ospHFFIRtMbK2cl0-0-a764c5c12416bc428b49a033e39aa33a)
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_50.jpg?sign=1739346828-2b54IJ8Td83k5s7hmXgj4iTP2ybtphGz-0-c5b058a059ab8d15a041727702d1b519)
主要配置参数包括为客户端和集群其他节点配置的各监听URL地址(均为HTTPS URL地址),并配置相应的CA证书参数。
etcd服务相关的参数如下。
◎ ETCD_NAME:etcd节点名称,每个节点都应不同,例如etcd1、etcd2、etcd3。
◎ ETCD_DATA_DIR:etcd数据存储目录,例如/etc/etcd/data/etcd1。
◎ ETCD_LISTEN_CLIENT_URLS和ETCD_ADVERTISE_CLIENT_URLS:为客户端提供的服务监听URL地址,例如https://192.168.18.3:2379。
◎ ETCD_LISTEN_PEER_URLS和ETCD_INITIAL_ADVERTISE_PEER_URLS:为本集群其他节点提供的服务监听URL地址,例如https://192.168.18.3:2380。
◎ ETCD_INITIAL_CLUSTER_TOKEN:集群名称,例如etcd-cluster。
◎ ETCD_INITIAL_CLUSTER:集群各节点的endpoint列表,例如"etcd1=https://192.168.18.3:2380,etcd2=https://192.168.18.4:2380,etcd3=https://192.168.18.5:2380"。
◎ ETCD_INITIAL_CLUSTER_STATE:初始集群状态,新建集群时设置为“new”,集群已存在时设置为“existing”。
CA证书相关的配置参数如下。
◎ ETCD_CERT_FILE:etcd服务端CA证书-crt文件全路径,例如/etc/etcd/pki/etcd_server.crt。
◎ ETCD_KEY_FILE:etcd服务端CA证书-key文件全路径,例如/etc/etcd/pki/etcd_server.key。
◎ ETCD_TRUSTED_CA_FILE:CA根证书文件全路径,例如/etc/kubernetes/pki/ca.crt。
◎ ETCD_CLIENT_CERT_AUTH:是否启用客户端证书认证。
◎ ETCD_PEER_CERT_FILE:集群各节点相互认证使用的CA证书-crt文件全路径,例如/etc/etcd/pki/etcd_server.crt。
◎ ETCD_PEER_KEY_FILE:集群各节点相互认证使用的CA证书-key文件全路径,例如/etc/etcd/pki/etcd_server.key。
◎ ETCD_PEER_TRUSTED_CA_FILE:CA根证书文件全路径,例如/etc/kubernetes/pki/ca.crt。
4.启动etcd集群
基于systemd的配置,在3台主机上分别启动etcd服务,并设置为开机自启动:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_51.jpg?sign=1739346828-1PKCAtpzuguzFlnUpDhYbrgbIcAvVZtH-0-f8879825559219360c381145f4d10400)
然后用etcdctl客户端命令行工具携带客户端CA证书,运行etcdctl endpoint health命令访问etcd集群,验证集群状态是否正常,命令如下:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_52.jpg?sign=1739346828-1PzM7aGJfTF2BlTGdpL3a6LSOcaQgQJt-0-c73fca5f662b5b832555601e20c1dc54)
结果显示各节点状态均为“healthy”,说明集群正常运行。
至此,一个启用了HTTPS的3节点etcd集群就部署完成了,更多的配置参数请参考etcd官方文档的说明。