实验 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