Kubernetes集群内身份验证

时间:2020-05-29 15:36:35

标签: python kubernetes azure-aks

看来我的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的授权列表?

2 个答案:

答案 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导入一个实例的问题。