【k8s】user 用户身份确定流程

文章目录

  • 概述
  • 1、用户身份确定流程
    • [1.1 查看当前使用的用户](#1.1 查看当前使用的用户)
    • [1.2 验证用户](#1.2 验证用户)
  • [2. user的认证方式](#2. user的认证方式)
    • [2.1 客户端证书认证:](#2.1 客户端证书认证:)
    • [2.2 Token 认证:](#2.2 Token 认证:)
    • [2.3 OIDC 认证(可能性较大,因为组名包含时间戳):](#2.3 OIDC 认证(可能性较大,因为组名包含时间戳):)

概述

当你在堡垒机或controller节点上(区别于容器内部发起的请求)执行kubectl get po 命令是,默认使用的是 user 用户的权限,这个权限是什么?来自哪里,有哪些权限?

1、用户身份确定流程

默认配置文件位置:~/.kube/config

用户身份由以下因素决定:

  • 当前 context 中指定的用户

  • 该用户配置的认证方式(证书、token、OIDC等)

1.1 查看当前使用的用户

查看当前 context 的详细信息

kubectl config current-context

~/.kube/config 示例

全量的配置信息:

bash 复制代码
[root@caas-dc4-bastion vtu]# cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lKQU44aTBqZWRPaGZRTUEwR0NTcUdTSWIzRFFFQkN3VUFNSUdKTVFzd0NRWUQKVlFRR0V3SkRUakVRTUE0R0ExVUVDQXdIYzJsamFIVmhiakVRTUE0R0ExVUVCd3dIWTJobGJtZGtkVEVNTUFvRwpBMVVFQ2d3RGVuUmxNUTR3REFZRFZRUUxEQVY2Wlc1aGNERTRNRFlHQTFVRUF3d3ZXbFJGSUU5d1pXNVFZV3hsCmRIUmxJRkp2YjNRZ1EyVnlkR2xtYVdOaGRHVWdRWFYwYUc5eWFYUjVJREl3TWpBd0lCY05NakF4TVRFM01EZzAKT1RNd1doZ1BNakExTURFeE1UQXdPRFE1TXpCYU1JR0pNUXN3Q1FZRFZRUUdFd0pEVGpFUU1BNEdBMVVFQ0F3SApjMmxqYUhWaGJqRVFNQTRHQTFVRUJ3d0hZMmhsYm1ka2RURU1NQW9HQTFVRUNnd0RlblJsTVE0d0RBWURWUVFMCkRBVjZaVzVoY0RFNE1EWUdBMVVFQXd3dldsUkZJRTl3Wlc1UVlXeGxkSFJsSUZKdmIzUWdRMlZ5ZEdsbWFXTmgKZEdVZ1FYVjBhRzl5YVhSNUlESXdNakF3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQgpBUURiY3NvU3JucWxYT3hGdGdubzB4MlR6WkI4dU9lbjUvc3JOMURqcEovQ1YwYmVDYUtscXcvQU5kWDJOUDBXCjlTVmZ5eitaR21FN0s1bnU4UE12WkNPVkw4VUVCTk5hc25aVUltWUZXWE5XN2hKTm5waXZHbEN0SUJxVWFTSmgKMzI1UFppM2FxNDFROEt4bEtVbnlva0ppelQzeHNuWmRPd3JRa0Z2TDNpUGVkTjI4MWFHRVN1dUY1WjBiOEllTgo3ZmF3cWlEb0hFM2diTXg1blo5UjNTOHF5b0d6ejB6U2tDbDJPbEV5b1FZZUQ0dXVMaUtJVDJRcHI5anhMZFhxCkNBbG1OdW52R3pzM1NhTEwrbHA2aXlOOFY3bFRxYUc2WlJKazhYTHk1NENBYkdvR1RDOHNuQUpqY2RoeXV3VVoKcGRPNzV6ZW5hclVCM0tDSi9XSGpjZXU5QWdNQkFBR2pJekFoTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RGdZRApWUjBQQVFIL0JBUURBZ0VHTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCSjJKM3dzd1U1TlQxRmNNWTVUVnoxCmJrRXhIT2ErSTNxT09HTXhiZFh4cXR6dStiY3JseGV6QVp4YTBZTlJNYUlUYjlvcUo1QXgwRC9JSTdDdXZwYTkKOHNoM0tGeUVxNEVpMWhETUVzbDBkWnRVYlpDV0Y1dHQ4djlNUFhZU3RwVnFlL1RXY3IyeGpIb1lnbW1sYUNKSgpiQzNUK3pLS2FzMjVKbEZYMEw4V0drZGlleHJPb1VYUWRRc2pjcmZrbHU5ZFNFbERsQTlsU05XOHZreHNXREpPCnlxbVZqUXl4N1RlNjdRN01oRTQ0SzBYWTVZYUVzWFd5ZkFZWkhFVlF1Rkd2K3RoMnpBclhJVkw4WSt3dVZsL1UKK1Z6dlhvVEFrQjFOOWw2cXBVRUVwU0pYNkJBUXQxeFpiQzV1ZVVKLyt4SlRzMlRGcW1LNVRYVFg5aXlOS2hzZwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://[fd00:78:200:3305::16:14]:2602
  name: cluster.local
contexts:
- context:
    cluster: cluster.local
    user: kubectl
  name: kubectl-to-cluster.local
current-context: kubectl-to-cluster.local
kind: Config
preferences: {}
users:
- name: kubectl
  user:
    client-certificate-data: Q2VydGlmaWNhdGU6CiAgICBEYXRhOgogICAgICAgIFZlcnNpb246IDMgKDB4MikKICAgICAgICBTZXJpYWwgTnVtYmVyOgogICAgICAgICAgICBiNzo3Njo4Mjo0NDo4ZjpmZ
    。。。。。。

查看完整配置,找到当前使用的用户

kubectl config view --minify

mini版,等价于把~/.kube/config 示例进行简化

示例:

bash 复制代码
[root@caas-dc4-bastion ~]# kubectl config view --minify
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://[fd00:78:200:3305::16:14]:2602
  name: cluster.local
contexts:
- context:
    cluster: cluster.local
    user: kubectl
  name: kubectl-to-cluster.local
current-context: kubectl-to-cluster.local
kind: Config
preferences: {}
users:
- name: kubectl
  user:
    client-certificate-data: DATA+OMITTED
    client-key-data: DATA+OMITTED

1.2 验证用户

bash 复制代码
# kubectl auth whoami
ATTRIBUTE   VALUE
Username    kubectl
Groups      [system:masters:20250715164013169 system:authenticated]

【用户身份分析】

  1. Username: kubectl

    这表明 kubeconfig 中配置的用户名是 kubectl。这通常是一个服务账号(ServiceAccount)或自定义的用户名。

  2. Groups: system:masters:xxx
    system:masters 是 Kubernetes 中的超级用户组,相当于集群的 root 用户

system:masters:20250715164013169 看起来是一个带时间戳的特定组名,可能是通过 OIDC 或 Webhook 认证后赋予的组

system:authenticated 表示用户已通过认证(这是一个内置组,所有认证用户都属于该组)

【权限分析】

由于用户属于 system:masters 组,这意味着:

  • 该用户拥有集群管理员权限

  • 可以执行任何操作,不受 RBAC 限制

这就是为什么你能成功执行 kubectl get po

2. user的认证方式

常见的认证方式:

认证方式 每次鉴权 额外开销 典型场景
客户端证书 ✅ 每次都验证证书 较低(TLS握手) 长期运维人员
Token ✅ 每次都验证token 极低 CI/CD、服务账号
OIDC ✅ 每次都验证token 中等(需验证IDP) 企业SSO
Webhook ✅ 每次都调用webhook 较高(外部调用) 自定义认证

2.1 客户端证书认证:

yaml 复制代码
users:
- name: kubectl
  user:
    client-certificate: /path/to/cert.pem
    client-key: /path/to/key.pem

client-certificate-data 和 client-key-data 与 client-certificate/client-key 是相同内容,前者是字符串,后者是外部证书文件。

2.2 Token 认证:

yaml 复制代码
users:
- name: kubectl
  user:
    token: <token>

2.3 OIDC 认证(可能性较大,因为组名包含时间戳):

yaml 复制代码
users:
- name: kubectl
  user:
    exec:
      command: kubectl
      args: ["oidc-login", "get-token"]
相关推荐
专业白嫖怪4 小时前
什么是docker
运维·docker·容器
Plastic garden8 小时前
Docker(1)
运维·docker·容器
gs8014010 小时前
网络隐形杀手:从 Could not connect to SMTP host 报错深度剖析 Docker MTU 黑洞理论与实战
网络·docker·容器
程序猿阿伟10 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
java_logo11 小时前
2026 Docker 国内镜像加速配置教程
运维·docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像国内库
IT策士12 小时前
Docker从0到1再到 Kubernetes 实战:第15篇Compose 中的服务依赖、健康检查与启动顺序
docker·容器·kubernetes
Waay12 小时前
K8s Deployment 滚动更新与回滚深度详解(含踩坑实录+生产选型原理)
云原生·容器·kubernetes
顾默@12 小时前
双系统Ubuntu18.04升级22.04,安装docker进行openclaw安装
运维·docker·容器
蜀道山老天师13 小时前
Docker Compose 多容器编排实战:LNMP、Tomcat 集群、云桌面、Portainer、Zabbix 一键部署
运维·docker·容器·tomcat·zabbix
见牛羊14 小时前
docker理解
java·docker·容器