10、kubernetes之RBAC认证

一、kubectl proxy

# kubectl proxy --port=8080
# curl http://localhost:8080/api/v1/
# curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/

二、serviceaccount资源

  • 创建自定义serviceaccount:用于pod与api通信的认证账号
# kubectl create serviceaccount admin
serviceaccount/admin created

# kubectl create serviceaccount dongfei -o yaml --dry-run  #生成配置清单
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: null
  name: dongfei

# kubectl get sa  #sa,serviceaccount的简写
NAME      SECRETS   AGE
admin     1         5s
default   1         77d

# kubectl describe sa admin
Name:                admin
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   admin-token-76kb7
Tokens:              admin-token-76kb7
Events:              <none>

# kubectl get secret
NAME                  TYPE                                  DATA   AGE
admin-token-76kb7     kubernetes.io/service-account-token   3      36s
default-token-4q4c9   kubernetes.io/service-account-token   3      77d
mysql-root-password   Opaque                                1      7d21h
  • 应用自定义serviceaccount
apiVersion: v1
kind: Pod
metadata:
  name: pod-sa-demo
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
  serviceAccountName: admin
# kubectl describe pods pod-sa-demo |grep -A4 Volumes
Volumes:
  admin-token-76kb7:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  admin-token-76kb7
    Optional:    false

三、RBAC 基于角色的访问控制

1、apiserver客户端配置及创建UserAccount用户

  • apiserver客户端配置文件
# kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.100.51:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: [email protected]
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
  • 制作连接apiserver的证书,创建用户
# cd /etc/kubernetes/pki/
# (umask 077;openssl genrsa -out dongfei.key 2048)
# openssl req -new -key dongfei.key -out dongfei.csr -subj "/CN=dongfei"
# openssl x509 -req -in dongfei.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dongfei.crt -days 365
# openssl x509 -in dongfei.crt -text -noout  #查看

# kubectl config set-credentials dongfei --client-certificate=./dongfei.crt --client-key=./dongfei.key --embed-certs=true
# kubectl config set-context [email protected] --cluster=kubernetes --user=dongfei
  • 切换上下文
# kubectl config use-context [email protected]
# kubectl config view
# kubectl config use-context [email protected]
  • 创建kubectl配置文件
# kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://192.168.100.51:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
# kubectl config view --kubeconfig=/tmp/test.conf

2、Role角色

  • 创建Role
# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml > role-demo.yaml
# vim role-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: pods-reader
  namespace: default
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
# kubectl apply -f role-demo.yaml
# kubectl get role
# kubectl describe role pods-reader

3、rolebinding

  • 创建user和role的绑定关系
# kubectl create rolebinding dongfei-read-pods --role=pods-reader --user=dongfei -o yaml --dry-run > rolebinding-demo.yaml
# vim rolebinding-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  creationTimestamp: null
  name: dongfei-read-pods
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pods-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: dongfei
# kubectl apply -f rolebinding-demo.yaml
# kubectl get rolebinding
# kubectl describe rolebinding dongfei-read-pods
  • 测试账号权限
# kubectl config use-context [email protected]
# kubectl get pods  #默认名称空间有权限
# kubectl get pods -n kube-system  #无权限
  • 删除rolebinding
# kubectl delete rolebinding dongfei-read-pods

4、clusterrole

  • 创建clusterrole
# kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods -o yaml --dry-run -o yaml > clusterrole-demo.yaml
# vim clusterrole-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: null
  name: cluster-reader
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
# kubectl apply -f clusterrole-demo.yaml

5、clusterrolebinding

  • user-绑定-clusterrole
# kubectl create clusterrolebinding dongfei-read-all-pods --clusterrole=cluster-reader --user=dongfei --dry-run -o yaml > clusterrolebinding-demo.yaml
# kubectl apply -f clusterrolebinding-demo.yaml
# kubectl describe clusterrolebinding dongfei-read-all-pods
  • 测试
# kubectl config use-context [email protected]
# kubectl get pods
# kubectl get pods -n kube-system  #可以访问集群所以的名称空间

6、role绑定至clusterrole

  • role将会降权为所在名称空间内
# kubectl create rolebinding dongfei-read-pods --clusterrole=cluster-reader --user=dongfei

原文地址:https://www.cnblogs.com/L-dongf/p/11689085.html

