#K8S认证与访问控制(RBAC) 用户证书创建

#k8s认证

主要认证 方式 http token、https证书

k8s不提供用户管理,API Server把客户端证书的CN字段作为User,把names.O字段作为Group

  • Pod认证 —>ServiceAccount —>service-account-toen—>API Server
  • k8s组件认证 —> 证书 —> kubeconfig —> API Server

Pod容器的访问:Pod(dashborad 也是Pod形式运行)

k8s组件对API Server的访问:kubectl、Controller Manager、Scheduler、kubelet、kubeproxy

#kubeconfig

kubeconfig 文件包含集群参数(CA证书、API Server地址),客户端参数(证书和私钥),集群

context 信息(集群名称、用户名)

#查看当前kubeconfig配置
kubectl config view
cat ~/.kube/config

#ServiceAccount(sa)

sa为Pod的进程调用Kubernetes API时提供身份标识,附带着Secret用于访问API Server的凭据

每个namespace会自动创建一个default service account

sa创建时,系统Token controller自动创建service-account-toen

pod创建时没指定sa,系统会自动指派相同namespace下的默认sa

容器启动时会挂载sa的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/

#查看当前ns默认sa配置
kubectl get sa default -o yaml
#查看自动创建的secret
kubectl get sa default -o yaml #创建sa名称myda (-n dev名称空间 --dry-run不执行)
kubectl create sa mysa -n dev -o yaml --dry-run #只显示yaml不执行

RBAC 授权模式

RBAC (Role-Based Access Control基于角色的访问控制)将权限绑定到role,用户与role绑定,获取role权限

Subject (用户User) —> 角色绑定 —> 角色 —> 获取许可权限

  • User --> Rolebinding --> Role (Role仅用于对应ns ,Rolebinding可绑定RoleClusterrole)
  • User --> Clusterrolebinding --> Clusterrole (ClusterRole用于集群级别的资源)

RBAC API资源对象: Pods ConfigMaps Deployments Nodes Secrets Namespaces

role对应操作权限: create get delete list update edit watch exec

#查看集群管理员admin资源
kubectl get clusterrole admin -o yaml #创建myrole ,查看资源
kubectl create role myrole --verb=get,list,watch --resource=pod,svc -o yaml --dry-run #创建myrole-binding,绑定role为myrole,绑定用户devuser
kubectl create rolebinding myrole-binding --role=myrole --user=devuser -o yaml --dry-run
#创建Dashboard登录token实例
#创建sa名称dashboard-admin,绑定到集群角色cluster-admin
kubectl create sa dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin \
--clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin #查看Dashboard登录token
kubectl describe secrets -n kube-system \
$(kubectl get secret -A | awk '/dashboard-admin/{print $2}') |awk '/token:/{print$2}'

#k8s证书签名创建用户实例

#k8s创建用户实例
############################## #k8s创建devuser用户管理dev空间所有资源 ##############################
#参数 #group name , namespace
gname=dev
#user name
uname=${gname}user
#clusters name
cname=$(kubectl config get-contexts |awk '/*/{print $3}')
#API Server
apiserver="$(kubectl config view |awk '/server/{print $2}')"
#k8s根证书签名路径
ca_dir=/etc/kubernetes/pki
#可选,创建目录
mkdir -p ${uname} ; cd ${uname} ##############################
#创建证书 #创建私钥key
openssl genrsa -out ${gname}.key
#创建证书签署请求csr(O=组织,CN=用户)
#openssl rand -writerand ~/.rnd
openssl req -new -key ${gname}.key -out ${gname}.csr -subj "/O=${gname}/CN=${uname}" #使用CA根证书签名
openssl x509 -req -in ${gname}.csr -CAcreateserial -out ${gname}.crt \
-CA ${ca_dir}/ca.crt -CAkey ${ca_dir}/ca.key -days 365
#验证
#openssl x509 -in ${gname}.crt -text -noout -subject ##############################
#创建config文件 #集群参数
kubectl config set-cluster ${cname} \
--certificate-authority=${ca_dir}/ca.crt \
--embed-certs=true \
--server=${apiserver} \
--kubeconfig=config.${uname} #客户端认证
kubectl config set-credentials ${uname} \
--client-certificate=${gname}.crt \
--client-key=${gname}.key \
--embed-certs=true \
--kubeconfig=config.${uname} #上下文参数(用户关联集群)
kubectl config set-context ${uname}@${cname} \
--cluster=${cname} \
--user=${uname} \
--namespace=${gname} \
--kubeconfig=config.${uname} # 设置默认上下文
kubectl config use-context ${uname}@${cname} --kubeconfig=config.${uname} #查看
kubectl config view --kubeconfig=config.${uname} ##############################
#权限 #创建namespace
kubectl create ns ${gname} #查看clusterrole/admin
#kubectl get clusterrole admin -o yaml
#设置权限角色,所属namespace的所有权(使用系统自带的clusterrole)
kubectl create rolebinding ${uname}-admin-binding --clusterrole=admin --user=${uname} --namespace=${gname} ############################## #kubectl认证
bash #进入新的终端环境
gname=dev
uname=${gname}user
#临时使用config.${uname}授权文件
export KUBECONFIG=config.${uname} #查看当前配置
kubectl config view
#查看sa
kubectl get sa #运行Pod测试
kubectl run myweb --image=alivv/nginx:node --replicas=3 #查看Pod
kubectl get pod -n dev exit #退出测试终端环境
#查看所有namespace的Pod
kubectl get pod -A ##############################
#删除pod
kubectl delete deploy/myweb -n dev #删除ns
kubectl delete ns dev

