【发布时间】:2018-12-23 16:11:39
【问题描述】:
我试图更好地理解 Kubernetes 中的 RBAC。遇到这种意外情况,使用kubectl auth can-i进行授权测试和实际结果不同。简而言之,按照这个测试,新创建的用户应该无法获取 pod,但是这个用户实际上可以获取 pod。
版本:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:53:20Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
为有问题的用户配置kubectl:
$ kubectl config view --minify
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/master/ca.pem
server: https://192.168.1.111:6443
name: jdoe
contexts:
- context:
cluster: jdoe
user: jdoe
name: jdoe
current-context: jdoe
kind: Config
preferences: {}
users:
- name: jdoe
user:
client-certificate: /home/master/jdoe.pem
client-key: /home/master/jdoe-key.pem
针对授权层的测试表明 jdoe 无法获取 pod。
$ kubectl auth can-i get pods --as jdoe
no
但是,jdoe 可以获取 pod:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx nginx-ingress-controller-87554c57b-ttgwp 1/1 Running 0 5h
kube-system coredns-5f7d467445-ngnvf 1/1 Running 0 1h
kube-system coredns-5f7d467445-wwf5s 1/1 Running 0 5h
kube-system weave-net-25kq2 2/2 Running 0 5h
kube-system weave-net-5njbh 2/2 Running 0 4h
切换回管理上下文后,从身份验证层得到了类似的结果:
$ kubectl config use-context kubernetes
Switched to context "kubernetes".
$ kubectl config view --minify
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.1.111:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: admin
name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate: /home/master/admin.pem
client-key: /home/master/admin-key.pem
从这里开始,用户 jdoe 也不应该获得 pod。
$ kubectl auth can-i get pods --as jdoe
no
kubectl config view的输出
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/master/ca.pem
server: https://192.168.1.111:6443
name: jdoe
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.1.111:6443
name: kubernetes
- cluster:
certificate-authority: /home/master/ca.pem
server: https://192.168.1.111:6443
name: master
contexts:
- context:
cluster: jdoe
user: jdoe
name: jdoe
- context:
cluster: kubernetes
user: admin
name: kubernetes
- context:
cluster: master
user: master
name: master
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate: /home/master/admin.pem
client-key: /home/master/admin-key.pem
- name: jdoe
user:
client-certificate: /home/master/jdoe.pem
client-key: /home/master/jdoe-key.pem
- name: master
user:
client-certificate: /home/master/master.pem
client-key: /home/master/master-key.pem
【问题讨论】:
标签: kubernetes