为了账号安全,请及时绑定邮箱和手机立即绑定

clientset.AuthorizationV1().SelfSubjectAccess

clientset.AuthorizationV1().SelfSubjectAccess

Go
湖上湖 2022-06-13 16:50:01
我正在尝试将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 约定中很好地解释它。

简而言之:

  1. Kind是告诉客户端它代表什么样的实体的类型,例如,它总是大写Pod

  2. Resource是通过 HTTP 发送的此类实体的表示形式,并且始终是小写复数形式。

在您的情况下,您正在使用Resource,因此您需要将PodKind ) 更改为podsresource ),这应该为您true提供jenny. 至于 minikube,你总是true因为那个用户是 system:admin,它拥有对集群的完全访问权限。


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号