调用时是什么控制权限?
kubectl logs pod-name?
我已经尝试过从控制器节点上调用kubelet。
sudo curl -k --key /var/lib/kubernetes/cert-k8s-apiserver-key.pem --cert /var/lib/kubernetes/cert-k8s-apiserver.pem https://worker01:10250/pods
这在Forbidden (user=apiserver, verb=get, resource=nodes, subresource=proxy)中失败了。
我使用管理键和证书尝试了同一个调用,它成功了,并返回了一个健康的JOSN。
我猜这就是为什么kubectl logs pod-name不能工作。
更多的阅读表明,证书的CN决定了经过身份验证和授权的用户。
是什么控制用户是否有权访问kubelet?
背景
我正在使用下面的说明( K8s )设置一个库伯奈特不那么艰难的道路与Ansible集群
发布于 2021-12-26 02:03:00
简短回答
简单地说,您需要通过创建一个apiserver和ClusterRoleBinding来授予用户ClusterRole对资源ClusterRoleBinding的访问权限。
较长解释
库伯内特斯有很多资源。有关的建议如下:
角色和ClusterRoles是相似的,除了ClusterRoles不是名称空间。
ClsuterRole可以与ClusterRoleBinding对象关联(绑定)到用户。
Kubelet提供了一些资源(也许更多)
nodes/proxynodes/statsnodes/lognodes/specnodes/metrics要做到这一点,您需要创建一个允许访问节点上的资源和子资源的ClusterRole。
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:kube-apiserver-to-kubelet
rules:
- apiGroups:
- ""
resources:
- nodes/proxy
- nodes/stats
- nodes/log
- nodes/spec
- nodes/metrics
verbs:
- "*"
EOF然后将此ClusteRole与用户关联起来。在我的例子中,kube使用的是带有CN=apiserver的证书。
cat <<EOF | kubectl apply --kubeconfig admin.kubeconfig -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:kube-apiserver
namespace: ""
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:kube-apiserver-to-kubelet
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: apiserver
EOFhttps://stackoverflow.com/questions/70483191
复制相似问题