Blog地址 https://www.cnblogs.com/elvi/p/11755851.html

本文git地址 https://gitee.com/almi/k8s/tree/master/notes

8.k8s.认证与访问控制的更多相关文章

  1. 开源认证和访问控制的利器keycloak使用简介

    目录 简介 安装keycloak 创建admin用户 创建realm和普通用户 使用keycloak来保护你的应用程序 安装WildFly client adapter 注册WildFly应用程序 安 ...

  2. 深入理解k8s中的访问控制(认证、鉴权、审计)流程

    Kubernetes自身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象. 在Kubernetes的访问控制流程中,用户模型是 ...

  3. 十二,k8s集群访问控制之RBAC授权

    目录 角色访问控制RBAC (Role-Based Access Control) 常用的授权插件: RBAC控制: role 和 clusterrole rolebinding 和 clusterr ...

  4. k8s认证与授权

    认证用于身份鉴别,而授权则实现权限分派.k8s以插件化的方式实现了这两种功能,且分别存在多种可用的插件.另外,它还支持准入控制机制,用于补充授权机制以实现更精细的访问控制功能. 一.访问控制概述 ap ...

  5. k8s系列---k8s认证及serviceaccount、RBAC

    http://blog.itpub.net/28916011/viewspace-2215100/ 对作者文章有点改动 注意kubeadm创建的k8s集群里面的认证key是有有效期的,这是一个大坑!! ...

  6. k8s认证及ServiceAccount-十五

    一.ServiceAccount (1)简介 https://www.kubernetes.org.cn/service-account Service account是为了方便Pod里面的进程调用K ...

  7. k8s认证及serviceAccount、userAccount

    1.概述 用kubectl向apiserver发起的命令,采用的是http方式,K8s支持多版本并存. kubectl的认证信息存储在~/.kube/config,所以用curl无法直接获取apis中 ...

  8. Security - 轻量级Java身份认证、访问控制安全框架

    前言 此框架由小菜独立开发,并且已经在生产环境中运行大约一年时间. 也就是说,Security 框架写出来有一段时间了,但是一直没有公布.开源,经过不断迭代完善,终于算是拿得出手啦~ Security ...

  9. 十一,k8s集群访问控制之ServicAccount

    目录 认证安全 连接Api-Server的两类账号 ServiceAccount 创建 使用admin 的SA 测试 URL访问kubernetes资源 APIserver客户端定义的配置文件 kub ...

随机推荐

  1. MATLAB中产生高斯白噪声的两个函数

    MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN.WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声.1.WGN:产生高斯白噪声 y = wg ...

  2. 【译文】Git merge 和 Git rebase比较

    [译文]Git merge 和 Git rebase比较 原创: 胡江华 胡同学和朋友们的成长日记 2017-03-22 git rebase 这个命令经常被人认为是一种Git巫术,初学者应该避而远之 ...

  3. big.js常用方法

    官网api:http://mikemcl.github.io/big.js/ +:minus.minus(n) ⇒ Big  %:mod.mod(n) ⇒ Big -:plus.plus(n) ⇒ B ...

  4. form表单和CSS

    一.form表单 1. form表单有什么用 能够获取用户输入的信息(输入,选择, 上传的文件),并且将这些数据全部发送给后端 2. form表单的用法 (1)有两个重要参数: action : 控制 ...

  5. java数据结构3--List

    List 1.1 list接口的简介 1.2 list实现子类 ArrayList:线程不安全,查询速度快,底层用的是数组,增删慢LinkedList:线程不安全,链表结构,增删速度快,查询慢Vect ...

  6. 微信小程序-饮食日志_开发记录01

    今天主要了解微信小程序的框架结构以及环境部署等. 小程序的框架主要分为: js.json.wxss.wxml等 和java web的内容相似,主要了解内部代码的使用情况和语言方式. 主要写了页面的框架 ...

  7. JavaScript求取水仙花数

    一.什么是水仙花数 水仙花数也称为超完全数字不变数.自幂数.阿姆斯壮数.阿姆是特朗数. 水仙花数是指一个三位数,每个位数上数字的3次幂之和等于数字它本身. 水仙花数是自幂数的一种,三位的三次自幂数才叫 ...

  8. Memcached在Asp.net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  9. luogu P1181 数列分段Section I x

    P1181 数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出 ...

  10. 论文阅读:Andromeda: Performance, Isolation, and Velocity at Scale in Cloud Network Virtualization (全文翻译用于资料整理和做PPT版本,之后会修改删除)

    Abstract: This paper presents our design and experience with Andromeda,  Google Cloud Platform’s net ...