#(1)在跳板机上生成客户端证书和私钥文件;

#生成客户端证书签署请求
cd /temp/ssl 
cat > client-csr.json <<EOF
{
		"CN": "client",
		"hosts": [],
		"key": {
				"algo": "rsa",
				"size": 2048
		},
		"names": [
				{
						"C": "CN",
						"ST": "Hangzhou",
						"L": "Hangzhou",
						"O": "k8s",
						"OU": "System"
				}
		]
}
EOF

#生成客户端证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json  -profile=kubernetes client-csr.json | cfssljson -bare client

#(2)在跳板机上生成kubeconfig文件, 该用文件作用是客户端向kube-apiserver认证使用;

#设置集群信息
kubectl config set-cluster k8s --server="https://192.168.19.128:6443" --certificate-authority=ca.pem --embed-certs=true
#设置客户端信息
kubectl config set-credentials client --client-certificate=client.pem --client-key=client-key.pem --embed-certs=true 
#配置上下文, 关联集群和客户端信息
kubectl config set-context client@k8s  --cluster=k8s  --user=client
#设置默认上下文
kubectl config use-context client@k8s 
#查看配置, 默认会在~/.kube/目录下生成config文件, kubectl工具会使用该配置文件信息连接apiserver服务
kubectl config view 

#(3)在master上对kubectl用户进行授权; clusterrole所有命名空间指定指定资源操作权限; 创建clusterrolebinding的目的是绑定用户在所有命名空间对指定的资源操作权限; 这里cluster-admin是管理员权限

kubectl create clusterrolebinding client-all-k8s1 --clusterrole=cluster-admin --user=client

#(4)在跳板机上验证是否能够创建资源 结论是能够获取资源和创建资源;

#(5)如果在其它机器上需要和apiserver进行通信创建资源,只需要把跳板机上的~/.kube/下的config文件拷贝到其它机器; 使用--kubeconfig选项来指定配置文件在什么地方;

kubectl get pods --kubeconfig=/root/.kube/config