Kubernetes+Etcd----集群安装(etcd证书100年) - 教程

news/2026/1/27 9:08:27/文章来源:https://www.cnblogs.com/gccbuaa/p/19536530

提示:文章实验安装etcd采用openssl安装

文章目录

  • 前言
    • etcd是什么?
    • etcd 的核心特点
      • ✔ 1. 强一致性(Strong Consistency)
      • ✔ 2. 高可用(High Availability)
      • ✔ 3. Watch(实时监听机制)
      • ✔ 4. 版本化数据存储(MVCC)
  • 一、下面详细分析一下 Kubernetes 外接(External)etcd 集群的优缺点,并结合你的场景(单 master + 三节点 etcd)说明:
    • 好处(优点)
      • 1.1、高可用性与独立性
      • 1.2、数据安全与隔离
      • 1.3、灵活的备份与恢复
      • 1.4、资源隔离
      • 1.5、版本独立升级
    • ❗ 坏处(缺点 / 注意点)
      • 1.1、部署复杂
      • 1.2、运维成本增加
      • 1.3、网络依赖
      • 1.4、证书管理复杂
      • 1.5、额外单点
    • Kubernetes:单 Master + 外接 etcd 适用场景(仅场景 + 建议)
  • 二、下面详细分析一下 Kubernetes 外接(External)etcd 集群的优缺点,并结合你的场景(多 master + 三节点 etcd)说明:
    • 好处(优点)
      • 2.1、控制平面高可用(HA)
      • 2.2、etcd 三节点高可用存储
      • 2.3. Master 负载分摊
      • 2.4、etcd 与控制平面解耦
      • 2.5、方便扩展
    • ❗ 坏处(缺点 / 注意点)
      • 2.1、部署复杂度更高
      • 2.2、证书更多,容易出问题
      • 2.3、网络依赖更强
      • 2.4、运维难度更高
      • 2.5. 成本更高
    • Kubernetes:多 Master + 外接 etcd 适用场景(仅场景 + 建议)
  • 三、 总结
  • 四、环境需求
  • 五、安装ETCD(以下步骤etcd01、etcd02、etcd03三台机器同时安装)
    • 5.1、使用二进制方式部署etcd
    • 5.2、修改服务器名称
    • 5.3、上传压缩包至服务器解压并安装()
    • 5.4、添加hosts
  • 六、以下在172.17.48.187执行安装
    • 6.1、准备目录并生成 CA
    • 6.2、在172.17.48.187上为 etcd01 (172.17.48.187) 生成
    • 6.3、在172.17.48.187上为 etcd02 (172.17.48.175) 生成
    • 6.4、在172.17.48.187上为 etcd03 (172.17.48.65) 生成
    • 6.5、在 etcd01:把对应文件分发到各节点
    • 6.6、在每台节点上设置权限(在各自节点执行)
    • 6.7、在每台节点上验证证书(在对应节点执行)
    • 6.8、etcd设置systemd 启动单元
      • 6.8.1、在172.17.48.187上设置
      • 6.8.2、在172.17.48.175上设置
      • 6.8.3、在172.17.48.65上设置
  • 七、在每台节点启动 etcd(在各自节点执行)
  • 八、查看集群状态
    • 8.1、Leader、版本、DB大小
  • 九、数据写入测试
    • 9.1、数据写入(hello etcd),在172.17.48.187节点执行
    • 9.2、数据输出(hello etcd),172.17.48.175节点执行
  • 十、模拟主节点宕机查看etcd会不会重新选举主节点(172.17.48.187上操作)
  • 十一、apiserver-etcd-client-openssl证书
    • 10.1、在k8s的master节点创建
    • 10.2、以下在172.17.48.187节点上执行
  • 十二、安装k8s
    • 12.1、单节点master安装
    • 12.2、多master节点安装
    • 12.3、初始化k8s
    • 12.4、后面接着按照k8s文档安装
  • 十三、扩展知识
  • 十四、总结


前言

etcd是什么?

etcd 是一个分布式、强一致性的键值数据库(Key-Value Store),由 CoreOS 开发,现属于 CNCF。它的设计目标是:可靠地存储集群的关键数据,并确保多节点之间数据强一致。在 Kubernetes 中,etcd 是整个集群的大脑。所有集群状态都存放在 etcd 里。

etcd 的核心特点

✔ 1. 强一致性(Strong Consistency)

通过 Raft 共识算法 保证写入必须获得多数节点确认。
即使部分节点宕机,数据依然不会乱。

✔ 2. 高可用(High Availability)

通过 多节点集群(通常 3 或 5 节点)保证:
任意一个节点挂了,集群仍然可读可写。
多数节点正常即可维持服务。

✔ 3. Watch(实时监听机制)

客户端可以订阅某个 key 的变化。
Kubernetes 大量依赖这个机制来实时同步资源变化。

✔ 4. 版本化数据存储(MVCC)

