创建 kubeconfig 文件

注意:请先参考 安装kubectl命令行工具,先在 master 节点上安装 kubectl 然后再进行下面的操作。

kubeletkube-proxy 等 Node 机器上的进程与 Master 机器的 kube-apiserver 进程通信时需要认证和授权;

kubernetes 1.4 开始支持由 kube-apiserver为客户端生成 TLS 证书的 TLS Bootstrapping功能,这样就不需要为每个客户端生成证书了;该功能当前仅支持为 kubelet生成证书;

以下操作只需要在master节点上执行,生成的*.kubeconfig文件可以直接拷贝到node节点的/etc/kubernetes目录下。

创建 TLS Bootstrapping Token

Token auth file

Token可以是任意的包含128 bit的字符串,可以使用安全的随机数发生器生成。

export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
cat > token.csv <<EOF
> ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
> EOF

注意:在进行后续操作前请检查 token.csv文件,确认其中的 ${BOOTSTRAP_TOKEN}环境变量已经被真实的值替换。

BOOTSTRAP_TOKEN将被写入到 kube-apiserver 使用的 token.csv 文件和 kubelet 使用的 bootstrap.kubeconfig

文件,如果后续重新生成了 BOOTSTRAP_TOKEN,则需要:

  1. 更新 token.csv 文件,分发到所有机器 (master 和 node)的 /etc/kubernetes/ 目录下,分发到node节点上非必需;

  2. 重新生成 bootstrap.kubeconfig 文件,分发到所有 node 机器的 /etc/kubernetes/ 目录下;

  3. 重启 kube-apiserver 和 kubelet 进程;

  4. 重新 approve kubelet 的 csr 请求;
cp token.csv /etc/kubernetes/

创建 kubelet bootstrapping kubeconfig 文件

执行下面的命令时需要先安装kubectl命令,请参考安装kubectl命令行工具

cd /etc/kubernetes
export KUBE_APISERVER="https://192.168.76.250:6443"
#设置集群参数
kubectl config set-cluster kubernetes \
   --certificate-authority=/etc/kubernetes/ssl/ca.pem \
   --embed-certs=true \
   --server=${KUBE_APISERVER} \
   --kubeconfig=bootstrap.kubeconfig
Cluster "kubernetes" set.
#设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
>   --token=${BOOTSTRAP_TOKEN} \
>   --kubeconfig=bootstrap.kubeconfig
User "kubelet-bootstrap" set.
#设置上下文参数
 kubectl config set-context default \
>   --cluster=kubernetes \
>   --user=kubelet-bootstrap \
>   --kubeconfig=bootstrap.kubeconfig
Context "default" created.
#设置默认上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
Switched to context "default".
  • --embed-certstrue时表示将 certificate-authority证书写入到生成的 bootstrap.kubeconfig文件中;
  • 设置客户端认证参数时没有指定秘钥和证书,后续由 kube-apiserver自动生成;

创建 kube-proxy kubeconfig 文件

export KUBE_APISERVER="https://192.168.76.250:6443"
#设置集群参数
kubectl config set-cluster kubernetes \
   --certificate-authority=/etc/kubernetes/ssl/ca.pem \
   --embed-certs=true \
   --server=${KUBE_APISERVER} \
   --kubeconfig=kube-proxy.kubeconfig
Cluster "kubernetes" set.
#设置客户端认证参数
kubectl config set-credentials kube-proxy \
   --client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \
   --client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \
   --embed-certs=true \
   --kubeconfig=kube-proxy.kubeconfig
User "kube-proxy" set.
#设置上下文参数
 kubectl config set-context default \
   --cluster=kubernetes \
   --user=kube-proxy \
   --kubeconfig=kube-proxy.kubeconfig
Context "default" created.
#设置默认上下文
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
Switched to context "default".
  • 设置集群参数和客户端认证参数时 --embed-certs都为 true,这会将 certificate-authorityclient-certificateclient-key指向的证书文件内容写入到生成的 kube-proxy.kubeconfig文件中;
  • kube-proxy.pem证书中 CN 为 system:kube-proxykube-apiserver预定义的 RoleBinding cluster-adminUsersystem:kube-proxy与 Role system:node-proxier绑定,该 Role 授予了调用 kube-apiserverProxy 相关 API 的权限;

分发 kubeconfig 文件

将两个 kubeconfig 文件分发到所有 Node 机器的 /etc/kubernetes/目录

results matching ""

    No results matching ""