kubernetes学习:5.创建 kubeconfig 文件

创建 kubeconfig 文件


kubelet、kube-proxy 等 Node 机器上的进程与 Master 机器的 kube-apiserver 进程通信时需要认证和授权,所以需要生成相关的配置信息。在master节点上创建相关kubeconfig文件,然后将文件拷贝到node节点上。

kubernetes 自1.4引入了一个用于从集群级证书颁发机构(CA)请求证书的API。这个api的最初意图是启用为kubelets提供tls客户端证书。


创建 TLS Bootstrapping Token

虽然任何身份验证策略都可以用于kubelet的初始引导凭证,但推荐使用以下两种身份验证器以简化配置。我们这里只采用Token authentication file这种方式(版本稳定)。

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

[root@wecloud-test-k8s-1 ~]# export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
[root@wecloud-test-k8s-1 ~]# echo ${BOOTSTRAP_TOKEN}
1b533e12216629e21babb6085d2d4a27

创建token文件:

[root@wecloud-test-k8s-1 ~]# cat > token.csv <
> ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
> EOF
[root@wecloud-test-k8s-1 ~]# cat token.csv 
1b533e12216629e21babb6085d2d4a27,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

BOOTSTRAP_TOKEN的内容被写入了token.csv和kubelets使用的bootstrap.config文件中,如果后续对BOOTSTRAP_TOKEN进行更替需要进行相关的“同步”操作:
- 更新 token.csv 文件,分发到所有机器 (master 和 node)的 /etc/kubernetes/ 目录下,分发到node节点上非必需;
- 重新生成 bootstrap.kubeconfig 文件,分发到所有 node 机器的 /etc/kubernetes/ 目录下;
- 重启 kube-apiserver 和 kubelet 进程;
- 重新 approve kubelet 的 csr 请求;

同步token.csv内容:

[root@wecloud-test-k8s-1 ~]# cp token.csv  /etc/kubernetes/
[root@wecloud-test-k8s-1 ~]# scp token.csv 192.168.99.189:/etc/kubernetes/
[root@wecloud-test-k8s-1 ~]# scp token.csv 192.168.99.185:/etc/kubernetes/
[root@wecloud-test-k8s-1 ~]# scp token.csv 192.168.99.196:/etc/kubernetes/

创建 kubelet bootstrapping kubeconfig 文件

# 指定apiserver地址
[root@wecloud-test-k8s-1 kubernetes]# export KUBE_APISERVER="https://192.168.99.183:6443"
# 设置集群参数
[root@wecloud-test-k8s-1 kubernetes]# kubectl config set-cluster kubernetes \
> --certificate-authority=/etc/kubernetes/ssl/ca.pem \
> --embed-certs=true \
> --server=${KUBE_APISERVER} \
> --kubeconfig=bootstrap.kubeconfig
Cluster "kubernetes" set.
# 设置客户端认证参数
[root@wecloud-test-k8s-1 kubernetes]# kubectl config set-credentials kubelet-bootstrap \
> --token=${BOOTSTRAP_TOKEN} \
> --kubeconfig=bootstrap.kubeconfig
User "kubelet-bootstrap" set.
# 设置上下文参数
[root@wecloud-test-k8s-1 kubernetes]# kubectl config set-context default \
> --cluster=kubernetes \
> --user=kubelet-bootstrap \
> --kubeconfig=bootstrap.kubeconfig
Context "default" created.
# 设置默认上下文
[root@wecloud-test-k8s-1 kubernetes]# kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
Switched to context "default".

–embed-certs 为 true 时表示将 certificate-authority 证书写入到生成的 bootstrap.kubeconfig 文件中;


创建 kube-proxy kubeconfig 文件

# 指定apiserver地址
[root@wecloud-test-k8s-1 kubernetes]# export KUBE_APISERVER="https://192.168.99.183:6443"
# 设置集群参数
[root@wecloud-test-k8s-1 kubernetes]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-proxy.kubeconfig
# 设置客户端认证参数
[root@wecloud-test-k8s-1 kubernetes]# kubectl config set-credentials kube-proxy --client-certificate=/etc/kubernetes/ssl/kube-proxy.pem --client-key=/etc/kubernetes/ssl/kube-proxy.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig
# 设置上下文参数
[root@wecloud-test-k8s-1 kubernetes]# kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig
# 设置默认上下文
[root@wecloud-test-k8s-1 kubernetes]# kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig

设置集群参数和客户端认证参数时 –embed-certs 都为 true,这会将 certificate-authority、client-certificate 和 client-key 指向的证书文件内容写入到生成的 kube-proxy.kubeconfig 文件中;


分发 kubeconfig 文件

将bootstrap.kubeconfig和kube-proxy.kubeconfig文件分发到各node节点上:

[root@wecloud-test-k8s-1 kubernetes]# scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.99.189:/etc/kubernetes/
[root@wecloud-test-k8s-1 kubernetes]# scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.99.185:/etc/kubernetes/
[root@wecloud-test-k8s-1 kubernetes]# scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.99.196:/etc/kubernetes/

你可能感兴趣的:(docker,kubernetes总结)