elasticsearch Filbeat 7.3.2存在clusterrole问题的serviceaccount,elasticsearch,kubernetes,elastic-stack,filebeat,rbac,elasticsearch,Kubernetes,Elastic Stack,Filebeat,Rbac" /> elasticsearch Filbeat 7.3.2存在clusterrole问题的serviceaccount,elasticsearch,kubernetes,elastic-stack,filebeat,rbac,elasticsearch,Kubernetes,Elastic Stack,Filebeat,Rbac" />

elasticsearch Filbeat 7.3.2存在clusterrole问题的serviceaccount

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

我的Kubernetes用户不是群集中的管理员。所以我无法为filebeat服务帐户创建集群角色绑定。我在filebeat中使用自动发现。如果没有clusterrole,有人能帮助我实现这一目标吗

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

以及:

角色绑定将角色中定义的权限授予用户或角色 用户集。它包含一个主题列表(用户、组或服务) 帐户),以及对被授予的角色的引用。A
RoleBinding
授予特定命名空间内的权限,而
ClusterRoleBinding
授予访问群集范围的权限

RoleBinding
可以引用同一命名空间中的任何角色。 或者,
RoleBinding
可以引用
ClusterRole
并绑定该角色
ClusterRole
RoleBinding
的命名空间。如果你想绑定一个
ClusterRole
对于集群中的所有名称空间,使用
集群角色绑定

因此,不可能通过使用
Role
RoleBinding
获得集群作用域权限


您很可能需要请求管理员帮助您解决此问题。

Hello@riteshmaurya。您能展示一下您编辑问题时尝试的
角色
角色绑定
吗?@WytrzymałyWiktor请立即查看hello@riteshmaurya。是这样吗?