Kubernetes 无法使用 API 查询 kubernetes secret
Kubernetes unable to query kubernetes secret using API
我正在尝试使用 API 查询 kubernetes secret
,并且我使用以下命令
向帐户 "default:default"
提供了所需的权限
kubectl create rolebinding default-viewer \
--clusterrole=view \
--serviceaccount=default:default \
--namespace=default
我能够使用以下命令
在命名空间“default”下查询 pods
curl -v -s https://10.xx.xx.xx:6443/api/v1/namespaces/default/pods --header "Authorization: Bearer $TOKEN" --cacert /tmp/ca.crt
但是,当我尝试从命名空间 "default"
中获取 secrets
时,出现以下错误
curl -v -s https://10.xx.xx.xx:6443/api/v1/namespaces/default/secrets --header "Authorization: Bearer $TOKEN" --cacert /tmp/ca.crt
错误
"message": "secrets is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"secrets\" in API group \"\" in the namespace \"default\"",
我不确定我在这里错过了什么?任何帮助
您已使用群集角色 view
提供对默认命名空间的服务帐户 default
的访问权限。似乎(至少在我的集群中)集群角色 view
不提供与秘密相关的任何权限。
kubectl describe clusterrole view |grep -iEw 'secret|pods'
pods/log [] [] [get list watch]
pods/status [] [] [get list watch]
pods [] [] [get list watch]
如果你运行上面的命令和上面命令的输出是一样的,那么这就解释了为什么你可以查询pods
而不是secrets
。下面的命令打印其中包含字符串“secret”的集群角色。
kubectl get clusterrole -o name |while read cr; do k describe $cr |grep -q secret && echo "$cr is having secret"; done
clusterrole.rbac.authorization.k8s.io/admin is having secret
clusterrole.rbac.authorization.k8s.io/edit is having secret
clusterrole.rbac.authorization.k8s.io/system:aggregate-to-edit is having secret
clusterrole.rbac.authorization.k8s.io/system:controller:expand-controller is having secret
clusterrole.rbac.authorization.k8s.io/system:controller:persistent-volume-binder is having secret
clusterrole.rbac.authorization.k8s.io/system:kube-controller-manager is having secret
clusterrole.rbac.authorization.k8s.io/system:node is having secret
您可能需要创建一个新的 clusterrole/role 或修改现有的 clusterrole/role。
此外, 您可以 运行 使用 --raw
的 kubectl 来验证您的 API query/URI。这将从等式中删除证书、密钥、cacert 和令牌。例如:
kubectl get --raw https://10.xx.xx.xx:6443/api/v1/namespaces/default/secrets --as system:serviceaccount:default:default
我正在尝试使用 API 查询 kubernetes secret
,并且我使用以下命令
"default:default"
提供了所需的权限
kubectl create rolebinding default-viewer \
--clusterrole=view \
--serviceaccount=default:default \
--namespace=default
我能够使用以下命令
在命名空间“default”下查询 pods curl -v -s https://10.xx.xx.xx:6443/api/v1/namespaces/default/pods --header "Authorization: Bearer $TOKEN" --cacert /tmp/ca.crt
但是,当我尝试从命名空间 "default"
中获取 secrets
时,出现以下错误
curl -v -s https://10.xx.xx.xx:6443/api/v1/namespaces/default/secrets --header "Authorization: Bearer $TOKEN" --cacert /tmp/ca.crt
错误
"message": "secrets is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"secrets\" in API group \"\" in the namespace \"default\"",
我不确定我在这里错过了什么?任何帮助
您已使用群集角色 view
提供对默认命名空间的服务帐户 default
的访问权限。似乎(至少在我的集群中)集群角色 view
不提供与秘密相关的任何权限。
kubectl describe clusterrole view |grep -iEw 'secret|pods'
pods/log [] [] [get list watch]
pods/status [] [] [get list watch]
pods [] [] [get list watch]
如果你运行上面的命令和上面命令的输出是一样的,那么这就解释了为什么你可以查询pods
而不是secrets
。下面的命令打印其中包含字符串“secret”的集群角色。
kubectl get clusterrole -o name |while read cr; do k describe $cr |grep -q secret && echo "$cr is having secret"; done
clusterrole.rbac.authorization.k8s.io/admin is having secret
clusterrole.rbac.authorization.k8s.io/edit is having secret
clusterrole.rbac.authorization.k8s.io/system:aggregate-to-edit is having secret
clusterrole.rbac.authorization.k8s.io/system:controller:expand-controller is having secret
clusterrole.rbac.authorization.k8s.io/system:controller:persistent-volume-binder is having secret
clusterrole.rbac.authorization.k8s.io/system:kube-controller-manager is having secret
clusterrole.rbac.authorization.k8s.io/system:node is having secret
您可能需要创建一个新的 clusterrole/role 或修改现有的 clusterrole/role。
此外, 您可以 运行 使用 --raw
的 kubectl 来验证您的 API query/URI。这将从等式中删除证书、密钥、cacert 和令牌。例如:
kubectl get --raw https://10.xx.xx.xx:6443/api/v1/namespaces/default/secrets --as system:serviceaccount:default:default