高可用Kubernetes集群-4. kubectl客户端工具

时间:2023-03-09 14:38:32
高可用Kubernetes集群-4. kubectl客户端工具

六.部署kubectl客户端工具

1. 下载

[root@kubenode1 ~]# cd /usr/local/src/
[root@kubenode1 src]# wget https://storage.googleapis.com/kubernetes-release/release/v1.9.2/kubernetes-server-linux-amd64.tar.gz
[root@kubenode1 src]# tar -zxvf kubernetes-server-linux-amd64.tar.gz # kubectl等所有可执行文件在解压目录下server/bin目录下,另含kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy与kubelet等
[root@kubenode1 src]# mv /usr/local/src/kubernetes/server/bin/ /usr/local/src/kubernetes/
[root@kubenode1 src]# rm -rf /usr/local/src/kubernetes/server/
[root@kubenode1 src]# mv /usr/local/src/kubernetes/ /usr/local/

2. 创建kubectl TLS证书与私钥

1)创建kubectl证书签名请求

[root@kubenode1 ~]# cd /etc/kubernetes/admin/
[root@kubenode1 admin]# touch admin-csr.json # kube-apiserver 使用 RBAC 对客户端(如 kubelet、kube-proxy等)请求进行授权;
# kube-apiserver 预定义一部分 RBAC,含Role/ RoleBinding,ClusterRole/ ClusterRoleBinding;
# 如 ClusterRoleBinding将 Group system:masters 与 ClusterRole cluster-admin 绑定,而ClusterRole cluster-admin 拥有访问kube-apiserver 的所有权限,因此”CN”:“admin”这个用户同样拥有访问kube-apiserver 的所有权限,可作为集群超级管理员;
# O 指定该证书的 Group 为 system:masters,kubelet 使用该证书访问 kube-apiserver 时,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 system:masters,所以被授予访问所有 API 的权限;
# hosts 属性值为空列表,即没有ip或主机名限制
[root@kubenode1 admin]# vim admin-csr.json
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChengDu",
"L": "ChengDu",
"O": "system:masters",
"OU": "cloudteam"
}
]
}

2)生成kubectl证书与私钥

[root@kubenode1 admin]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
-ca-key=/etc/kubernetes/ssl/ca-key.pem \
-config=/etc/kubernetes/ssl/ca-config.json \
-profile=kubernetes admin-csr.json | cfssljson -bare admin

高可用Kubernetes集群-4. kubectl客户端工具

# 分发admin.pem,admin-key.pem
[root@kubenode1 admin]# scp admin.pem admin-key.pem root@172.30.200.22:/etc/kubernetes/admin/
[root@kubenode1 admin]# scp admin.pem admin-key.pem root@172.30.200.23:/etc/kubernetes/admin/

3. 创建kubectl kubeconfig文件

kubectl客户端工具在TLS通信时,如不配置kubeconfig文件,在访问api-server时需要指定api-server的地址以及客户端的证书等信息,比较繁琐。

# 配置集群参数;
# --server:指定api-server,采用ha之后的vip;
# cluster名自定义,设定之后需保持一致;
# --kubeconfig:指定kubeconfig文件路径与文件名;如果不设置,默认生成在~/.kube/config文件
[root@kubenode1 admin]# kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://172.30.200.10:6443 \
--kubeconfig=admin.conf # 配置客户端认证参数;
# 认证用户为前文签名中的“admin”;
# 指定对应的公钥证书/私钥等
[root@kubenode1 admin]# kubectl config set-credentials admin \
--client-certificate=/etc/kubernetes/admin/admin.pem \
--embed-certs=true \
--client-key=/etc/kubernetes/admin/admin-key.pem \
--kubeconfig=admin.conf # 配置上下文参数
[root@kubenode1 admin]# kubectl config set-context admin@kubernetes \
--cluster=kubernetes \
--user=admin \
--kubeconfig=admin.conf # 配置默认上下文
[root@kubenode1 admin]# kubectl config use-context admin@kubernetes --kubeconfig=admin.conf

高可用Kubernetes集群-4. kubectl客户端工具

# 分发kubeconfig文件到所有运行kubectl的客户端节点;
# kubectl 默认从 ~/.kube/config 配置文件获取访问 kube-apiserver 地址、证书、用户名等信息,分发时,路径/文件名请注意修改
[root@kubenode1 admin]# cp /etc/kubernetes/admin/admin.conf ~/.kube/config