每次写都会生成新的版本(revision),可用来:
快照(snapshot)
回滚
Debug 数据变更记录

一、下面详细分析一下 Kubernetes 外接(External)etcd 集群的优缺点,并结合你的场景(单 master + 三节点 etcd)说明:

好处(优点)

1.1、高可用性与独立性

1.2、数据安全与隔离

  • etcd 是 Kubernetes 的核心数据库,存储了集群状态。独立部署可以避免 master 进程异常导致数据库损坏。
  • 对于大规模集群,etcd 独立部署便于做备份、快照和灾备。

1.3、灵活的备份与恢复

1.4、资源隔离

  • etcd 会消耗大量内存和 I/O,独立部署可以避免与 kube-apiserver、controller-manager 等控制平面组件争用资源。
  • 对于生产环境或大规模集群,性能更可控。

1.5、版本独立升级

❗ 坏处(缺点 / 注意点)

1.1、部署复杂

1.2、运维成本增加

  • 需要单独维护 etcd 集群:备份、监控、证书更新、节点扩容、灾备等。
  • 对于小型集群或测试环境,可能显得麻烦。

1.3、网络依赖

1.4、证书管理复杂

  • 每台 master 都需要外接 etcd 的 CA、客户端证书和私钥。
  • 证书到期或丢失需要手动更新,否则 kube-apiserver 无法访问 etcd。

1.5、额外单点

Kubernetes:单 Master + 外接 etcd 适用场景(仅场景 + 建议)

场景建议
小型生产环境,控制平面需要更高稳定性单 Master + 外接 etcd,3 节点 etcd 集群,保证数据安全和稳定性
节点规模不大(10~30 Nodes),对 etcd 性能有要求单 Master + 外接 etcd,提高 etcd 性能,避免写入瓶颈
控制平面偶尔需要单独维护或备份 etcd外接 etcd 独立运维,便于证书管理和备份
关键业务或敏感数据环境单 Master + 外接 etcd,可单独管理 etcd 生命周期,增强安全性
单 Master 环境下需要保证 etcd 高可用外接 3~5 节点 etcd 集群,保证 etcd 节点故障时仍可服务
测试或开发环境,但希望模拟生产场景单 Master + 外接 etcd,可练习独立 etcd 管理和备份策略

二、下面详细分析一下 Kubernetes 外接(External)etcd 集群的优缺点,并结合你的场景(多 master + 三节点 etcd)说明:

好处(优点)

2.1、控制平面高可用(HA)

2.2、etcd 三节点高可用存储

etcd 使用 Raft 协议,3 节点可容忍 1 个节点挂掉。
保证集群数据(Pod 状态、节点信息、配置)可靠一致。
高可用存储是 K8s 正常运行的核心价值。

2.3. Master 负载分摊

多个 kube-apiserver 节点可以分摊请求量,更稳定。
特别适合:

2.4、etcd 与控制平面解耦

  • etcd 单独部署 → 性能更稳定。
  • 升级、备份、恢复更灵活。
  • etcd 不与 apiserver 抢 CPU / IOPS。
    对“生产稳定性”有非常大帮助。

2.5、方便扩展

轻松新增 master,提高冗余。
可以扩展 etcd 到 5 节点保证更强的容灾能力。
对运维团队更友好。

❗ 坏处(缺点 / 注意点)

2.1、部署复杂度更高

需要同时管理:

2.2、证书更多,容易出问题

每个 kube-apiserver 访问 etcd 都需要:

  • ca.pem
  • apiserver-etcd-client.pem
  • apiserver-etcd-client-key.pem
    证书到期或路径错误 → API Server 直接起不来,控制平面瘫痪。

2.3、网络依赖更强

2.4、运维难度更高

你必须考虑:

  • etcd 备份策略(快照、备份 S3/OSS)
  • etcd 恢复流程
  • master 节点健康检查
  • LB 高可用设计(如 keepalived / HAProxy)
    比单 master 明显更重。

2.5. 成本更高

需要:

Kubernetes:多 Master + 外接 etcd 适用场景(仅场景 + 建议)

场景建议
小型测试集群(1 Master, 2~3 Nodes)无需多 Master,使用单 Master + 内置 etcd 即可
中小型生产环境(1 Master 可接受短暂不可用)建议多 Master,至少 3 个 Master 提升可用性
控制平面不允许单点故障使用多 Master,提高 API Server、Scheduler、Controller 的高可用性
集群节点规模较大(30+ Nodes)建议部署多 Master,避免调度与 API Server 压力偏高
大规模集群(100+ Nodes)必须部署多 Master,防止控制平面性能瓶颈
关键业务(金融、电商、政务)强烈建议多 Master,确保 SLA 与系统稳定性
跨机房 / 多可用区部署必需多 Master,避免单机房故障导致集群不可用
需要确保升级期间保持可用多 Master 支持滚动升级控制平面
能容忍短暂不可用的开发测试环境不需要多 Master,单 Master 成本低、维护简单

