10-k8s-身份认证与鉴权

文章目录

    • 一、ServiceAccount介绍
    • 二、ServiceAccount相关的资源对象
    • 三、dashboard空间示例

一、ServiceAccount介绍

  1. ServiceAccount(服务账户)概念介绍

    1)ServiceAccount是Kubernetes集群中的一种资源对象,用于为Pod或其他资源提供身份验证和授权,以便它们能够与Kubernetes API进行交互。

    2)Service Account仅局限它所在的namespace,而每个namespace都会自动创建一个default service account。可以在Pod中通过serviceAccountName来指定使用哪个ServiceAccount。

  2. 解决的问题

    1)身份验证: ServiceAccount为Pod提供一个身份,使Pod能够与Kubernetes API进行交互。Kubernetes API会根据ServiceAccount的身份进行授权判断。

    2)权限控制: 通过ServiceAccount,Kubernetes管理员可以对Pod进行权限控制,限制它们能够访问的资源和操作,从而增强集群的安全性。

    3)认证和授权: ServiceAccount使得Pod可以通过自己的身份进行认证和授权,而不是依赖于集群中其他的身份。

二、ServiceAccount相关的资源对象

  1. role(k8s角色):通过RoleBinding绑定相关权限。它是Namespace级别的资源,只能作用于Namespace之内。

  2. ClusterRole(集群角色): ClusterRole定义了一组权限,用于控制对Kubernetes集群级别资源的访问。它是一种权限策略,定义了哪些操作可以被执行。ClusterRole可以被多个命名空间使用。

  3. RoleBinding:Role或 ClusterRole只是用于制定权限集合,具体作用于什么对象上,需要使用 RoleBinding来进行绑定。可以将Role 或 ClusterRole绑定到User、Group、Service Account 上。

    ps:相关指令介绍

    1)查看rolebinding信息:kubectl get rolebinding --all-namespaces

    2)查看指定rolebinding 的配置信息:kubectl get rolebinding -n -o yaml

  4. ClusterRoleBinding:RoleBinding用于在单个命名空间内进行权限控制,而ClusterRoleBinding用于在整个集群内进行权限控制。

  5. Secret(秘密): Secret是用于存储敏感信息的资源,如密码、API密钥、证书等。ServiceAccount通常与Secret关联,Kubernetes会自动为每个ServiceAccount创建一个与之关联的Secret,其中包含了ServiceAccount的身份令牌。

  6. Service Account Admission Controller介绍

    通过Admission Controller插件来实现对pod修改,它是apiserver的一部分。创建或更新pod时会同步进行修改pod。当插件处于激活状态(在大多数发行版中都默认情况)创建或修改pod时,会按以下操作执行:

    1)如果pod没有设置ServiceAccount,则将ServiceAccount设置为default。
    2)确保pod 引用的ServiceAccount存在,否则将会拒绝请求。
    3)如果pod不包含任何ImagePullSecrets,则将ServiceAccount 的 lmagePullSecrets会添加到 pod中。
    4)为包含API访问的Token 的 pod添加了一个volume。
    5)把volumeSource添加到安装在pod的每个容器中,挂载在/var/run/secrets/kubernetes.io/serviceaccount。

  7. Service Account Controller介绍

    Service Account Controller在namespaces里管理ServiceAccount,并确保每个有效的 namespaces中都存在一个名为“default”的ServiceAccount。

  8. 其他相关指令介绍

    1)获取所有空间的ServiceAccount:kubectl get sa -A

    2)获取所有空间的ClusterRole: kubectl get clusterrole -A

    3)查看ClusterRole详情: kubectl get clusterrole ingress-nginx -n ingress-nginx -o yaml

三、dashboard空间示例

  1. 查看dashboard的用户列表:kubectl get sa -n kubernetes-dashboard
    在这里插入图片描述

  2. 查看用户secrets 并且获取token

    1)查看secrets : kubectl get secrets -n kubernetes-dashboard
    10-k8s-身份认证与鉴权_第1张图片

    2)获取密钥:kubectl describe secrets default-token-fjzh6 -n kubernetes-dashboard
    在这里插入图片描述

  3. 创建admin用户,并且查看secrets和token

    1)创建访问账号:vi /opt/dash.yaml

    创建用户–》申明角色–》用户和角色绑定

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    

    2)应用: kubectl apply -f /opt/dash.yaml

    3)查看dashboard的用户列表:get sa -n kubernetes-dashboard
    在这里插入图片描述
    4)查看secrets: kubectl get secrets -n kubernetes-dashboard
    10-k8s-身份认证与鉴权_第2张图片
    5)获取访问令牌: kubectl describe secrets admin-user-token-d8f7x -n kubernetes-dashboard
    在这里插入图片描述

    6)查看绑定关系: kubectl get ClusterRoleBinding admin-user -n kubernetes-dashboard -o yaml
    10-k8s-身份认证与鉴权_第3张图片

你可能感兴趣的:(k8s学习笔记,kubernetes,容器,云原生)