实验 4:配置 CA 并生成 TLS 证书¶
信息
这是由 Kelsey Hightower(GitHub:kelseyhightower)最初编写的 “Kubernetes the hard way” 的一个分支。与原始版本不同的是,原始版本基于 ARM64 架构的类 Debian 发行版,而此分支则针对 Rocky Linux 等企业级 Linux 发行版,这些发行版运行在 x86_64 架构上。
在本实验中,您将使用 OpenSSL 配置一个公钥基础设施 (PKI),以引导证书颁发机构,并为以下组件生成 TLS 证书:
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kubelet
- kube-proxy
在本节中,请从 jumpbox 运行命令。
证书颁发机构¶
在本节中,您将配置一个证书颁发机构,您将使用它来为其他 Kubernetes 组件生成额外的 TLS 证书。使用 openssl 设置 CA 和生成证书可能非常耗时,尤其是在第一次操作时。为了简化本实验,必须包含一个 openssl 配置文件 ca.conf,该文件定义了为每个 Kubernetes 组件生成证书所需的所有详细信息。
花点时间查看 ca.conf 配置文件
cat ca.conf
要完成本教程,您不需要理解 ca.conf 文件中的所有内容。不过,您应该将其视为学习 openssl 以及高级证书管理配置的起点。
每个证书颁发机构都始于一个私钥和一个根证书。在本节中,您将创建一个自签名证书颁发机构。虽然这足以满足本教程的需求,但在实际生产环境中不应考虑这一点。
生成 CA 配置文件、证书和私钥
openssl genrsa -out ca.key 4096
openssl req -x509 -new -sha512 -noenc \
-key ca.key -days 3653 \
-config ca.conf \
-out ca.crt
结果
ca.crt ca.key
技巧
要查看生成证书文件 (ca.crt) 中编码的详细信息,可以使用此 OpenSSL 命令 openssl x509 -in ca.crt -text -noout | less。
创建客户端和服务器证书¶
在本节中,您将为每个 Kubernetes 组件生成客户端和服务器证书,以及为 Kubernetes admin 用户生成客户端证书。
生成证书和私钥
certs=(
"admin" "node-0" "node-1"
"kube-proxy" "kube-scheduler"
"kube-controller-manager"
"kube-api-server"
"service-accounts"
)
for i in ${certs[*]}; do
openssl genrsa -out "${i}.key" 4096
openssl req -new -key "${i}.key" -sha256 \
-config "ca.conf" -section ${i} \
-out "${i}.csr"
openssl x509 -req -days 3653 -in "${i}.csr" \
-copy_extensions copyall \
-sha256 -CA "ca.crt" \
-CAkey "ca.key" \
-CAcreateserial \
-out "${i}.crt"
done
上述命令将为每个 Kubernetes 组件生成一个私钥、证书签名请求和已签名的 SSL 证书。您可以使用以下命令列出生成的文件:
ls -1 *.crt *.key *.csr
分发客户端和服务器证书¶
在本节中,您将把各种证书复制到每台机器上,放置在每个 Kubernetes 组件会查找其证书对的路径下。在实际环境中,您会将这些证书视为一组敏感的秘密,因为 Kubernetes 使用这些组件来相互进行身份验证。
将适当的证书和私钥复制到 node-0 和 node-1 机器
for host in node-0 node-1; do
ssh root@$host mkdir /var/lib/kubelet/
scp ca.crt root@$host:/var/lib/kubelet/
scp $host.crt \
root@$host:/var/lib/kubelet/kubelet.crt
scp $host.key \
root@$host:/var/lib/kubelet/kubelet.key
done
将适当的证书和私钥复制到 server 机器
scp \
ca.key ca.crt \
kube-api-server.key kube-api-server.crt \
service-accounts.key service-accounts.crt \
root@server:~/
在下一个实验中,您将使用 kube-proxy、kube-controller-manager、kube-scheduler 和 kubelet 客户端证书来生成客户端身份验证配置文件。
作者:Wale Soyinka
贡献者:Steven Spencer, Ganna Zhyrnova