三、 总结

类型适用场景优点缺点 / 注意事项运维建议
单 Master + 外接 etcd小型生产环境、节点规模较小(<30 Nodes)、控制平面偶尔需要备份或维护- 单 Master 架构简单,运维成本低
- 外接 etcd 可保证数据安全和独立管理
- 可单独备份和扩展 etcd 集群
- 单 Master 整体控制平面不可用时,集群 API 不可访问
- 对控制平面负载和高可用性有限
- 建议 etcd 集群至少 3 节点
- 定期备份 etcd
- 配置证书管理和访问控制
多 Master + 外接 etcd大规模集群(>30 Nodes)、生产环境、关键业务、跨机房部署、需要高可用控制平面- 控制平面高可用,支持单 Master 故障
- 外接 etcd 提升数据安全和性能
- 支持滚动升级控制平面
- 架构复杂,运维成本高
- 需要负载均衡器或 DNS 配置
- 证书和访问控制管理更复杂
- 建议 Master 节点 3~5 个
- 外接 etcd 节点 3~5 个
- 配置负载均衡和高可用网络
- 制定升级和备份策略

提示:以下是本篇文章正文内容,下面案例可供参考
注意:一定要注意etcd版本和k8s版本的对应

四、环境需求

公网IP内网IP服务名称
81.69.231.164172.17.48.187etcd-v3.5.16-linux-amd64etcd01
124.222.178.231172.17.48.175etcd-v3.5.16-linux-amd64etcd02
101.43.28.196172.17.48.65etcd-v3.5.16-linux-amd64etcd03
110.40.190.220172.17.48.119kubelet-1.27.3、kubeadm-1.27.3、kubectl-1.27.3master
150.158.135.99172.17.48.70kubelet-1.27.3、kubeadm-1.27.3、kubectl-1.27.3node1
150.158.187.170172.17.48.214kubelet-1.27.3、kubeadm-1.27.3、kubectl-1.27.3node2

五、安装ETCD(以下步骤etcd01、etcd02、etcd03三台机器同时安装)

5.1、使用二进制方式部署etcd

  • 参考官方文档:https://github.com/etcd-io/etcd/releases
  • etcd 软件包下载地址:https://github.com/etcd-io/etcd/releases/download/v3.5.16/etcd-v3.5.16-linux-amd64.tar.gz

5.2、修改服务器名称

hostnamectl set-hostname etcd01
hostnamectl set-hostname etcd02
hostnamectl set-hostname etcd03

5.3、上传压缩包至服务器解压并安装()

mkdir -p /etc/etcd/ssl
tar zxvf etcd-v3.5.16-linux-amd64.tar.gz
cd etcd-v3.5.16-linux-amd64/
mv etcd etcdctl /usr/local/bin/

5.4、添加hosts

cat >> /etc/hosts << EOF
172.17.48.187 etcd01
172.17.48.175 etcd02
172.17.48.65 etcd03
EOF

六、以下在172.17.48.187执行安装

6.1、准备目录并生成 CA

# 在 etcd01  执行
cd /etc/etcd/ssl
# 生成 CA 私钥(***仅在 etcd01 ***)
openssl genrsa -out ca-key.pem 4096
# 生成 CA 根证书(仅在 etcd01 )
# 如果想换成100年将3650换成36500即可
openssl req -x509 -new -nodes -key ca-key.pem \
-days 3650 -out ca.pem -subj "/CN=etcd-CA"

6.2、在172.17.48.187上为 etcd01 (172.17.48.187) 生成

为每个节点生成私钥 + CSR,然后在 172.17.48.187用 CA 签名

## 1、生成 openssl 配置(包含 SAN)
cat > etcd01-openssl.cnf <<EOF
[ req ]
default_bits       = 4096
prompt             = no
default_md         = sha256
req_extensions     = req_ext
distinguished_name = dn
[ dn ]
CN = etcd01
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = etcd01
DNS.2 = localhost
IP.1  = 127.0.0.1
IP.2  = 172.17.48.187
EOF
## 2、生成私钥(在 etcd01)
openssl genrsa -out etcd01-key.pem 4096
## 3、生成 CSR(在 etcd01)
openssl req -new -key etcd01-key.pem -out etcd01.csr -config etcd01-openssl.cnf
## 4、使用 CA 在 NODE1 上签发证书(在 etcd01)
## 注意如果想使用100年证书,将下面365改成36500即可
openssl x509 -req -in etcd01.csr \
-CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out etcd01.pem -days 365 \
-extensions req_ext -extfile etcd01-openssl.cnf

6.3、在172.17.48.187上为 etcd02 (172.17.48.175) 生成

