一、介绍

Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务。Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。

二、创建Service Account

###serviceaccount(服务账号)
1、#创建serviceaccount
kubectl create serviceaccount mysa 2、#查看mysa
[root@k8s-m ~]# kubectl describe sa mysa
Name: mysa
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: mysa-token-2zjlp
Tokens: mysa-token-2zjlp
Events: <none>
3、#查看mysa自动创建的secret
[root@k8s-m ~]# kubectl get secret
NAME TYPE DATA AGE
default-token-29dpx kubernetes.io/service-account-token 3 119d
mysa-token-2zjlp kubernetes.io/service-account-token 3 1m 4、#使用mysa的sa资源配置pod
[root@k8s-m ~]# cat mysa-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: my-pod spec:
containers:
- name: my-pod
image: nginx
ports:
- name: http
containerPort: 80
serviceAccountName: mysa
5、#导入
[root@k8s-m ~]# kubectl apply -f mysa-pod.yaml 6、#查看
[root@k8s-m ~]# kubectl describe pod nginx-pod 7、#查看使用的token和secret(使用的是mysa的token)
kubectl get pod nginx-pod -o jsonpath={".spec.volumes"}

  

创建k8s账号及RBAC授权

一、介绍

在Kubernetes中,授权有ABAC(基于属性的访问控制)、RBAC(基于角色的访问控制)、Webhook、Node、AlwaysDeny(一直拒绝)和AlwaysAllow(一直允许)这6种模式。从1.6版本起,Kubernetes 默认启用RBAC访问控制策略。从1.8开始,RBAC已作为稳定的功能。通过设置–authorization-mode=RBAC,启用RABC。在RABC API中,通过如下的步骤进行授权:1)定义角色:在定义角色时会指定此角色对于资源的访问控制的规则;2)绑定角色:将主体与角色进行绑定,对用户进行访问授权。

二、创建k8s账号与RBAC授权使用

