k8s中的认证授权

一 kubernetes API 访问控制

Authentication(认证)

  • 认证方式现共有8种,可以启用一种或多种认证方式,只要有一种认证方式通过,就不再进行其它方式的认证。通常启用X509 Client Certs和Service Accout Tokens两种认证方式。

  • Kubernetes集群有两类用户:由Kubernetes管理的Service Accounts (服务账户)和(Users Accounts) 普通账户。k8s中账号的概念不是我们理解的账号,它并不真的存在,它只是形式上存在。

Authorization(授权)

  • 必须经过认证阶段,才到授权请求,根据所有授权策略匹配请求资源属性,决定允许或拒绝请求。授权方式现共有6种,AlwaysDeny、AlwaysAllow、ABAC、RBAC、Webhook、Node。默认集群强制开启RBAC。

Admission Control(准入控制)

  • 用于拦截请求的一种方式,运行在认证、授权之后,是权限认证链上的最后一环,对请求API资源对象进行修改和校验。

1.1 UserAccount与ServiceAccount

  • 用户账户是针对人而言的。 服务账户是针对运行在 pod 中的进程而言的。

  • 用户账户是全局性的。 其名称在集群各 namespace 中都是全局唯一的,未来的用户资源不会做 namespace 隔离, 服务账户是 namespace 隔离的。

  • 集群的用户账户可能会从企业数据库进行同步,其创建需要特殊权限,并且涉及到复杂的业务流程。 服务账户创建的目的是为了更轻量,允许集群用户为了具体的任务创建服务账户 ( 即权限最小化原则 )。

1.1.1 ServiceAccount

  • 服务账户控制器(Service account controller)

    • 服务账户管理器管理各命名空间下的服务账户

    • 每个活跃的命名空间下存在一个名为 “default” 的服务账户

  • 服务账户准入控制器(Service account admission controller)

    • 相似pod中 ServiceAccount默认设为 default。

    • 保证 pod 所关联的 ServiceAccount 存在,否则拒绝该 pod。

    • 如果pod不包含ImagePullSecrets设置那么ServiceAccount中的ImagePullSecrets 被添加到pod中

    • 将挂载于 /var/run/secrets/kubernetes.io/serviceaccount 的 volumeSource 添加到 pod 下的每个容器中

    • 将一个包含用于 API 访问的 token 的 volume 添加到 pod 中

1.1.2 ServiceAccount示例:

建立名字为admin的ServiceAccount

[root@k8s-master ~]# kubectl create sa timinglee
serviceaccount/timinglee created
[root@k8s-master ~]# kubectl describe  sa timinglee
Name:                timinglee
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   <none>
Tokens:              <none>
Events:              <none>
​

建立secrets

[root@k8s-master ~]# kubectl create secret docker-registry docker-login --docker-username admin --docker-password lee --docker-server reg.timinglee.org --docker-email lee@timinglee.org
secret/docker-login created
[root@k8s-master ~]# kubectl describe secrets docker-login
Name:         docker-login
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Type:  kubernetes.io/dockerconfigjson
​
Data
====
.dockerconfigjson:  119 bytes

将secrets注入到sa中

[root@k8s-master ~]# kubectl edit sa timinglee

apiVersion: v1
imagePullSecrets:
- name: docker-login
kind: ServiceAccount
metadata:
  creationTimestamp: "2024-09-08T15:44:04Z"
  name: timinglee
  namespace: default
  resourceVersion: "262259"
  uid: 7645a831-
Kubernetes (K8s) 提供了多种身份验证和授权机制,包括基于令牌、基于证书、基于 OpenID Connect 等。以下是 K8s认证授权机制: 1. 基于令牌的认证K8s 使用令牌进行用户身份验证。用户可以使用用户名和密码向 K8s 集群请求令牌,该令牌可用于后续请求的身份验证。 2. 基于证书的认证K8s 还支持使用证书进行身份验证。集群管理员可以在集群中生成证书,然后将证书分发给用户,让其用于身份验证。这种方法更加安全,因为证书可以被撤销。 3. OpenID Connect 认证K8s 还支持 OpenID Connect,这是一种基于 OAuth 2.0 的身份验证协议。它使得用户可以使用 Google、GitHub 等身份提供者进行身份验证,并获取到一个令牌,用于后续请求的身份验证。 在授权方面,K8s 提供了以下授权机制: 1. 基于角色的访问控制 (RBAC):K8s 的 RBAC 允许管理员为不同的用户或用户组分配不同的角色。角色定义了用户或用户组可以访问的资源和操作。 2. 基于节点的访问控制 (NBAC):NBAC 允许管理员为不同的节点分配不同的角色。角色定义了节点可以访问的资源和操作。 3. 基于命名空间的访问控制 (NSAC):NSAC 允许管理员为不同的命名空间分配不同的角色。角色定义了命名空间中可以访问的资源和操作。 4. 基于 Webhook 的授权:Webhook 允许管理员将授权决策交给外部服务来进行。这种方法比较灵活,因为管理员可以根据需要进行自定义授权
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值