【发布时间】:2021-08-11 17:41:03
【问题描述】:
我正在尝试在自定义命名空间中设置 fluent-bit。我采取了以下步骤(为了清楚起见,这里省略了很多):
我这样创建了服务帐户:
apiVersion: v1
kind: ServiceAccount
metadata:
name: k8s-logger
namespace: efk
然后我将该服务帐户绑定到标准“视图”ClusterRrole:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: k8s-logger
subjects:
- kind: ServiceAccount
name: k8s-logger
namespace: efk
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
最后,我创建了 fluent-bit DaemonSet 并告诉它使用“k8s-logger”ServiceAccount:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluent-bit
namespace: efk
spec:
template:
spec:
serviceAccount: k8s-logger
serviceAccountName: k8s-logger
.
.
.
(顺便说一句,如果有人知道 serviceAccount 和 serviceAccountName 之间的区别,我有兴趣了解)。
但是,我在 fluent-bit 日志中得到以下输出:
pods is forbidden: User "system.serviceaccount:efk:k8s-logger" cannot list resource "pods/var" in API group "" in the namespace "work"
当它不起作用时,我开始验证:
- Fluent-bit 正在使用自定义 ServiceAccount 进行连接:
我相信这是因为错误消息引用了
system.serviceaccount:efk:k8s-logger - 服务帐户存在并且在正确的命名空间中:
$ kubectl get serviceaccounts/k8s-logging --namespace=efk NAME SECRETS AGE k8s-logger 1 15h - ClusterRoleBinding 正确(引用正确的 ServiceAccount 和 ClusterRole):
$ kubectl describe clusterrolebinding/k8s-logging Name: k8s-logger Labels: <none> Annotations: <none> Role: Kind: ClusterRole Name: view Subjects: Kind Name Namespace ---- ---- --------- ServiceAccount k8s-logger efk - 最后,验证默认角色“view”是否拥有我需要的权限:
$ kubectl describe clusterrole/view Name: view Labels: kubernetes.io/bootstrapping=rbac-defaults PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [get list watch] pods/log [] [] [get list watch] pods/status [] [] [get list watch] . . .
此时我不知道如何进一步调试或找出问题所在。我通过:
- 使用我需要的权限创建自定义 ClusterRole(以防万一视图无法按我想象的方式工作)
- 在 DaemonSet 规范中仅使用 serviceAccount 或 serviceAccountName(以防其中一个破坏另一个)
但这些事情并没有改变任何东西。有没有人有其他想法?
【问题讨论】:
标签: kubernetes fluent-bit