gpt4 book ai didi

go - clientset.AuthorizationV1().SelfSubjectAccessReviews().Create() 的意外结果

转载 作者:行者123 更新时间:2023-12-01 20:22:12 25 4
gpt4 key购买 nike

我正在尝试合并 kubectl auth can-i logic进入我的代码库,但是当代码运行时,结果不是我所期望的。
我有 2 个用户( minikube / jenny )。 迷你库 具有完整的集群范围访问权限,但 珍妮 仅限于命名空间角色/角色绑定(bind):

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 jenny
yes
$ kubectl auth can-i create pod --context jenny -n default
no - RBAC: role.rbac.authorization.k8s.io "jenny-pod-creator" not found
但在我的代码中, 珍妮 没有提出创建权限。 response.Status.Allowed总是 false对于 珍妮 (对于 minikube 总是如此)
package main

import (
"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)
}

最佳答案

在 Kubernetes 中有一个种类和资源的概念。 Difference between Kubernetes Objects and Resources 中有很好的解释在 API Conventions ,如果你好奇想了解更多。
简而言之:

  • Kind 是告诉客户端它代表什么样的实体的类型,它总是大写的,Pod例如。
  • Resource 是通过 HTTP 发送的此类实体的表示形式,并且始终为小写复数形式。

  • 在您的情况下,您正在使用 Resource,因此您需要更改 Pod (实物)至 pods (资源),它应该给你 true对于 jenny .至于 minikube,你总是得到 true因为该用户是 system:admin,它具有对集群的完全访问权限。

    关于go - clientset.AuthorizationV1().SelfSubjectAccessReviews().Create() 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62791713/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com