Kubernetes-账户权限管理
目录
- kubeconfig登录
- 用户名和密码方式登录
- 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
- 用户密码方式登录
- 修改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

浙公网安备 33010602011771号