我正在尝试将kubectl auth can-i 逻辑合并到我的代码库中,但是当代码运行时,结果不是我所期望的。我有 2 个用户(minikube / jenny)。minikube具有完整的集群范围访问权限,但jenny仅限于命名空间角色/角色绑定:kubectl create role "jenny-pod-creator" --verb=create --resource=pod -n "jenny"kubectl create rolebinding "jenny-creator-binding" --role="jenny-pod-creator" --user="jenny" --namespace="jenny"使用 cli,我得到了我期望的结果:$ kubectl auth can-i create pod --context jenny -n jennyyes$ kubectl auth can-i create pod --context jenny -n defaultno - RBAC: role.rbac.authorization.k8s.io "jenny-pod-creator" not found但在我的代码中,珍妮没有提出创建权限。response.Status.Allowed始终false适用于jenny (对于minikube始终适用)package mainimport ( "context" "fmt" "log" "os" "path/filepath" authorizationv1 "k8s.io/api/authorization/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd")func main() { kubeconfig := filepath.Join( os.Getenv("HOME"), ".kube", "config", ) config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err != nil { log.Fatal(err) } clientset, err := kubernetes.NewForConfig(config) if err != nil { log.Fatal(err) } a := clientset.AuthorizationV1().SelfSubjectAccessReviews() sar := &authorizationv1.SelfSubjectAccessReview{ Spec: authorizationv1.SelfSubjectAccessReviewSpec{ ResourceAttributes: &authorizationv1.ResourceAttributes{ Namespace: "jenny", Verb: "create", Resource: "Pod", }, }, } response, err := a.Create(context.TODO(), sar, metav1.CreateOptions{}) if err != nil { log.Fatal(err) } fmt.Printf("create resource POD is %v \n", response.Status.Allowed)}
1 回答

不负相思意
TA贡献1777条经验 获得超10个赞
在 Kubernetes 中有一个种类和资源的概念。如果您想了解更多信息,请在 Kubernetes 对象和资源之间的区别和API 约定中很好地解释它。
简而言之:
Kind是告诉客户端它代表什么样的实体的类型,例如,它总是大写
Pod
。Resource是通过 HTTP 发送的此类实体的表示形式,并且始终是小写复数形式。
在您的情况下,您正在使用Resource,因此您需要将Pod
( Kind ) 更改为pods
( resource ),这应该为您true
提供jenny
. 至于 minikube,你总是true
因为那个用户是 system:admin,它拥有对集群的完全访问权限。
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报
0/150
提交
取消