cat > etcd02-openssl.cnf <<EOF
[ req ]
default_bits       = 4096
prompt             = no
default_md         = sha256
req_extensions     = req_ext
distinguished_name = dn
[ dn ]
CN = etcd02
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = etcd02
DNS.2 = localhost
IP.1  = 127.0.0.1
IP.2  = 172.17.48.175
EOF
openssl genrsa -out etcd02-key.pem 4096
openssl req -new -key etcd02-key.pem -out etcd02.csr -config etcd02-openssl.cnf
# 在 etcd01 使用 CA 签发(必须在 etcd01 执行)
## 注意如果想使用100年证书,将下面365改成36500即可
openssl x509 -req -in etcd02.csr \
-CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out etcd02.pem -days 365 \
-extensions req_ext -extfile etcd02-openssl.cnf

6.4、在172.17.48.187上为 etcd03 (172.17.48.65) 生成

cat > etcd03-openssl.cnf <<EOF
[ req ]
default_bits       = 4096
prompt             = no
default_md         = sha256
req_extensions     = req_ext
distinguished_name = dn
[ dn ]
CN = etcd03
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = etcd03
DNS.2 = localhost
IP.1  = 127.0.0.1
IP.2  = 172.17.48.65
EOF
openssl genrsa -out etcd03-key.pem 4096
openssl req -new -key etcd03-key.pem -out etcd03.csr -config etcd03-openssl.cnf
# 在 etcd01使用 CA 签发(必须在 etcd01执行)
## 注意如果想使用100年证书,将下面365改成36500即可
openssl x509 -req -in etcd03.csr \
-CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out etcd03.pem -days 365 \
-extensions req_ext -extfile etcd03-openssl.cnf

6.5、在 etcd01:把对应文件分发到各节点

注意:不要分发 ca-key.pem
注意:在 etcd01 执行以下 scp(如果用 root 以外的用户,把 root@ 换掉)

# 把 etcd01 的证书放到 NODE1(其实本地已就位,无需复制,但为了保证权限,可以再次写出)
chmod 700 /etc/etcd/ssl
# etcd01 的文件已在 NODE1 /etc/etcd/ssl: ca.pem etcd01.pem etcd01-key.pem
# 把 etcd02 的证书复制到 NODE2
scp /etc/etcd/ssl/ca.pem /etc/etcd/ssl/etcd02.pem /etc/etcd/ssl/etcd02-key.pem root@172.17.48.175:/etc/etcd/ssl/
# 把 etcd03 的证书复制到 NODE3
scp /etc/etcd/ssl/ca.pem /etc/etcd/ssl/etcd03.pem /etc/etcd/ssl/etcd03-key.pem root@172.17.48.65:/etc/etcd/ssl/

6.6、在每台节点上设置权限(在各自节点执行)

