etcd双向TLS需严格区分CA、Server、Peer三类证书用途,分别配置对应启动参数并禁用明文入口。CA证书须支持server/client auth且有效期10年;Server证书需含节点IP/DNS作为SAN,用于2379端口客户端通信;Peer证书同样需SAN并启用server/client auth扩展密钥用途,专用于2380端口集群内通信;必须成对启用--client-cert-auth/--peer-client-cert-auth及对应CA、证书、密钥参数,监听地址仅保留https://,禁用http://和--insecure-listen-client-urls;配合防火墙策略、强加密套件、自动压缩与配额限制,并通过错误CA访问、无证书peer连接及日志关键词验证生效。

直接上核心:etcd 的 peer 和 client 双向 TLS 不是“加个证书就行”,而是要分清三类证书用途、严格匹配启动参数、并关闭所有明文通信入口。否则容易出现连接拒绝、证书验证失败或认证绕过。
明确三类证书的职责和生成要点
etcd 集群中必须区分三种证书,不能混用:
-
CA 证书(ca.crt):是信任根,所有其他证书都由它签名;需在
ca-config.json中明确启用"server auth"和"client auth"用途,且有效期建议设为 10 年("87600h") - Server 证书(server.crt/server.key):供 etcd 实例响应客户端(如 kube-apiserver)HTTPS 请求时使用;必须包含节点 IP 或 DNS 名作为 SAN(Subject Alternative Name),否则 TLS 握手会因主机名不匹配失败
-
Peer 证书(peer.crt/peer.key):专用于集群成员间(2380 端口)通信;同样需带对应节点的 IP 或域名 SAN,且必须启用
"server auth"和"client auth"扩展密钥用法(X509v3 Extended Key Usage)
启动参数必须成对启用双向认证
仅配置证书路径不够,必须显式开启双向校验开关,否则等同于单向 TLS,无法阻止非法客户端接入:
- 客户端通信(2379):启用
--client-cert-auth=true+--trusted-ca-file=/path/to/ca.crt+--cert-file=/path/to/server.crt+--key-file=/path/to/server.key - 节点间通信(2380):启用
--peer-client-cert-auth=true+--peer-trusted-ca-file=/path/to/ca.crt+--peer-cert-file=/path/to/peer.crt+--peer-key-file=/path/to/peer.key - 务必禁用明文监听:
--listen-client-urls和--listen-peer-urls中不能含http://,只保留https://地址;同时移除--insecure-listen-client-urls类参数
加固通信链路与运行时策略
证书和参数只是基础,还需配套限制通信面和增强运行时防护:
- 防火墙只放行必要端口:2379(客户端 HTTPS)、2380(peer HTTPS)、2381(metrics HTTP,建议仅限 127.0.0.1)
- 强制使用强加密套件:在启动命令中加入
--cipher-suites,推荐组合包括TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305等,禁用 CBC、RC4、SHA1 类弱算法 - 启用自动压缩与快照保护:
--auto-compaction-retention=1h防止历史版本堆积,--quota-backend-bytes=8589934592(8GB)防写满,配合--experimental-initial-corrupt-check=true启动时校验数据完整性
验证是否真正生效
别只看 etcd 进程起来就认为成功,要实测双向认证是否拦截非法访问:
- 用错误 CA 访问 client 端:
curl --cacert /tmp/wrong-ca.crt https://node-ip:2379/health应返回 SSL 错误或 401 - 用无证书访问 peer 端:
etcdctl --endpoints=https://node-ip:2380 member list --insecure-skip-tls-verify会失败,因 peer 端默认不接受跳过验证的请求 - 检查日志关键词:
client TLS handshake error或peer TLS handshake error出现即说明认证机制正在拦截异常连接










