实验 5:为认证生成 Kubernetes 配置文件¶
信息
这是由 Kelsey Hightower(GitHub:kelseyhightower)最初编写的 “Kubernetes the hard way” 的一个分支。与原始版本不同的是,原始版本基于 ARM64 架构的类 Debian 发行版,而此分支则针对 Rocky Linux 等企业级 Linux 发行版,这些发行版运行在 x86_64 架构上。
在本实验中,您将生成 Kubernetes 客户端配置文件,通常称为 kubeconfigs。这些文件配置 Kubernetes 客户端以连接到 Kubernetes API 服务器并进行身份验证。
客户端认证配置¶
在本节中,您将为 kubelet
和 admin
用户生成 kubeconfig 文件。
kubelet Kubernetes 配置文件¶
为 Kubelets 生成 kubeconfig 文件时,您必须将客户端证书与 Kubelet 的节点名称匹配。这将确保 Kubelets 能够获得 Kubernetes 节点授权器 的正确授权。
以下命令必须在用于在 生成 TLS 证书 实验中生成 SSL 证书的同一目录中运行。
为 node-0 和 node-1 工作节点生成 kubeconfig 文件
for host in node-0 node-1; do
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.crt \
--embed-certs=true \
--server=https://server.kubernetes.local:6443 \
--kubeconfig=${host}.kubeconfig
kubectl config set-credentials system:node:${host} \
--client-certificate=${host}.crt \
--client-key=${host}.key \
--embed-certs=true \
--kubeconfig=${host}.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:node:${host} \
--kubeconfig=${host}.kubeconfig
kubectl config use-context default \
--kubeconfig=${host}.kubeconfig
done
结果
node-0.kubeconfig
node-1.kubeconfig
kube-proxy Kubernetes 配置文件¶
为 kube-proxy
服务生成 kubeconfig 文件
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.crt \
--embed-certs=true \
--server=https://server.kubernetes.local:6443 \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials system:kube-proxy \
--client-certificate=kube-proxy.crt \
--client-key=kube-proxy.key \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default \
--kubeconfig=kube-proxy.kubeconfig
结果
kube-proxy.kubeconfig
kube-controller-manager Kubernetes 配置文件¶
为 kube-controller-manager
服务生成 kubeconfig 文件
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.crt \
--embed-certs=true \
--server=https://server.kubernetes.local:6443 \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=kube-controller-manager.crt \
--client-key=kube-controller-manager.key \
--embed-certs=true \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-controller-manager \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config use-context default \
--kubeconfig=kube-controller-manager.kubeconfig
结果
kube-controller-manager.kubeconfig
kube-scheduler Kubernetes 配置文件¶
为 kube-scheduler
服务生成 kubeconfig 文件
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.crt \
--embed-certs=true \
--server=https://server.kubernetes.local:6443 \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-credentials system:kube-scheduler \
--client-certificate=kube-scheduler.crt \
--client-key=kube-scheduler.key \
--embed-certs=true \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config use-context default \
--kubeconfig=kube-scheduler.kubeconfig
结果
kube-scheduler.kubeconfig
管理员 Kubernetes 配置文件¶
为 admin
用户生成 kubeconfig 文件
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.crt \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=admin.kubeconfig
kubectl config set-credentials admin \
--client-certificate=admin.crt \
--client-key=admin.key \
--embed-certs=true \
--kubeconfig=admin.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=admin \
--kubeconfig=admin.kubeconfig
kubectl config use-context default \
--kubeconfig=admin.kubeconfig
结果
admin.kubeconfig
分发 Kubernetes 配置文件¶
将 kubelet
和 kube-proxy
的 kubeconfig 文件复制到 node-0
和 node-1
实例
for host in node-0 node-1; do
ssh root@$host "mkdir /var/lib/{kube-proxy,kubelet}"
scp kube-proxy.kubeconfig \
root@$host:/var/lib/kube-proxy/kubeconfig \
scp ${host}.kubeconfig \
root@$host:/var/lib/kubelet/kubeconfig
done
将 kube-controller-manager
和 kube-scheduler
的 kubeconfig 文件复制到控制器实例
scp admin.kubeconfig \
kube-controller-manager.kubeconfig \
kube-scheduler.kubeconfig \
root@server:~/
下一步:生成数据加密配置和密钥
作者:Wale Soyinka
贡献者:Steven Spencer, Ganna Zhyrnova