##创建账号
#1、创建私钥
(umask 077; openssl genrsa -out zhang.key 2048)
#用此私钥创建一个csr(证书签名请求)文件
openssl req -new -key zhang.key -out zhang.csr -subj "/CN=zhang" openssl x509 -req -in zhang.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out zhang.crt -days 365 #2、查看证书内容
openssl x509 -in zhang.crt -text -noout kubectl config set-credentials zhang --client-certificate=./zhang.crt --client-key=./zhang.key --embed-certs=true #3、设置上下文
kubectl config set-context zhang@kubernetes --cluster=kubernetes --user=zhang #4、切换用户
kubectl config use-context zhang@kubernetes ##测试(还未赋予权限)
[root@k8s-m ssl]# kubectl get pod
No resources found.
Error from server (Forbidden): pods is forbidden: User "zhang" cannot list pods in the namespace "default" ##授权
#K8S授权请求是http的请求
对象URL格式:
/apis/[GROUP]/[VERSION]/namespace/[NAMESPACE_NAME]/[KIND]/[OBJECT_ID] k8s授权方式分为:serviceaccount和自己签证ca证书的账号,及签证ca的用户组(group)上(授权给这个组的权限) #简介
role:
1、允许的操作,如get,list等
2、允许操作的对象,如pod,svc等 rolebinding:将哪个用户绑定到哪个role或clusterrole上 clusterrole:(集群角色)
clusterrolebinding:(绑定到集群)
3、如果使用rolebinding绑定到clusterrole上,表示绑定的用户只能用于当前namespace的权限 #创建一个角色(role)
kubectl create role myrole --verb=get,list,watch --resource=pod,svc #绑定用户zhang(上面创建的用户),绑定role为myrole
kubectl create rolebinding myrole-binding --role=myrole --user=zhang
#切换用户
[root@k8s-m ~]# kubectl config use-context zhang@kubernetes
Switched to context "zhang@kubernetes". #查看权限(只授权了default名称空间pod和svc的get,list,watch权限)
[root@k8s-m ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod 0/1 ImagePullBackOff 0 1h
[root@k8s-m ~]# kubectl get pod -n kube-system #无权访问kube-system
No resources found.
Error from server (Forbidden): pods is forbidden: User "zhang" cannot list pods in the namespace "kube-system" [root@k8s-m ~]# kubectl delete pod nginx-pod #无删除权限
Error from server (Forbidden): pods "nginx-pod" is forbidden: User "zhang" cannot delete pods in the namespace "default" #创建clusterrole#可以访问全部的namespace
kubectl create clusterrole mycluster-role --verb=get,list,watch --resource=pod,svc
#删除zhang账号之前绑定的rolebinding
kubectl delete rolebinding myrole-binding
#使用clusterrolebinding绑定clusterrole
kubectl create clusterrolebinding my-cluster-rolebinding --clusterrole=mycluster-role --user=zhang #切换账号
kubectl config use-context zhang@kubernetes
#查看权限 查看kube-system空间的pod
[root@k8s-m ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcdf6894-67h9h 1/1 Running 1 11h
coredns-78fcdf6894-lzxmz 1/1 Running 1 11h
etcd-k8s-m 1/1 Running 2 11h
......

  

配置一个新账号和配置文件并授权

##创建证书
(umask 077; openssl genrsa -out k8s.key 2048)
#用此私钥创建一个csr(证书签名请求)文件(/0是组名)
openssl req -new -key k8s.key -out k8s.csr -subj "/CN=k8s/O=zhang" openssl x509 -req -in k8s.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out k8s.crt -days 365 #查看证书内容
openssl x509 -in k8s.crt -text -noout ##创建secret
#创建一个generic的secre namespace设置为default
kubectl create secret generic k8s -n default --from-file=k8s.crt=./k8s.crt --from-file=k8s.key=./k8s.key
#查看
[root@k8s-m ~]# kubectl get secret |grep k8s
k8s Opaque 2 35s ###配置生成
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://10.0.0.141:6443" --embed-certs=true --kubeconfig=./k8s.config ## 配置客户端认证
kubectl config set-credentials k8s --client-certificate=./k8s.crt --client-key=./k8s.key --embed-certs=true --kubeconfig=./k8s.config ### 配置关联
kubectl config set-context k8s@user --cluster=kubernetes --user=k8s --kubeconfig=./k8s.config ##创建role
kubectl create role k8s-role --verb=get,list,watch --resource=pod,svc
#创建rolebinding
kubectl create rolebinding k8s-rolebinding --role=k8s-role --user=k8s #替换配置文件
[root@k8s-m ~]# mv /root/.kube/config /mnt/
[root@k8s-m ~]# cp k8s.config /root/.kube/config
#修改config的current-context内容
current-context: ""
改成#
current-context: name: k8s@user ##查看
[root@k8s-m ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-statefulset-0 0/1 ContainerCreating 0 8d
nginx-6f858d4d45-6qm6g 0/1 ImagePullBackOff 0 9d
[root@k8s-m ~]# kubectl get pod -n kube-system
No resources found.
Error from server (Forbidden): pods is forbidden: User "k8s" cannot list pods in the namespace "kube-system"

  

Service Account和RBAC授权的更多相关文章

  1. k8s学习笔记之九: Service Account

    第一章.前言 每一个用户对API资源进行操作都需要通经过以下三个步骤: 第一步:对客户端访问进行认证操作,确认是否具有访问k8s权限 token(共享秘钥) SSL(双向SSL认证) ....通过任何 ...

  2. k8s的认证和service account简述

    k8s的认证: 与API server通信的客户端大致有两类:  1.集群客户端工具(kubectl.kubeadm.kubelet等)  2.集群内pod. 任何客户端访问k8s时的过程:  1.认 ...

  3. RBAC授权

    RBAC RBAC使用rbac.authorization.k8s.io API Group 来实现授权决策,允许管理员通过 Kubernetes API 动态配置策略,要启用RBAC,需要在 api ...

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

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

  5. k8s之RBAC授权模式

    导读 上一篇说了k8s的授权管理,这一篇就来详细看一下RBAC授权模式的使用 RBAC授权模式 基于角色的访问控制,启用此模式,需要在API Server的启动参数上添加如下配置,(k8s默然采用此授 ...

  6. 附006.Kubernetes RBAC授权

    一 RBAC 1.1 RBAC授权 基于角色的访问控制(RBAC)是一种基于个人用户的角色来管理对计算机或网络资源的访问的方法. RBAC使用rbac.authorization.k8s.io API ...

  7. 容器编排系统K8s之访问控制--RBAC授权

    前文我们了解了k8s上的访问控制机制,主要对访问控制中的第一关用户认证做了相关说明以及常规用户的配置文件的制作,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/ ...

  8. SQL Server 2012 Managed Service Account

    原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...

  9. SSRS2:Reporting Service 配置Service Account

    1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Servi ...

随机推荐

  1. WPF中控件的显示与隐藏

    1.WPF中控件的显示与隐藏的属性是 Visibility,它有3个枚举值 Visible, Hidden 和 Collapsed.其中Visible为可见,而 Hidden 和 Collapsed ...

  2. C#中webbrowser与javascript(js)交互的方法

    今天在做一个项目的时候需要用c#搞一个webbrowser,然后有些地方还需要与js交互.所以就查了一下资料,发现很多博客提到了但是却没有说下具体的操作.所以我就写一下. 开发环境是Visual St ...

  3. Python -处理PDF

    处理pdf文档 第一. 从文本中提取文本 第二. 创建PDF 两种方法 #使用PdfFileWriter import PyPDF2 pdfFiles = [] for filename in os. ...

  4. UART\RS232与RS485的关系

    https://blog.csdn.net/lhl161123/article/details/53510593 串口通讯是电子工程师面对的最基本的一个通讯方式,RS-232是其中最简单的一种.然而, ...

  5. sendmail简单配置

    yum -y install sendmail sendmail-cfservice sendmail startservice saslauthd statusif [ $? -ne 0 ];the ...

  6. visualbox 安装

    1.下载地址:官网 2.安装步骤 3.新建虚拟机

  7. 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行

    emo场景,以oracle自带库中的表emp为例: select ename,deptno from emp order by deptno; ENAME DEPTNO CLARK 10 KING 1 ...

  8. 动手做webserver的核心之http解析

    简介 webserver往小里说核心功能就是socket管理.url处理.http协议处理.业务dll管理等:下面简介绍一下http协议:超文本传输协议(HTTP)是一种通信协议,当时就是为web传输 ...

  9. 【强化学习】用pandas 与 numpy 分别实现 q-learning, saras, saras(lambda)算法

    本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10159331.html 特别感谢:本文的三幅图皆来自莫凡的教程 https://morvan ...

  10. 【原创】自己动手写一个能操作redis的客户端

    引言 redis大家在项目中经常会使用到.官网也提供了多语言的客户端供大家操作redis,如下图所示 但是,大家有思考过,这些语言操作redis背后的原理么?其实,某些大神会说 只要按照redis的协 ...