Я пытаюсь включить 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 jenny
yes
$ kubectl auth can-i create pod --context jenny -n default
no - RBAC: role.rbac.authorization.k8s.io "jenny-pod-creator" not found
но в моем коде jenny не дает разрешения на создание. 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)
}