elasticsearch Filbeat 7.3.2存在clusterrole问题的serviceaccount
我的Kubernetes用户不是群集中的管理员。所以我无法为filebeat服务帐户创建集群角色绑定。我在filebeat中使用自动发现。如果没有clusterrole,有人能帮助我实现这一目标吗elasticsearch Filbeat 7.3.2存在clusterrole问题的serviceaccount,elasticsearch,kubernetes,elastic-stack,filebeat,rbac,elasticsearch,Kubernetes,Elastic Stack,Filebeat,Rbac,我的Kubernetes用户不是群集中的管理员。所以我无法为filebeat服务帐户创建集群角色绑定。我在filebeat中使用自动发现。如果没有clusterrole,有人能帮助我实现这一目标吗 apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: logging labels: k8s-app: filebeat kubernetes.io/cluster-service
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: logging
labels:
k8s-app: filebeat
kubernetes.io/cluster-service: "true"
data:
filebeat.yml: |-
setup.dashboards.enabled: false
setup.template.enabled: true
setup.template.settings:
index.number_of_shards: 1
filebeat.modules:
- module: system
syslog:
enabled: true
#var.paths: ["/var/log/syslog"]
auth:
enabled: true
#var.paths: ["/var/log/authlog"]
filebeat.autodiscover:
providers:
- type: kubernetes
templates:
- condition:
equals:
kubernetes.namespace: microsrv-test
config:
- type: docker
json.keys_under_root: true
json.add_error_key: true
json.message_key: log
containers:
ids:
- "${data.kubernetes.container.id}"
processors:
- drop_event:
when.or:
- and:
- regexp:
message: '^\d+\.\d+\.\d+\.\d+ '
- equals:
fileset.name: error
- and:
- not:
regexp:
message: '^\d+\.\d+\.\d+\.\d+ '
- equals:
fileset.name: access
- add_cloud_metadata:
- add_kubernetes_metadata:
- add_docker_metadata:
output.elasticsearch:
hosts: ["elasticsearch:9200"]
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: filebeat
namespace: logging
labels:
k8s-app: filebeat
kubernetes.io/cluster-service: "true"
spec:
template:
metadata:
labels:
k8s-app: filebeat
kubernetes.io/cluster-service: "true"
spec:
serviceAccountName: filebeat
terminationGracePeriodSeconds: 30
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:7.3.2
imagePullPolicy: Always
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
env:
- name: ELASTICSEARCH_HOST
value: elasticsearch
- name: ELASTICSEARCH_PORT
value: "9200"
- name: KIBANA_HOST
value: kibana
- name: KIBANA_PORT
value: "5601"
securityContext:
runAsUser: 0
volumeMounts:
- name: config
mountPath: /etc/filebeat.yml
readOnly: true
subPath: filebeat.yml
- name: data
mountPath: /usr/share/filebeat/data
- name: varlog
mountPath: /var/log
readOnly: true
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
- name: dockersock
mountPath: /var/run/docker.sock
volumes:
- name: config
configMap:
defaultMode: 0600
name: filebeat-config
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
- name: dockersock
hostPath:
path: /var/run/docker.sock
- name: data
emptyDir: {}
---
集群角色和角色绑定
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: filebeat
subjects:
- kind: ServiceAccount
name: filebeat
namespace: logging
roleRef:
kind: ClusterRole
name: filebeat
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: filebeat
labels:
k8s-app: filebeat
rules:
- apiGroups: [""] # "" indicates the core API group
resources:
- namespaces
- pods
verbs:
- get
- watch
- list
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: filebeat
namespace: logging
labels:
k8s-app: filebeat
我已尝试创建非群集角色和角色绑定,如下所示
apiVersion: v1
kind: ServiceAccount
metadata:
name: filebeat
namespace: logging
labels:
k8s-app: filebeat
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: filebeat
namespace: logging
labels:
k8s-app: filebeat
rules:
- apiGroups: [""] # "" indicates the core API group
resources:
- pods
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: filebeat
namespace: logging
subjects:
- kind: ServiceAccount
name: filebeat
namespace: logging
roleRef:
kind: Role
name: filebeat
apiGroup: rbac.authorization.k8s.io
但是我犯了一个错误
正在执行资源同步err kubernetes api:403 pods失败
禁止:用户“系统:服务帐户:xxxxx:filebeat”无法列出
*v1.PodList集群范围内API组“”中的资源“pods”|
不幸的是,它无法按您希望的方式工作,并且您收到的错误完美地表明了这一点:
Performing a resource sync err kubernetes api: Failure 403 pods is forbidden: User "system:serviceaccount:xxxxx:filebeat" cannot list resource "pods" in API group "" at the cluster scope for *v1.PodList|
请注意最重要的部分:在集群范围内
。您还可以通过执行命令来检查是否允许某个操作。有关这方面的更多信息,请参阅
这就引出了以下两者之间的区别:
RBAC角色
或集群角色
包含表示一组
权限。权限纯粹是附加的(没有“拒绝”
规则)
角色始终在特定命名空间内设置权限;
创建角色
时,必须指定它所属的命名空间
在
ClusterRole
,相反,是一种无名称空间的资源。这个
资源具有不同的名称(Role
和ClusterRole
),因为
Kubernetes对象始终必须使用名称空间或不使用名称空间
名称空间;不可能两者都有
ClusterRoles
有多种用途。您可以使用ClusterRole
来:
- 定义命名空间资源的权限,并在单个命名空间内授予权限
- 定义对命名空间资源的权限,并跨所有命名空间授予权限
- 定义群集范围资源的权限
如果要在命名空间中定义角色,请使用角色;如果你
要在集群范围内定义角色,请使用ClusterRole
以及:
角色绑定将角色中定义的权限授予用户或角色
用户集。它包含一个主题列表(用户、组或服务)
帐户),以及对被授予的角色的引用。ARoleBinding
授予特定命名空间内的权限,而
ClusterRoleBinding
授予访问群集范围的权限
RoleBinding
可以引用同一命名空间中的任何角色。
或者,RoleBinding
可以引用ClusterRole
并绑定该角色
ClusterRole
到RoleBinding
的命名空间。如果你想绑定一个
ClusterRole
对于集群中的所有名称空间,使用
集群角色绑定
因此,不可能通过使用Role
和RoleBinding
获得集群作用域权限
您很可能需要请求管理员帮助您解决此问题。Hello@riteshmaurya。您能展示一下您编辑问题时尝试的角色
和角色绑定
吗?@WytrzymałyWiktor请立即查看hello@riteshmaurya。是这样吗?