寫在前頭:
- 細(xì)心點
- 執(zhí)行命令前多檢查檢查
- 保存文件前多檢查檢查
- 出現(xiàn)錯誤之后,認(rèn)真看報錯信息
1. 創(chuàng)建 CA 根證書
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=172.16.0.10" -days 36500 -out ca.crt
- -subj: “/CN” 的值為 Master 主機名或 IP 地址。
- days: 設(shè)置證書的有效期。
cp ca.* /etc/kubernetes/pki/
將生成的 ca.key 和 ca.crt 文件保存在 /etc/kubernetes/pki 目錄下。
2. 安裝 etcd 集群
從 Github 官網(wǎng)下載 etcd 二進制文件,解壓縮后得到 etcd 和 etcdctl 文件,將它們復(fù)制到 /usr/bin 目錄下。

下載地址:https://github.com/etcd-io/etcd/releases/tag/v3.5.1
tar -zxvf etcd-v3.5.1-linux-amd64.tar.gz
cd etcd-v3.5.1-linux-amd64/
cp etcd etcdctl /usr/bin/
然后將其部署為一個 systemd 的服務(wù)
cat>/usr/lib/systemd/system/etcd.service <<EOF
[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
EOF
其中,EnvironmentFile 指定配置文件的全路徑,其中的參數(shù)以環(huán)境變量的格式進行配置。
接下來先對 etcd 需要的 CA 證書配置進行說明。
3. 創(chuàng)建 etcd 的 CA 證書
先創(chuàng)建一個 x509 v3 配置文件 ectd_ssl.cnf,其中 subjectAltName 參數(shù)(alt_names)包括所有 etcd 主機的 IP 地址,
[ req ]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 172.16.0.10
IP.2 = 172.16.0.11
然后用 openssl 命令創(chuàng)建 etcd 的服務(wù)端 CA 證書,包括 etcd_server.key 和 etcd_server.crt 文件,將其保存到 /etc/etcd/pki 目錄下:
openssl genrsa -out etcd_server.key 2048
openssl req -new -key etcd_server.key -config etcd_ssl.cnf -subj "/CN=etcd-server" -out etcd_server.csr
openssl x509 -req -in etcd_server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_server.crt
mkdir -p /etc/etcd/pki
cp etcd_server.key etcd_server.crt /etc/etcd/pki/
在創(chuàng)建客戶端使用的 CA 證書,包括 etcd_client.key 和 ectd_client.crt 文件,也將其保存到 /etc/etcd/pki 目錄下,后續(xù)供 kube-apiserver 連接 etcd 時使用:
openssl genrsa -out etcd_client.key 2048
openssl req -new -key etcd_client.key -config etcd_ssl.cnf -subj "/CN=etcd-client" -out etcd_client.csr
openssl x509 -req -in etcd_client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_client.crt
cp etcd_client.key etcd_client.crt /etc/etcd/pki/
4. etcd 參數(shù)配置說明
接下來對 2 個 etcd 節(jié)點進行配置。etcd 節(jié)點的配置方式包括啟動參數(shù)、環(huán)境變量、配置文件等,本例使用環(huán)境變量方式將其配置到 /etc/etcd/etcd.conf 文件中,供 systemd 服務(wù)讀取。
#節(jié)點 1 配置
ETCD_NAME=etcd1
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://172.16.0.10:2379
ETCD_ADVERTISE_CLIENT_URLS=https://172.16.0.10:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://172.16.0.10:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://172.16.0.10:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_INITIAL_CLUSTER="etcd1=https://172.16.0.10:2380,etcd2=https://172.16.0.11:2380"
ETCD_INITIAL_CLUSTER_STATE=new
#節(jié)點 2 配置
ETCD_NAME=etcd2
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://172.16.0.11:2379
ETCD_ADVERTISE_CLIENT_URLS=https://172.16.0.11:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://172.16.0.11:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://172.16.0.11:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_INITIAL_CLUSTER="etcd1=https://172.16.0.10:2380,etcd2=https://172.16.0.11:2380"
ETCD_INITIAL_CLUSTER_STATE=new
注意:各個節(jié)點的 ETCD_NAME 和 ip 都要對應(yīng)上,還有 ETCD_INITIAL_CLUSTER根據(jù)節(jié)點數(shù)修改。
5. 啟動 etcd 集群
基于 systemd 的配置在 2 臺主機上分別啟動 etcd 服務(wù),并設(shè)置為開機啟動:
systemctl restart etcd && systemctl enable etcd
然后用 etcdctl 客戶端命令行工具攜帶客戶端 CA 證書,運行 etcdctl endpoint health 命令訪問 etc 集群,驗證集群狀態(tài)是否正常,命令如下:
etcdctl --cacert=/etc/kubernetes/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://172.16.0.10:2379,https://172.16.0.11:2379 endpoint health
