Janrs.com | 杨建勇
Janrs.com | 杨建勇

Alma8.6 部署ETCD集群教程01 - 创建ssl证书

[!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 就是指定证书的有效时间的。网上那么多证书过期的担忧在这里可以直接控制了,随便设置它个 10100
年的都可以

参数 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/

至此。部署 etcd 集群前 ssl 证书创建并分发完成。

如果你有任何问题,欢迎在底部留言。或者点击加入微信技术交流群 | 我的GitHub

码仔

文章作者

Janrs.com

发表回复

textsms
account_circle
email

Janrs.com | 杨建勇

Alma8.6 部署ETCD集群教程01 - 创建ssl证书
[!TIP] cfssl 创建 etcd 集群所需 ssl 证书 转载请注明出处:https://janrs.com Alma 版本 8.6 etcd 版本 3.5.5 cfssl 创建 ssl 证书 关于 ssl 证书简介 在部署前,有必要先了解 ssl 的…
扫描二维码继续阅读
2022-08-19