将Kubernetes用户链接到Unix用户

时间:2018-09-28 20:45:21

标签: kubernetes

我正在使用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

任何建议将不胜感激。

1 个答案:

答案 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权限。