二进制部署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安装完成。
本文来自博客园,作者:霸都运维,转载请注明原文链接:https://www.cnblogs.com/wangjie20200529/p/16561605.html