二进制部署k8s集群v1.23.9版本-6-安装kubectl组件

6.1、集群规划

主机名 角色 IP
hfqg1-201 kubectl 192.168.1.201
hfqg1-202 kubectl 192.168.1.202
hfqg1-203 kubectl 192.168.1.203

6.2、签发kubectl证书

在192.168.1.200服务器上操作
生成kubectl证书请求csr文件

cd /opt/certs
[root@hfqg1-200 certs]# cat kubectl-csr.json
{
"CN": "clusteradmin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "beijing",
"L": "beijing",
"O": "system:masters",
"OU": "system"
}
]
}

说明:

  • CN:kubectl证书中的CN值没有意义,随便取值
  • O:因为希望使用kubectl时有完整的集群操作权限,所以取值为“system:masters”,K8S默认会提取O字段的值作为组,这实际是指K8S里“RoleBinding/ClusterRoleBinding”资源中"subjects.kind"的值为“Group”
  • 后续 kube-apiserver 使用 RBAC 对客户端(如 kubelet、kube-proxy、Pod)请求进行授权;
  • kube-apiserver 预定义了一些 RBAC 使用的 RoleBindings,如 cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 的所有 API的权限;
  • O指定该证书的 Group 为 system:masters,kubelet 使用该证书访问 kube-apiserver 时 ,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 system:masters,所以被授予访问所有 API 的权限;
  • 这个证书,是将来生成管理员用的kube config 配置文件用的,现在我们一般建议使用RBAC 来对kubernetes 进行角色权限控制, kubernetes 将证书中的CN 字段 作为User, O 字段作为 Group;
    "O": "system:masters", 必须是system:masters,否则后面kubectl create clusterrolebinding报错。

6.3、生成证书

cfssl gencert
-ca=ca.pem
-ca-key=ca-key.pem
-config=ca-config.json
-profile=kubernetes
kubectl-csr.json | cfssl-json -bare kubectl

ll kubectl*

6.4、把证书拷贝到201、202和203主机上

cd /opt/certs
scp kubectl.pem hfqg1-201:/opt/kubernetes/server/bin/certs/
scp kubectl
.pem hfqg1-202:/opt/kubernetes/server/bin/certs/
scp kubectl*.pem hfqg1-203:/opt/kubernetes/server/bin/certs/

6.5、生成kubeconfig配置文件

生成kubectl组件的kubectl.kubeconfig配置文件,该文件包含访问kube-apiseerver的所有信息,如kube-apiserver的地址,CA证书和自身使用的证书。
有了这个文件,便可以在任何机器上以超级管理员身份对K8S集群做任何操作,请务必保证此文件的安全性。
kubectl命令默认使用的配置文件为:~/.kube.config
以下在201主机上操作,完成后把生成的文件拷贝到其余Master节点,本例是201主机。
生成创建配置文件的脚本

mkdir -pv /opt/kubernetes/server/bin/k8s-shell
cd /opt/kubernetes/server/bin/k8s-shell
[root@hfqg1-201 k8s-shell]# cat kubectl-config.sh
#!/bin/bash
KUBE_CONFIG="/root/.kube/config"
KUBE_APISERVER="https://192.168.1.196:8443"
kubectl config set-cluster kubernetes
--certificate-authority=/opt/kubernetes/server/bin/certs/ca.pem
--embed-certs=true
--server=${KUBE_APISERVER}
--kubeconfig=${KUBE_CONFIG}
kubectl config set-credentials clusteradmin
--client-certificate=/opt/kubernetes/server/bin/certs/kubectl.pem
--client-key=/opt/kubernetes/server/bin/certs/kubectl-key.pem
--embed-certs=true
--kubeconfig=${KUBE_CONFIG}
kubectl config set-context default
--cluster=kubernetes
--user=clusteradmin
--kubeconfig=${KUBE_CONFIG}
kubectl config use-context default --kubeconfig=$

说明:

  • 集群名称:描述集群信息的标记,没有实际意义。
  • certificate-authority:K8S集群的根CA证书
  • server:指向kube-apiserrver负载均衡器VIP的地址
  • kubeconfig:生成的kubeconfig文件
  • 用户名称:clusteradmin为定义一个用户,在kubeconfig配置文件中,这个用户用于关联一组证书,这个证书对K8S集群来说无实际意义,真正重要的是证书中的O字段与CN字段的定义。
  • client-certificate:客户端证书
  • client-key:客户端私钥
  • 上下文:default用于将kubeconfig配置文件“clusteradmin”和“kubernetes”作关联。
  • cluster:set-cluster命令配置的集群名称。
  • cluster:set-credentials命令配置的用户名称。

6.6、授权并执行脚本

mkdir ~/.kube
chmod +x kubectl-config.sh
./kubectl-config.sh
kubectl cluster-info
kubectl get componentstatuses
kubectl get all -A

6.7、将201上的kubeconfig文件拷贝到202和203节点

202和203操作
mkdir ~/.kube
scp root@hfqg1-202:/root/.kube/config ~/.kube/
scp root@hfqg1-203:/root/.kube/config ~/.kube/

6.8、分别在202和203上查看集群状态

kubectl cluster-info
kubectl get componentstatuses
kubectl get all -A


至此,kubectl安装完成。

posted @ 2022-08-08 13:59  霸都运维  阅读(173)  评论(0编辑  收藏  举报