创建 ETCD 证书生成策略配置文件
cat << EOF | tee etcd-ca-config.json { "signing": { "default": { "expiry": "87600h" }, "profiles": { "www": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } EOF # 参数详解 ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile; signing: 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE; server auth: 表示client可以用该 CA 对server提供的证书进行验证; client auth: 表示server可以用该CA对client提供的证书进行验证;创建 ETCD CA 证书签名请求
cat << EOF | tee etcd-ca-csr.json { "CN": "etcd CA", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Shenzhen", "ST": "Shenzhen" } ] } EOF 参数详解: CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法; names中的字段: C : country,国家 ST: state,州或省份 L:location,城市 O:organization,组织,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group) OU:organization unit,组织单位创建 ETCD SERVER 证书签名请求
cat << EOF | tee etcd-server-csr.json { "CN": "etcd", "hosts": [ "192.168.0.10", "192.168.0.12", "192.168.0.4" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Shenzhen", "ST": "Shenzhen" } ] } EOF hosts:指定授权使用该证书的 etcd 节点 IP 列表,需要将 etcd 集群所有节点 IP 都列在其中;生成 ETCD CA 证书和私钥
cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare etcd-ca cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem -config=etcd-ca-config.json -profile=www etcd-server-csr.json | cfssljson -bare etcd-server # cfssl参数详解 gencert: 生成新的key(密钥)和签名证书 -initca:初始化一个新ca -ca:指明ca的证书 -ca-key:指明ca的私钥文件 -config:指明请求证书的json文件 -profile:与-config中的profile对应,是指根据config中的profile段来生成证书的相关信息 查看cert(证书信息): cfssl certinfo -cert ca.pem 查看CSR(证书签名请求)信息: cfssl certinfo -csr ca.csr # cfssljson -bare 来自CFSSL的返回值,使用cert,csr和key字段拆分成JSON格式以生成文件。 ssh-key认证 # ssh-keygen Generating **public**/**private** rsa key pair. Enter file **in** which to save the **key** (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter **passphrase** (empty **for** no passphrase): Enter same passphrase again: Your identification has been saved **in** /root/.ssh/id_rsa. Your **public** key has been saved **in** /root/.ssh/id_rsa.pub. The key fingerprint **is**: SHA256:FQjjiRDp8IKGT+UDM+GbQLBzF3DqDJ+pKnMIcHGyO/o root@qas-k8s-master01 The key's randomart image **is**: +---[RSA 2048]----+ |o.==o o. .. | |ooB+o+ o. . | |B++@o o . | |=X**o . | |o=O. . S | |..+ | |oo . | |* . | |o+E | +----[SHA256]-----+ # ssh-copy-id 192.168.0.10** # ssh-copy-id 192.168.0.12** # ssh-copy-id 192.168.0.4** # ssh-copy-id 192.168.0.7** # ssh-copy-id 192.168.0.8** # ssh-copy-id 192.168.0.9** **master主节点要和node节点做免密,方便拷贝文件** 解压etcd安装文件以下部署步骤在规划的三个etcd节点操作一样,唯一不同的是etcd配置文件中的服务器IP要写当前的服务器:
tar -xvf etcd-v3.3.10-linux-amd64.tar.gz cd etcd-v3.3.10-linux-amd64/ \cp etcd etcdctl /data/soft/etcd/bin/ cat << EOF | tee /data/soft/etcd/cfg/etcd #[Member] ETCD_NAME="etcd01" ETCD_DATA_DIR="/data/www/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.0.10:2380" ETCD_LISTEN_CLIENT_URLS="https://192.168.0.10:2379" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.0.10:2380" ETCD_ADVERTISE_CLIENT_URLS="https://192.168.0.10:2379" ETCD_INITIAL_CLUSTER="etcd01=https://192.168.0.10:2380,etcd02=https://192.168.0.12:2380,etcd03=https://192.168.0.4:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new" EOF配置文件详解:
ETCD_NAME 节点名称 ETCD_DATA_DIR 数据目录 ETCD_LISTEN_PEER_URLS 集群通信监听地址 ETCD_LISTEN_CLIENT_URLS 客户端访问监听地址 ETCD_INITIAL_ADVERTISE_PEER_URLS 集群通告地址 ETCD_ADVERTISE_CLIENT_URLS 客户端通告地址 ETCD_INITIAL_CLUSTER 集群节点地址 ETCD_INITIAL_CLUSTER_TOKEN 集群Token ETCD_INITIAL_CLUSTER_STATE 加入集群的当前状态,new是新集群,existing表示加入已有集群 创建 etcd的 etcd.service文件 vim /usr/lib/systemd/system/etcd.service [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] User=www Group=www Type=notify EnvironmentFile=http://www.likecs.com/data/soft/etcd/cfg/etcd ExecStart=http://www.likecs.com/data/soft/etcd/bin/etcd \ --name=${ETCD_NAME} \ --data-dir=${ETCD_DATA_DIR} \ --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \ --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},:2379 \ --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \ --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \ --initial-cluster=${ETCD_INITIAL_CLUSTER} \ --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \ --initial-cluster-state=new \ --cert-file=http://www.likecs.com/data/soft/etcd/ssl/etcd-server.pem \ --key-file=http://www.likecs.com/data/soft/etcd/ssl/etcd-server-key.pem \ --peer-cert-file=http://www.likecs.com/data/soft/etcd/ssl/etcd-server.pem \ --peer-key-file=http://www.likecs.com/data/soft/etcd/ssl/etcd-server-key.pem \ --trusted-ca-file=http://www.likecs.com/data/soft/etcd/ssl/etcd-ca.pem \ --peer-trusted-ca-file=http://www.likecs.com/data/soft/etcd/ssl/etcd-ca.pem Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target # 参数详解: WorkingDirectory、--data-dir:指定工作目录和数据目录为 ${ETCD_DATA_DIR},需在启动服务前创建这个目录; --wal-dir:指定 wal 目录,为了提高性能,一般使用 SSD 或者和 --data-dir 不同的磁盘; --name:指定节点名称,当 --initial-cluster-state 值为 new 时,--name 的参数值必须位于 --initial-cluster 列表中; --cert-file、--key-file:etcd server 与 client 通信时使用的证书和私钥; --peer-cert-file、--peer-key-file:etcd 与 peer 通信使用的证书和私钥; --trusted-ca-file:签名 client 证书的 CA 证书,用于验证 client 证书; --peer-trusted-ca-file:签名 peer 证书的 CA 证书,用于验证 peer 证书; 拷贝证书文件