Kubernetes-账户权限管理

目录

  • kubeconfig登录
  • 用户名和密码方式登录
  1. kubeconfig登录
    通过已有的CA证书分发其他用户的证书文件
  • 生成andy用户的私钥文件
mkdir ~/kubeconfig;cd kubeconfig/ 
openssl genrsa -out andy.key 2048 
  • 通过私钥生成证书请求文件
openssl req -new -key andy.key -subj "/CN=andy" -out andy.csr 
  • 复制kubernetes的ca证书文件
cp /etc/kubernetes/pki/ca.crt ~/kubeconfig/  # CA证书
cp /etc/kubernetes/pki/ca.key ~/kubeconfig/  # CA私钥
  • 通过CA证书分发证书
openssl x509 -req -in andy.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out andy.crt -days 365 
  • 用户授权 权限:cluster-admin(集群管理员)
kubectl create clusterrolebinding cluster-admin-andy --clusterrole=cluster-admin --user=andy 
  • 准备kubeconfig模板的yaml文件(复制原有的修改为模板)
apiVersion: v1 
clusters: 
- cluster:  
  name: cluster1
contexts: 
- context:  
  name: andy-context
kind: Config 
preferences: {}
users: 
- name: andy-admin
  • 将kubernetes的ca证书填充到andyconfig文件中
kubectl config --kubeconfig=andyconfig set-cluster cluster1 --server=https://192.168.55.100:6443 -certificate-authority=ca.crt --embed-certs=true 
  • 填充私钥
kubectl config --kubeconfig=andyconfig set-credentials andy-admin --client-certificate=andy.crt --clientkey=andy.key --embed-certs=true
  • 生成context内容
kubectl config --kubeconfig=andyconfig set-context andy-context --cluster=cluster1 --user=andy-admin
  • 修改默认关联的命名空间
kubectl config --kubeconfig=andyconfig set-context andy-context --cluster=cluster1 -namespace=default --user=andy-admin
  • 创建环境变量
export KUBECONFIG=~/andyconfi
  • 注意事项
    在master已有关联
    报错:error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
  1. 用户密码方式登录
  • 修改api-server配置文 件,支持用户名和密码文件登录
root@k8s:~# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep basic-auth
#    - --basic-auth-file=/etc/kubernetes/pki/user.txt
# 重启kubelet服务生效
  • 添加用户
cd /etc/kubernetes/pki/
vim user.txt 
redhat,admin,1 
redhat,zhangsan,2 
redhat,lisi,3
  • 授权用户权限
kubectl create clusterrolebinding cluster-admin-zhangsan --clusterrole=cluster-admin --user=zhangsan
  • 测试访问
kubectl -s="https://10.250.101.60:6443" --insecure-skip-tls-verify=true --username="zhangsan" -password="redhat" get nodes

生产中使用http登录,明文传输不安全

  • 为用户签发证书文件
openssl genrsa -out zhangsan.key 2048
openssl req -new -key zhangsan.key -subj "/CN=zhangsan" -out zhangsan.csr
openssl x509 -req -in zhangsan.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out zhangsan.crt -days 3650
  • 调用复制过来的证书:实现客户端安全连接
kubectl -s="https://10.250.101.60:6443" --certificate-authority=ca.crt --client-certificate=zhangsan.crt --clientkey=zhangsan.key --username="zhangsan" --password="redhat" get nodes

kubernetes角色

  • cluster-role # 集群角色,对整 个K8S集群有效 admin,view,edit ,cluster-admin
  • role: # 普通role只对namespace内有效, 可以自定义
1)每一个命名空间里都默认有一个default服务账户
2)服务账户用于指定 POD里的进程是以哪个serviceaccount来运行 ,如果POD运行的进程需要更高的权限 需要对运行pod的serviceaccount关联 不同的角色绑定
3)通过role 绑定的方式给serviceaccount 授权
---
cat /etc/kubernetes/manifests/kube-apiserver.yaml |grep authorization
权限管控:默认使用RBAC 基于角色的权限控制
Node,RBAC: 基于角色的权限控制  # 默认k8s 
AlwaysAllow: 不进行权限控制 所有用户都可以管理,允许所有请求
AlwaysDeny: 所有用户不能管理,拒绝所有请求
  • 自定义角色
kubectl create role role1-pod --verb=get,list,watch --resource=pods,pods/status --dry-run=client -o yaml > role1pod.yml 
  • 绑定role与user
kubectl create rolebinding role-test-read --role=role1-pod --user=lisi 
posted @ 2021-03-15 14:38  独孤云翔  阅读(176)  评论(0)    收藏  举报