[!TIP]
cfssl
创建etcd
集群所需ssl
证书转载请注明出处:https://janrs.com
Alma
版本 8.6
etcd
版本 3.5.5
cfssl 创建 ssl 证书
关于 ssl 证书简介
在部署前,有必要先了解 ssl
的工作机制。
有关 ssl
证书的详解介绍链接:(https://janrs.com/?p=51)
[!NOTE]
ssl
证书有分三种:server
client
peer
server
端证书用于服务端验证客户端
client
端证书用于客户端验证服务端
peer
端证书用于双向验证。双向验证多用于集群,因为在集群内,既是服务端也是客户端
1.设置 /etc/hosts
[!NOTE]
三台etcd
集群以及三台k8s
master
集群都要设置
ip
地址改为自己对应的
cat >> /etc/hosts <<EOF
172.16.222.251 etcd-01
172.16.222.252 etcd-02
172.16.222.253 etcd-03
EOF
2.禁用 selinux
临时禁用和永久禁用
setenforce 0 && \
sed -ri '/^SELINUX/s/(SELINUX=)(.*)/\1disabled/' /etc/selinux/config
3.禁用 firewalld 和 iptables
[!NOTE]
如果iptables
不存在不用管
systemctl stop firewalld && systemctl disable firewalld && \
systemctl stop iptables && systemctl disable iptables
4.创建所需目录
[!NOTE]
每个节点都需要创建
mkdir -p /etc/etcd/ssl
5.设置接口版本
[!NOTE]
新版本的etcd
使用的是v3
版本的接口,有提供向下兼容v2
版本的接口
如果需要,设置成使用v3
版本的
每个节点都需要设置
cat >> /etc/profile <<EOF
export ETCDETC_API=3
EOF
source /etc/profile
6.安装 cfssl
[!NOTE]
节点上证书存放目录:/etc/etcd/ssl
cfssl
可以在其他地方安装,在etcd
服务器安装是非必需的
也就是说证书可以在其他地方生成,只需要设置好host
就行。生成后再上传到etcd
集群服务器
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && \
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && \
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 && \
mv cfssl_linux-amd64 /usr/local/bin/cfssl && \
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
7.生成 ssl 证书
[!NOTE]
ssl
证书有分三种,分别是server
client
peer
以及签发机构ca
根证书
7-1.生成 ca 证书
[!NOTE]
ca
证书用于颁发三种证书。该证书非常重要,需要保密保存
7-1-1.生成 ca 证书配置文件
[!NOTE]
配置参数解释:
参数profile
用于生成证书的时候指定是哪种证书,即:server
/client
/peer
参数expiry
就是指定证书的有效时间的。网上那么多证书过期的担忧在这里可以直接控制了,随便设置它个10
年100
年的都可以
参数signing
表示可以用于签发和校验其他证书,生成的ca.pem
证书中CA=TRUE
key encipherment
表示密钥加密
server auth
表示签发server
端证书
client auth
表示签发peer
端证书
两者同时指定表示的就是生成peer
对等证书
cat > /etc/etcd/ssl/ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "43800h"
},
"profiles": {
"server": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
7-1-2.生成 csr 证书配置文件
cat > /etc/etcd/ssl/ca-csr.json <<EOF
{
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
7-1-3.生成 ca 证书
[!NOTE]
该操作将生成
ca-key.pem
ca.csr
ca.pem
ca.csr
在整个配置过程将不会使用到
确保ca-key.pem
文件的安全
cd /etc/etcd/ssl && \
cfssl gencert -initca ca-csr.json | cfssljson -bare ca - && \
ls ca*
7-2.生成 server 端证书
[!NOTE]
很多教程都是直接设置的IP
地址
对外访问最好是设置成域名地址,避免IP
改变服务全部不能访问
还可以添加额外的备用host
地址
也可以使用泛域名的格式:*.etcd.com
cat > /etc/etcd/ssl/etcd-server-csr.json <<EOF
{
"CN": "etcd-server",
"hosts": [
"127.0.0.1",
"172.16.222.251",
"172.16.222.252",
"172.16.222.253"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"O": "k8s",
"OU": "System",
"ST": "Beijing"
}
]
}
EOF
cd /etc/etcd/ssl && \
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server etcd-server-csr.json | cfssljson -bare etcd-server && \
ls etcd-server*
7-3.生成 client 端证书
[!NOTE]
对于etcd
集群,client
端证书是用不到的。这里记录下生成的命令
对于其他客户端是有需要用到的,到时候再另外生成
cat > /etc/etcd/ssl/etcd-client-csr.json <<EOF
{
"CN": "etcd-client",
"hosts": [""],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"O": "k8s",
"OU": "System",
"ST": "Beijing"
}
]
}
EOF
cd /etc/etcd/ssl && \
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client etcd-client-csr.json | cfssljson -bare etcd-client && \
ls etcd-client*
7-4.生成 peer 端证书
[!NOTE]
对于etcd
集群,每个节点既是作为server
又是作为client
端,所以需要生成peer
对等证书
cat > /etc/etcd/ssl/etcd-peer-csr.json <<EOF
{
"CN": "etcd-peer",
"hosts": [
"127.0.0.1",
"172.16.222.251",
"172.16.222.252",
"172.16.222.253"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"O": "k8s",
"OU": "System",
"ST": "Beijing"
}
]
}
EOF
cd /etc/etcd/ssl && \
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | cfssljson -bare etcd-peer && \
ls etcd-peer*
8.分发证书
[!NOTE]
所有ip
地址改成自己对应的
每次scp
上传依次输入密码
分发证书到对应的节点
8-1.分发 ca 证书
scp -r /etc/etcd/ssl/ca.pem root@172.16.222.251:/etc/etcd/ssl/ && \
scp -r /etc/etcd/ssl/ca.pem root@172.16.222.252:/etc/etcd/ssl/ && \
scp -r /etc/etcd/ssl/ca.pem root@172.16.222.253:/etc/etcd/ssl/
8-2.分发 server 证书
scp -r /etc/etcd/ssl/etcd-server*.pem root@172.16.222.251:/etc/etcd/ssl/ && \
scp -r /etc/etcd/ssl/etcd-server*.pem root@172.16.222.252:/etc/etcd/ssl/ && \
scp -r /etc/etcd/ssl/etcd-server*.pem root@172.16.222.253:/etc/etcd/ssl/
8-3.分发 client 证书
[!NOTE]
对于etcd
集群,client
端证书用不到,这里不做分发
8-4.分发 peer 证书
scp -r /etc/etcd/ssl/etcd-peer*.pem root@172.16.222.251:/etc/etcd/ssl/ && \
scp -r /etc/etcd/ssl/etcd-peer*.pem root@172.16.222.252:/etc/etcd/ssl/ && \
scp -r /etc/etcd/ssl/etcd-peer*.pem root@172.16.222.253:/etc/etcd/ssl/
发表回复