我正在使用RBAC来限制用户john
只能在其命名空间test-namespace
中工作并创建资源。
这是我所做的:
1)为用户生成证书并创建set-context
kubectl config set-credentials john --client-certificate=/home/john/.certs/employee.crt --client-key=/home/john/.certs/employee.key
kubectl config set-context john-context --cluster=minikube --namespace=test-namespace --user=john
2)创建一个角色来管理命名空间test-namespace
中的部署。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: test-namespace
name: deployment-authority
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["deployments", "replicasets", "pods"]
verbs: ["get", "create", "update", "patch", "delete"]
3)创建一个RoleBinding。
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: deployment-authority-binding-john
namespace: test-namespace
subjects:
- kind: User
name: john
apiGroup: ""
roleRef:
kind: Role
name: deployment-authority
apiGroup: ""
现在上述所有工作都可以完成,并且我可以运行命令kubectl --context=john-context run --image busybox busybox
,而不会出现任何问题。
现在,我的Kubernetes Master节点上还有一个Unix用户,用户名为john。我的目的是确保该用户登录后,他(约翰)可以在他的上下文john-context
中运行允许他使用的命令。我无法将UNIX用户链接到Kubernetes用户。
类似的东西:
john@kubernet:/$ id
uid=1002(john) gid=1002(john) groups=1002(john)
john@kubernet:/$ kubectl get po -n test-namespace
NAME READY STATUS RESTARTS AGE
grafana-67c6585fbd-tlr4n 1/1 Running 2 23h
但是,如果我切换到Unix计算机上的另一个用户,那么他/她将不能在命名空间test-namespace
中看到任何内容或执行任何操作。
su - tom
tom@kubernet:/$ id
uid=1004(tom) gid=1004(tom) groups=1004(tom)
john@kubernet:/$ kubectl get po -n test-namespace
You are not allowed to view resources in this namespace
任何建议将不胜感激。
答案 0 :(得分:0)
您可以仅通过用户主目录中的~/.kube/config
文件进行管理。在/home/john/.kube/config
中说,您会遇到类似这样的情况:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0xxxxxxxxo=
server: https://172.1.1.1:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
namespace: default
user: john
name: john@kubernetes
current-context: john@kubernetes
kind: Config
preferences: {}
users:
- name: john
user:
client-certificate-data: LS0txxxxo=
client-key-data: LS0xxxxx==
然后您将确保该文件仅具有600
权限。