kubernetes api 的两种身份认证 以及kubectl生成kubeconfig
token方式
-
配置服务账户及授权
创建服务账户
kubectl create sa api-admin
获取TOKEN
kubectl get secrets $(kubectl get sa api-admin -ojsonpath='{.secrets[0].name}') -ojsonpath='{.data.token}' |base64 -d
集群管理员授权
kubectl create clusterrolebinding cluster-api-admin --clusterrole=cluster-admin --serviceaccount=default:api-admin
-
设置kubeconfig文件
设置集群配置
kubectl config set-cluster k8s-test --server=$APISERVER --certificate-authority=/home/admin/kubernetes.ca.crt
设置客户端配置
kubectl config set-credentials api-admin --token=$TOKEN
设置上下文配置
kubectl config set-context k8s-test --cluster=k8s-test --user=api-admin
设置默认上下文
kubectl config use-context k8s-test
X.509 客户端证书方式
-
申请客户端证书
生成证书请求文件,注意证书的OU和CN字段会作为apiserver鉴权的用户或组实体
openssl genrsa -out sanmu.key 2048 openssl req -new -key john.key -out sanmu.csr
Organizational Unit Name (eg, section) []:group
Common Name (eg, your name or your server's hostname) []:sanmu
申请签名证书
cat <<EOF | kubectl apply -f - apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: sanmu spec: groups: - system:authenticated request: `cat sanmu.csr |base64 | tr -d "\n"` signerName: kubernetes.io/kube-apiserver-client usages: - client auth EOF
批准签名证书
kubectl certificate approve sanmu
获取证书
kubectl get csr sanmu -ojsonpath='{.items[0].status.certificate}' |base64 -d >sanmu.crt
集群管理员授权
kubectl create clusterrolebinding cluster-sanmu-admin --clusterrole=cluster-admin --user sanmu
-
设置kubeconfig文件
设置集群配置
kubectl config set-cluster k8s-test --server=$APISERVER --certificate-authority=/home/admin/kubernetes.ca.crt
设置客户端配置
kubectl config set-credentials sanmu --client-key=/home/admin/mutou.key --client-certificate=/home/admin/mutou.crt --embed-certs=true
设置上下文配置
kubectl config set-context k8s-test --cluster=k8s-test --user=sanmu
设置默认上下文
kubectl config use-context k8s-test