时间: 2024-10-10 19:02:06

10、kubernetes之RBAC认证的相关文章

django的RBAC认证z;自定义auth_user表;认证组件权限组件源码分析;认证组件;权限组件

一 RBAC 1.RBAC:全称(Role-Based Access Control):指的是基于用户权限访问控制的认证. 2.Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为:三表规则,五表规则:Django采用的是六表规则. # 三表:用户表.角色表.权限表# 五表:用户表.角色表.权限表.用户角色关系表.角色权限关系表# 六表:用户表.角色表.权限表.用户角色关系表.角色权限关系表.用户权限关系表 3.在Django中六表之间是都是多对多的关系,可通过下面字段跨表访问

drf框架 6 视图集与路由组件(开发最常用、最高级) 三大认证原理 RBAC认证规则

准备工作 models.py from django.db import models # 基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的 class BaseModel(models.Model): is_delete = models.BooleanField(default=False) updated_time = models.DateTimeField(auto_now_add=True) class Meta: abstract = True # 必须完成该配置 cla

[k8s集群系列-10]Kubernetes Service暴露方式及Traefik使用

访问部署在kubernetes集群中服务,有两种类型: 集群内部实现访问 集群外部实现访问 但是不管是集群内部还是外部访问都是要经过kube-proxy的 集群内部实现访问 ClusterIP Clusterip是集群内部的私有ip,在集群内部访问服务非常方便,也是kuberentes集群默认的方式,直接通过service的Clusterip访问,也可以直接通过ServiceName访问.集群外部则是无法访问的. 示例 **创建nginx服务,提供web服务z nginx-ds.yaml api

Kubernetes之RBAC

API Server的授权管理 API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节.API Server 目前支持一下几种授权策略. Always Deny: 表示拒绝所有的请求,一般用户测试. Always Allow:允许接收所有请求,如果集群不需要授权流程,则可以采用该策略,这也是Kubernetes的默认配置. ABAC: 基于属性的访问控制,表示使用用户配置的授权规则对用户请求进行匹配和控制. Webhook

Kubernetes 基于 RBAC 的授权(十六)

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

10.4 配置RBAC拆分权限

拆分权限使两个不同的组(如 Active Directory 管理员和 Microsoft Exchange Server 2013 管理员)能够管理各自的服务.对象和属性.Active Directory 管理员管理安全主体(如用户),这种安全主体可提供访问 Active Directory 林的权限.Exchange 管理员管理 Active Directory 对象上与 Exchange 相关的属性以及 Exchange 特定的对象创建和管理. Microsoft Exchange Ser

kubernetes认证、授权、准入控制

1 总述 1 概述 kubernetes 中的资源访问类型有两种,一种是由POD提供的服务资源,其可通过service或 ingress提供接口以供外部访问,这种访问不需要经过API server的认证,而另一种对集群内部资源的操作则需要经过一定的认证授权操作才能完成. 2 认证,授权,准入控制概述 1 概述 任何客户端在操作相关资源对象时必须经过三个步骤:认证: 身份鉴别,正确的账号,能够通过认证,其只能证明其是合法的账户.授权: 权限检查,对资源进行相应的操作.其可操作某些资源,其某些资源需

013.Kubernetes认证授权

一 Kubernetes认证系统介绍 1.1 访问控制 Kubernetes API的每个请求都会经过多阶段的访问控制之后才会被接受,这包括认证.授权以及准入控制(Admission Control)等 1.2 认证 在集群开启TLS后,客户端发往Kubernetes的所有API请求都需要进行认证,以验证用户的合法性. Kubernetes支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可).如果认证成功,则用户的username会被传入授权模块做进一步授权验证:而对于认证失败

七牛云成为 CNCF 全球重要合作伙伴,并通过 Kubernetes 一致性认证

近日,七牛云正式加入 Cloud Native Computing Foundation (CNCF),成为 CNCF 共建云社区的全球重要合作伙伴.同时,七牛云企业级容器平台通过了「Kubernetes 一致性认证」,这意味着平台可以在不对服务做任何改造的情况下,兼容其他 Kubernetes 系统上的服务,实现无缝迁移.(资质认证:CNCF 云原生基金会会员) (资质认证:Kubernetes一致性认证) ? 本次通过认证,是七牛容器云在获得国家可信云容器解决方案认证之后,又一次在云原生社区