![Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/305/47379305/b_47379305.jpg)
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=1739503684-JK7dQ47EBeLddazaSv92lgxAIgb8af9s-0-40ad9dbe1b374bcdc7dea13695526660)
图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=1739503684-QhT8BRzNkbUrk5iu1gydzBJbhp7cT0Jf-0-f66404a44fb881c2812a0fcc2cc8d303)
其中,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=1739503684-A7LjFBGXmgu1wEs3gKKpTLTJLLlVMDnb-0-6c16f6e20149fdcfa0b0be2b00c9e832)
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_45.jpg?sign=1739503684-MgWkgDdeko1sdQerB58YAomR5dJ959xU-0-9ba93394238792602bd70dd984a9d66d)
然后使用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=1739503684-Lq46fR4krY6yrpAeUjKYeVzz1lPriefK-0-cab58de7987d8a60d356877d70d09ccf)
再创建客户端使用的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=1739503684-SrK7Y67JLcMRJ6iJCsn2PJHtdfARVzi8-0-dff8f26931135a86fd662e9e6dda6220)
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=1739503684-4nGcrEz6hFvoBa0fbL23acy2KGngWOWA-0-4b1095a68099c0713f3648097b0345c7)
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_49.jpg?sign=1739503684-aliQpaeN36xokeGSFGSNrMAhLpwKvVUl-0-3b2e4557ad6f923689a708bb946a6267)
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_50.jpg?sign=1739503684-4mjEEW3oaq3G1KH4dN2qM9b7EvbzA5hf-0-30f90d65b63ba143547e0b69b1128d61)
主要配置参数包括为客户端和集群其他节点配置的各监听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=1739503684-5B0h3TVk5LNW4fAxAJMYIr4juYM3Z81D-0-78385371abadbe358d99671c823c7ac5)
然后用etcdctl客户端命令行工具携带客户端CA证书,运行etcdctl endpoint health命令访问etcd集群,验证集群状态是否正常,命令如下:
![img](https://epubservercos.yuewen.com/EB1063/26763832509462206/epubprivate/OEBPS/Images/txt002_52.jpg?sign=1739503684-XO5gZIH24HmJBeATw6ueUMufM0gYFKBc-0-4e91d239b548f159e8df55c62e9567b2)
结果显示各节点状态均为“healthy”,说明集群正常运行。
至此,一个启用了HTTPS的3节点etcd集群就部署完成了,更多的配置参数请参考etcd官方文档的说明。