【kubernetes-the-hard-way】04-certificate-authority 配置 CA 并生成 TLS 证书
配置 CA 并生成 TLS 证书
在本实验中,您将使用 openssl 来配置 PKI 基础设施 来引导证书颁发机构,并为以下组件生成 TLS 证书:kube-apiserver、kube-controller -manager、kube-scheduler、kubelet 和 kube-proxy。 本节中的命令应从jumpbox
运行。
证书颁发机构 Certificate Authority
在本部分中,您将配置一个证书颁发机构,可用于为其他 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
}
您可以使用以下命令列出生成的文件:
ls -1 *.crt *.key
结果:
ca.crt ca.key
生成结果中出现如下异常:
req: Unrecognized flag noenc
req: Use -help for summary.
请参考“设置 Jumpbox”安装openssl 3.0
创建客户端和服务器证书
在本部分中,您将为每个 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
客户端证书将用于在下一个实验中生成客户端身份验证配置文件。
下一步: Generating Kubernetes Configuration Files for Authentication