【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"]
相关推荐
十月南城2 小时前
结语与展望——云原生、Serverless、AIOps的趋势与融合
云原生·serverless
帮我吧智能服务平台2 小时前
深度拆解:“帮我吧”如何实现PaaS化架构下的“随需而建”
云原生·架构·paas
Bruce20489982 小时前
2026 云原生安全:Rust 编写微服务网关与零信任实践
安全·云原生·rust
万象.2 小时前
docker容器编排(Compose)
docker·容器
步步为营DotNet2 小时前
探索.NET 11 中 Native AOT 在云原生性能优化的极致应用
云原生·性能优化
kft13143 小时前
Docker 部署 3 节点 Consul 集群
docker·容器·consul
360智汇云3 小时前
360 智汇云 Kafka 云原生架构演进
云原生·架构·kafka
returnthem5 小时前
K8S核心组件
云原生·容器·kubernetes
AI自动化工坊12 小时前
DeerFlow 2.0实战指南:生产级AI Agent框架的Docker化部署与并行编排
人工智能·docker·ai·容器·开源