跳至内容

实验 5:为认证生成 Kubernetes 配置文件

信息

这是由 Kelsey Hightower(GitHub:kelseyhightower)最初编写的 “Kubernetes the hard way” 的一个分支。与原始版本不同的是,原始版本基于 ARM64 架构的类 Debian 发行版,而此分支则针对 Rocky Linux 等企业级 Linux 发行版,这些发行版运行在 x86_64 架构上。

在本实验中,您将生成 Kubernetes 客户端配置文件,通常称为 kubeconfigs。这些文件配置 Kubernetes 客户端以连接到 Kubernetes API 服务器并进行身份验证。

客户端认证配置

在本节中,您将为 kubeletadmin 用户生成 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 配置文件

kubeletkube-proxy 的 kubeconfig 文件复制到 node-0node-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-managerkube-scheduler 的 kubeconfig 文件复制到控制器实例

scp admin.kubeconfig \
  kube-controller-manager.kubeconfig \
  kube-scheduler.kubeconfig \
  root@server:~/

下一步:生成数据加密配置和密钥

作者:Wale Soyinka

贡献者:Steven Spencer, Ganna Zhyrnova