8.k8s.认证与访问控制

#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

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

时间: 2024-11-05 10:20:06

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

Nginx简介及用户认证、访问控制和反向代理配置

Nginx 是一个很强大的高性能Web和反向代理服务器及及电子邮件(IMAP/POP3)代理服务器,由俄罗斯程序员设计师Igor Syaoev所开发,官方网站:http://nginx.org/  特点是占有内存少.并发能力强. Nginx配置文件及目录简介: - /usr/local/nginx/                                                           安装目录 - /usr/local/nginx/conf/nginx.conf  

CNCF启动K8s软件一致性项目,Rancher入选全球首批K8s认证平台

CNCF于美国旧金山当地时间2017年11月13日宣布推出Certified Kubernetes Conformance Program,并公布了首批通过认证的32个Kubernetes平台的名单. 此次认证项目中得到认证的Kubernetes产品与平台确保具有一致性及可移植性,可确保完整的Kubernetes API按照规定运行,因此用户可以获得无缝且稳定的体验.同时,得到认证的产品或平台可以使用新的Kubernetes认证标志,并可以将Kubernetes标志与其产品名称(例如XYZ Ku

k8s认证授权详解

理解认证授权 1.1 为什么要认证 想理解认证,我们得从认证解决什么问题.防止什么问题的发生入手. 防止什么问题呢?是防止有人入侵你的集群,root你的机器后让我们集群依然安全吗?不是吧,root都到手了,那就为所欲为,防不胜防了. 其实网络安全本身就是为了解决在某些假设成立的条件下如何防范的问题.比如一个非常重要的假设就是两个节点或者ip之间的通讯网络是不可信任的,可能会被第三方窃取,也可能会被第三方篡改.就像我们上学时候给心仪的女孩传纸条,传送的过程可能会被别的同学偷看,甚至内容可能会从我喜

k8s认证授权和dashboard部署

资源说明 kubectl本身带有认证信息 认证信息文件存放在用户家目录下的/root/.kube/config kubectl 可以远程访问 只需要把配置文件拷贝过去    k8s的输入输出都是以json格式来传递的 [[email protected] ~]# kubectl proxy --port=8080     Starting to serve on 127.0.0.1:8080 [[email protected] .kube]# curl http://localhost:808

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

目录 认证安全 连接Api-Server的两类账号 ServiceAccount 创建 使用admin 的SA 测试 URL访问kubernetes资源 APIserver客户端定义的配置文件 kubernetes 集群相关的私有CA证书 创建新的apiserver的账号及证书 新创建私钥 验证查看生成的证书 设定用户账号 给jerry用户加入上下文 切换至刚刚增加的jerry用户的对应的 测试jerry用户权限 保存配置文件 认证安全 任何用途操作集群的资源对象是,都要经历三种安全相关的操作:

给某单位的远程接入动态密码认证 建设方案

目         录 一.       远程接入身份认证应用概述.... 3 2.1         远程接入身份认证应用现状... 3 2.2         双因素认证方案建设意见... 3 2.3         认证双因素基本原理... 5 二.       身份认证解决方案.... 5 3.1         动联身份认证系统介绍... 6 3.1.1          认证服务... 7 3.1.2          管理中心... 9 3.1.3          动码令. 12

SpringBoot(十四):springboot整合shiro-登录认证和权限管理

原文出处: 纯洁的微笑 这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security.Apache Shiro等安全框架,但是由于Spring Security过于庞大和复杂,大多数公司会选择Apache Shiro来使用,这篇文章会先介绍一下Apache Shiro,在结合Spring Boot给出使用案例. Apache Shiro What is Ap

计算机身份认证和消息认证的区别

一.基于秘密信息的身份认证方法 1.口令核对口令核对是系统为每一个合法用户建立一个用户名/口令对,当用户登录系统或使用某项功能时,提示用户输入自己的用户名和口令,系统通过核对用户输入的用户名.口令与系统内已有的合法用户的用户名/口令对(这些用户名/口令对在系统内是加密存储的)是否匹配,如与某一项用户名/口令对匹配,则该用户的身份得到了认证.缺点:其安全性仅仅基于用户口令的保密性,而用户口令一般较短且是静态数据,容易猜测,且易被攻击,采用窥探.字典攻击.穷举尝试.网络数据流窃听.重放攻击等很容易攻

Openssl安全与认证

SSL :secure socketslayer  安全的套接字层.这是网井公司为了给httpd传输协议加密在应用层和传输层加了一层库,实现传输加密用的,这个库能够在写程序的时候,调用这个库,完成加密解密功能,能帮着完成秘钥分发功能:如果不调用也可以正常的时候只使用httpd不进行加密,所以这个是公用的一个库. http协议调用了SSL,则成为https.但是httpd和https在实现机制上差别非常大 通信安全的目标: 保密性:确保任何无关的第三方看到confidentiality 完整性:通