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
posted @ 2021-05-18 16:26  三木燕  阅读(702)  评论(0编辑  收藏  举报