# 在各自节点执行(etcd01、etcd02、etcd03 都要)
chmod 600 /etc/etcd/ssl/*-key.pem
chmod 644 /etc/etcd/ssl/*.pem
chown root:root /etc/etcd/ssl/*.pem /etc/etcd/ssl/*-key.pem

6.7、在每台节点上验证证书(在对应节点执行)

# 在 etcd01 执行
openssl x509 -in /etc/etcd/ssl/etcd01.pem -noout -text | grep -A5 "Subject Alternative Name"
# 在 etcd02 执行
openssl x509 -in /etc/etcd/ssl/etcd02.pem -noout -text | grep -A5 "Subject Alternative Name"
# 在 etcd03 执行
openssl x509 -in /etc/etcd/ssl/etcd03.pem -noout -text | grep -A5 "Subject Alternative Name"

6.8、etcd设置systemd 启动单元

源码安装假设 /usr/local/bin/etcd)
下面我给出 3 个节点的 etcd.service 示例文件,把对应 --name、–listen-client-urls、–listen-peer-urls、证书路径改为你环境即可。把每个文件放在对应节点的 /etc/systemd/system/etcd.service。

## 三台节点同时安装
mkdir -p /var/lib/etcd

6.8.1、在172.17.48.187上设置

etcd01 (/etc/systemd/system/etcd.service) — 在 etcd01 上写入(把 name、IP、证书换成 etcd01)

[Unit]
Description=etcd
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name etcd01 \
--data-dir /var/lib/etcd \
--listen-client-urls https://172.17.48.187:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://172.17.48.187:2379 \
--listen-peer-urls https://172.17.48.187:2380 \
--initial-advertise-peer-urls https://172.17.48.187:2380 \
--initial-cluster "etcd01=https://172.17.48.187:2380,etcd02=https://172.17.48.175:2380,etcd03=https://172.17.48.65:2380" \
--initial-cluster-state new \
--initial-cluster-token etcd-cluster-1 \
--cert-file=/etc/etcd/ssl/etcd01.pem \
--key-file=/etc/etcd/ssl/etcd01-key.pem \
--trusted-ca-file=/etc/etcd/ssl/ca.pem \
--client-cert-auth=true \
--peer-cert-file=/etc/etcd/ssl/etcd01.pem \
--peer-key-file=/etc/etcd/ssl/etcd01-key.pem \
--peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \
--peer-client-cert-auth=true
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

6.8.2、在172.17.48.175上设置

etcd02 (/etc/systemd/system/etcd.service) — 在 etcd02 上写入(把 name、IP、证书换成 etcd02)

[Unit]
Description=etcd
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name etcd02 \
--data-dir /var/lib/etcd \
--listen-client-urls https://172.17.48.175:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://172.17.48.175:2379 \
--listen-peer-urls https://172.17.48.175:2380 \
--initial-advertise-peer-urls https://172.17.48.175:2380 \
--initial-cluster "etcd01=https://172.17.48.187:2380,etcd02=https://172.17.48.175:2380,etcd03=https://172.17.48.65:2380" \
--initial-cluster-state new \
--initial-cluster-token etcd-cluster-1 \
--cert-file=/etc/etcd/ssl/etcd02.pem \
--key-file=/etc/etcd/ssl/etcd02-key.pem \
--trusted-ca-file=/etc/etcd/ssl/ca.pem \
--client-cert-auth=true \
--peer-cert-file=/etc/etcd/ssl/etcd02.pem \
--peer-key-file=/etc/etcd/ssl/etcd02-key.pem \
--peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \
--peer-client-cert-auth=true
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

6.8.3、在172.17.48.65上设置

etcd03 (/etc/systemd/system/etcd.service) — 在 etcd03 上写入(把 name、IP、证书换成 etcd03)

[Unit]
Description=etcd
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name etcd03 \
--data-dir /var/lib/etcd \
--listen-client-urls https://172.17.48.65:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://172.17.48.65:2379 \
--listen-peer-urls https://172.17.48.65:2380 \
--initial-advertise-peer-urls https://172.17.48.65:2380 \
--initial-cluster "etcd01=https://172.17.48.187:2380,etcd02=https://172.17.48.175:2380,etcd03=https://172.17.48.65:2380" \
--initial-cluster-state new \
--initial-cluster-token etcd-cluster-1 \
--cert-file=/etc/etcd/ssl/etcd03.pem \
--key-file=/etc/etcd/ssl/etcd03-key.pem \
--trusted-ca-file=/etc/etcd/ssl/ca.pem \
--client-cert-auth=true \
--peer-cert-file=/etc/etcd/ssl/etcd03.pem \
--peer-key-file=/etc/etcd/ssl/etcd03-key.pem \
--peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \
--peer-client-cert-auth=true
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

七、在每台节点启动 etcd(在各自节点执行)

systemctl daemon-reload
systemctl enable etcd
systemctl start etcd
systemctl status etcd -l

八、查看集群状态

8.1、Leader、版本、DB大小

[root@etcd01 ssl]# ETCDCTL_API=3 etcdctl --endpoints=https://172.17.48.187:2379,https://172.17.48.175:2379,https://172.17.48.65:2379 \
--cacert=/etc/etcd/ssl/ca.pem \
--cert=/etc/etcd/ssl/etcd01.pem \
--key=/etc/etcd/ssl/etcd01-key.pem \
endpoint status --write-out=table

在这里插入图片描述

九、数据写入测试

9.1、数据写入(hello etcd),在172.17.48.187节点执行

ETCDCTL_API=3 etcdctl --endpoints=https://172.17.48.72:2379 \
--cacert=/etc/etcd/ssl/ca.pem \
--cert=/etc/etcd/ssl/etcd01.pem \
--key=/etc/etcd/ssl/etcd01-key.pem \
put mykey "hello etcd"

在这里插入图片描述

9.2、数据输出(hello etcd),172.17.48.175节点执行

ETCDCTL_API=3 etcdctl --endpoints=https://172.17.48.175:2379 \
--cacert=/etc/etcd/ssl/ca.pem \
--cert=/etc/etcd/ssl/etcd02.pem \
--key=/etc/etcd/ssl/etcd02-key.pem \
get mykey

在这里插入图片描述

十、模拟主节点宕机查看etcd会不会重新选举主节点(172.17.48.187上操作)

[root@etcd01 ssl]# systemctl stop etcd
[root@etcd01 ssl]# ETCDCTL_API=3 etcdctl --endpoints=https://172.17.48.187:2379,https://172.17.48.175:2379,https://172.17.48.65:2379    --cacert=/etc/etcd/ssl/ca.pem    --cert=/etc/etcd/ssl/etcd01.pem    --key=/etc/etcd/ssl/etcd01-key.pem    endpoint status --write-out=table

以下可以看出主节点重新进行了选举了
在这里插入图片描述

十一、apiserver-etcd-client-openssl证书

10.1、在k8s的master节点创建

mkdir -p /etc/kubernetes/pki/etcd

10.2、以下在172.17.48.187节点上执行

cd /etc/etcd/ssl
⭐ 第1步:创建 CSR 文件
创建:apiserver-etcd-client-openssl.cnf
cat > apiserver-etcd-client-openssl.cnf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
prompt = no
[req_distinguished_name]
CN = apiserver
O = system:masters
[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
EOF
作用:
1、定义了证书请求(CSR)的基本信息。
2[req_distinguished_name] 指定证书的身份:
CN = apiserver → 公共名称,表示这个证书属于 kube-apiserver
O = system:masters → 组织,标识这是 Kubernetes 管理员组
3[v3_req] 指定证书用途:
keyUsage → 数字签名和密钥加密
extendedKeyUsage = clientAuth → 这个证书是 客户端证书,用于向 etcd 进行身份验证
总结:这步是“写一张说明书”,告诉 OpenSSL 后续生成的证书是谁用的和干什么用的。
⭐ 第2步:生成私钥
openssl genrsa -out apiserver-etcd-client-key.pem 2048
作用:
生成 RSA 私钥,长度 2048 位
私钥是安全的核心,后续生成证书和加密通信都要用它
文件 apiserver-etcd-client-key.pem 必须保密
总结:这是生成证书的“钥匙”,所有加密操作都要用它。
⭐ 第3步:生成 CSR
openssl req -new -key apiserver-etcd-client-key.pem \
-out apiserver-etcd-client.csr \
-config apiserver-etcd-client-openssl.cnf
作用:
使用第 2 步生成的私钥和第 1 步配置文件,生成 CSR 文件
CSR 中包含:
公钥
用途信息(clientAuth)
身份信息(CN/O)
CSR 本身不是证书,只是申请证书的请求
总结:这步是“提交申请表”,告诉 CA 我要一张证书,身份和用途是什么。
⭐ 第4步:使用你的 CA 签发证书
注意:下面的3650是十年的证书时间如果是一百年换成36500即可
openssl x509 -req -in apiserver-etcd-client.csr \
-CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out apiserver-etcd-client.pem \
-extensions v3_req -extfile apiserver-etcd-client-openssl.cnf \
-days 3650
作用:
1、用你的 CA 证书 (ca.pem) 和 CA 私钥 (ca-key.pem) 签发 CSR
2、生成 apiserver-etcd-client.pem,就是 kube-apiserver 用来访问 etcd 的客户端证书
3、-days 3650 → 证书有效期 10 年(如果你想 100 年就写 365004、-extensions v3_req -extfile ... → 用 CSR 配置里指定的扩展信息(clientAuth)
总结:这步是“盖章”,CA 认可你的申请,生成正式证书。
apiserver-etcd-client.pem + apiserver-etcd-client-key.pem 就可以让 kube-apiserver 安全地访问 etcd。
⭐ 第5步:etcd01 复制到master上
scp /etc/etcd/ssl/ca.pem root@172.17.48.119:/etc/kubernetes/pki/etcd/
scp /etc/etcd/ssl/apiserver-etcd-client.pem root@172.17.48.119:/etc/kubernetes/pki/etcd/
scp /etc/etcd/ssl/apiserver-etcd-client-key.pem root@172.17.48.119:/etc/kubernetes/pki/etcd/
作用:
1、把你在 etcd 集群上生成的证书复制到 Kubernetes master 节点
2、master 节点的 kube-apiserver 需要访问外部 etcd 集群
3、必须把以下文件放在 master 上指定目录:
ca.pem → 用来验证 etcd 的身份
apiserver-etcd-client.pem → kube-apiserver 的客户端证书
apiserver-etcd-client-key.pem → 私钥,和客户端证书配对使用
总结:把 “钥匙和认证文件” 从 etcd 节点发到 master,让 kube-apiserver 可以安全访问 etcd。
⭐ 第6步:到k8s的master上执行
chmod 600 /etc/kubernetes/pki/etcd/apiserver-etcd-client*.pem
chmod 644 /etc/kubernetes/pki/etcd/ca.pem
作用:
1、chmod 600 → 私钥文件只允许 root 用户读写,防止被其他用户偷用
适用于:apiserver-etcd-client-key.pem 和客户端证书(可选也限制证书)
2、chmod 644 → CA 证书可以被系统其他进程读取,但不能修改
适用于:ca.pem
总结:保证 安全性,防止 kube-apiserver 私钥被泄露,同时 CA 证书可用。

十二、安装k8s

注意:安装步骤看下面连接,只是在k8s初始化的时候init命令换成文件

12.1、单节点master安装

单节点安装k8s
单节点master初始化文件–kubeadm-init.yaml

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.27.3
imageRepository: registry.aliyuncs.com/google_containers
apiServer:
extraArgs:
advertise-address: 172.17.48.119
etcd:
external:
endpoints:
- https://172.17.48.187:2379
- https://172.17.48.175:2379
- https://172.17.48.65:2379
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client.pem
keyFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client-key.pem
certificatesDir: /etc/kubernetes/pki
networking: {}

12.2、多master节点安装

多节点master安装
多节点master初始化文件–kubeadm-init.yaml

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.27.3
imageRepository: registry.aliyuncs.com/google_containers
# 自动开启“可扩展多 master 模式”,下面负载均衡器 VIP
controlPlaneEndpoint: "172.17.48.119:6443"
# external etcd 配置
etcd:
external:
endpoints:
- https://172.17.48.187:2379
- https://172.17.48.175:2379
- https://172.17.48.65:2379
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client.pem
keyFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client-key.pem

12.3、初始化k8s

kubeadm init --config kubeadm-init.yaml --ignore-preflight-errors=all

12.4、后面接着按照k8s文档安装

-------------------略-------------------

十三、扩展知识

apiserver-etcd-client.pem 的确是 100 年证书(-days 36500),但是要注意关键区别:
下面kubeadm certs check-expiration命令展示的是控制面证书
kubeadm certs check-expiration 只显示 kubeadm 管理的 K8s 控制面证书
手动生成的 etcd 客户端证书不会被 kubeadm 管理,也不会显示
手动生成的 100 年证书是 APIServer → etcd 用的,不属于 kubeadm 管理
注意:核心:kubeadm 管理的证书和你手动生成的证书是两套完全独立的体系

[root@master ~]#  kubeadm certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Dec 10, 2026 05:29 UTC   364d            ca                      no
apiserver                  Dec 10, 2026 05:29 UTC   364d            ca                      no
apiserver-kubelet-client   Dec 10, 2026 05:29 UTC   364d            ca                      no
controller-manager.conf    Dec 10, 2026 05:29 UTC   364d            ca                      no
front-proxy-client         Dec 10, 2026 05:29 UTC   364d            front-proxy-ca          no
scheduler.conf             Dec 10, 2026 05:29 UTC   364d            ca                      no
CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Dec 08, 2035 05:29 UTC   9y              no
front-proxy-ca          Dec 08, 2035 05:29 UTC   9y              no

十四、总结

Kubernetes 依赖 etcd 存储所有集群状态,etcd 是整个控制平面的核心。
etcd 集群必须保持多数节点可用,所有访问必须通过 TLS 证书。
kube-apiserver 是唯一直接访问 etcd 的组件,其他所有 Kubernetes 组件都通过 API Server 间接访问 etcd。
在生产环境中,推荐使用 3 节点或 5 节点的 etcd 集群,并定期备份快照、监控延迟、维护证书有效期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1223289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人生意义 = 当下体验?

将“人生意义”与“当下体验”用等号相连&#xff0c;既是古老的东方智慧&#xff0c;也是现代心理学和神经科学关注的核心。 “当下体验”是构成人生意义最核心、最不可替代的“材料”&#xff0c;但人生意义的完整构建&#xff0c;还需要一个能将当下体验进行“编织、解读与超…

2026年比较好的无锡H5响应式网站制作/无锡网站设计权威推荐榜

行业背景与市场趋势随着移动互联网的快速发展,H5响应式网站已成为企业数字化转型的标配。2026年,无锡作为长三角地区重要的经济中心,企业对高质量网站建设的需求持续增长。数据显示,无锡地区超过78%的企业已开始采…

剑指offer-68、调整数组顺序使奇数位于偶数前⾯(⼆)

题⽬描述 输⼊⼀个⻓度为 n 整数数组,数组⾥⾯可能含有相同的元素,实现⼀个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前⾯部分,所有的偶数位于数组的后⾯部分,对奇数和奇数,偶数和偶数之间的相对位…

2026 出国英语封闭雅思零基础培训班学校口碑榜单:深度测评高性价比提分机构推荐

在全球化浪潮的推动下,留学已成为许多学子的重要人生规划,而雅思考试作为出国英语能力认证的核心考核,正成为横亘在无数零基础考生面前的一座大山。不少考生在备考过程中深陷困境:机械背记的海量词汇,在实际考试场…

2026 出国雅思学习教育机构口碑推荐排行榜:权威雅思培训辅导机构 TOP 榜单

2026 年,随着全球教育资源竞争的加剧,雅思考试已成为无数留学追梦人、职场晋升者面前的关键门槛,竞争态势愈发白热化。在这场语言能力的角逐中,考生们在雅思培训选课的道路上举步维艰。基础薄弱的考生,面对市面上…

2026年行业内知名的企业独栋买卖推荐排行,园区/企业独栋/办公场地,企业独栋买卖推荐排行

随着城市经济快速发展,企业独栋作为兼具独立性与品牌展示功能的办公载体,正成为企业总部选址的热门选择。然而,市场上企业独栋项目质量参差不齐,从地理位置、配套设施到服务体系均存在显著差异。如何在众多选项中筛…

量化交易(二)系统环境的配置

computer science 之所以赚钱,是因为它成了“模型资本的放大器”

从品牌到价格:微波反应器全面选购攻略,供应商与生产商推荐

在化学合成、材料科学、生物医药等领域,微波反应器凭借其高效加热、精准控温、显著缩短反应时间等核心优势,正从实验室的"效率神器"跃升为产业化的关键装备。面对市场上从数万元到数百万元的设备矩阵,如何…

FHQ-Treap 树 ← 洛谷P3369、AcWing253

【题目来源】https://www.luogu.com.cn/problem/P3369https://www.acwing.com/problem/content/255/【题目描述】您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入数值 x。2. 删…

2026年知名的合肥考驾照理论培训/合肥考驾照培训综合口碑榜

行业背景与市场趋势随着合肥城市化进程加快和居民生活水平提升,机动车驾驶技能已成为现代生活的必备能力之一。2026年,合肥市驾培市场规模持续扩大,学员对驾校的选择更加注重教学质量、服务体验和口碑信誉。理论培训…

2026年比较好的合肥驾校场地/合肥驾校学车服务优选榜

行业背景与市场趋势随着合肥市机动车保有量持续增长和居民生活水平提高,学习驾驶技能已成为现代生活的必备需求。2025年数据显示,合肥市每年新增驾驶员约15万人,驾培市场规模突破10亿元。在此背景下,合肥驾校行业正…

自动化测试代码覆盖率提升实战指南

一、精准评估&#xff1a;覆盖率现状诊断&#xff08;基础奠基&#xff09; 覆盖率提升始于精准诊断。当覆盖率停滞在60%-70%区间时&#xff0c;需通过工具链锁定薄弱环节&#xff1a; 工具应用&#xff1a;集成JaCoCo、Coverage.py或SonarQube生成覆盖热力图&#xff0c;识别…

构建高效测试基石:模块化测试框架设计原则与实践探析

在快速迭代的软件开发周期中&#xff0c;自动化测试已成为保障软件质量的关键环节。一个设计精良的测试框架能显著提升测试效率、降低维护成本并增强测试的可靠性。模块化设计理念作为现代软件工程的基石&#xff0c;在测试框架构建中同样发挥着核心作用。本文将系统阐述模块化…

测试数据自动生成与注入技术:赋能软件测试的高效实践

测试数据自动生成与注入技术是现代软件测试的核心环节&#xff0c;旨在通过自动化手段创建多样化数据并动态注入测试用例&#xff0c;以提升测试覆盖率、效率和可靠性。对于测试从业者&#xff0c;掌握这些技术能显著减少人工维护成本&#xff0c;加速回归测试周期&#xff0c;…

并行测试执行资源调度策略研究与应用

在软件测试领域&#xff0c;并行测试通过同时执行多个测试任务显著提升效率&#xff0c;但资源调度策略的合理性直接影响系统吞吐量和响应时间。资源调度指在多任务环境中动态分配计算资源&#xff08;如CPU、内存、带宽&#xff09;&#xff0c;以优化负载均衡和任务完成率。对…

AI元素定位技术实战:Testim与Virtuoso在测试中的应用指南

AI元素定位技术的兴起与挑战 在软件自动化测试中&#xff0c;元素定位是UI测试的核心环节&#xff0c;但传统方法如XPath或CSS选择器常因UI动态变化导致脚本失效&#xff0c;维护成本高昂。AI技术的引入&#xff0c;通过智能识别元素属性和上下文&#xff0c;显著提升了定位的…

无头浏览器资源占用优化指南

资源优化的必要性 在软件测试领域&#xff0c;无头浏览器&#xff08;如Headless Chrome、Puppeteer或Playwright&#xff09;已成为自动化测试的核心工具&#xff0c;但其资源占用问题常导致测试延迟和成本飙升。数据显示&#xff0c;未优化的无头浏览器实例可占用高达420MB内…

2026年口碑好的兰精莫代尔砂洗空气层/兰精人棉砂洗空气层高性价比推荐

在2026年纺织面料市场中,兰精莫代尔砂洗空气层和兰精人棉砂洗空气层凭借其优异的透气性、柔软度和环保特性,成为中高端服装品牌的面料之一。本文基于供应链稳定性、生产工艺成熟度、价格竞争力三个维度,筛选出五家值…

网格交易者应对上涨的对策思考

近期大盘到达历史高点,白酒等传统价投标的却达到谷底,网上可谓热闹非凡。平时很多高谈价头的人,有的底部割肉,有点天天絮絮叨叨,当然也有淡定的,比如HIS等。对我而言,基本上毫无波澜,这个阶段对我来说,能做的…

2026年口碑好的防水染色纱线/汽车内饰染色纱线厂家实力与用户口碑参考

在汽车内饰和户外用品领域,防水染色纱线的品质直接影响产品的耐用性和美观度。选择优质供应商需综合考虑企业历史、技术实力、市场口碑及服务能力。本文基于行业调研、用户反馈及供应链验证,筛选出5家具有差异化优势…