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