看来我的AKS集群无法执行对k8s api的基本请求,即对集群使用集群内令牌。当我在本地计算机上使用相同的代码时,例如config.load_kube_config
,一切正常。
我正在使用python k8s客户端11.0.0,并且正在通过config.load_incluster_config()
加载配置。我收到以下错误:
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}
当尝试简单列出我的豆荚时(使用client.list_namespaced_pod
)。我也尝试执行原始的get请求,但结果相同。
我试图扩展集群角色以专门访问资源,这里是我的clusterrole和clusterrolebinding:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: clusterrolename
rules:
- apiGroups:
- ""
resources:
- pods
- namespaces
verbs:
- get
- list
- apiGroups:
- metrics.k8s.io
resources:
- '*'
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: clusterrolebindingname
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: clusterrolename
subjects:
- kind: ServiceAccount
name: default
namespace: mynamespace
但是我总是有相同的结果。
相同的方法在linux和Windows节点上无法同等地发挥作用。
以前,在Linux机器(纯linux群集)上成功使用了完全相同的方法。
与SDK版本有关吗? 集群中可能有所不同吗? 有谁知道我如何检索任何特定ServiceAccount的授权列表?
答案 0 :(得分:1)
您可以使用以下命令检查特定名称空间中服务帐户的特定权限
kubectl auth can-i get pods --as=system:serviceaccount:mynamespace:default -n mynamespace
如果以上命令返回no
,则表示该服务帐户没有正确的RBAC。
要列出服务帐户的所有权限,请使用
kubectl auth can-i --list --as=system:serviceaccount:mynamespace:default
要了解更多信息,请使用kubectl auth can-i -h
答案 1 :(得分:1)
豆荚确实拥有必要的权利。错误在于api_client实例的错误初始化,我只是调用client.Configuration()单独执行了此操作。
我解决了避免初始化api_client实例,而直接从client.CoreV1Api导入一个实例的问题。