文章目录
- 概述
- 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]
【用户身份分析】
-
Username: kubectl
这表明 kubeconfig 中配置的用户名是
kubectl。这通常是一个服务账号(ServiceAccount)或自定义的用户名。 -
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"]