You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS中ECK部署的ElasticSearch加入root组的原因及解决方法

Elasticsearch容器用户属于root组的排查与解决

问题场景

在AKS集群通过ECK部署Elasticsearch 8.17.3后,Microsoft Defender告警容器以root运行。排查发现,容器内的elasticsearch用户(uid/gid 1000)额外属于root组(gid 0),尽管Pod和StatefulSet已配置fsGroup:1000且符合ECK安全上下文规范。

排查过程

  1. 集群与ECK部署

    • 新建AKS集群后,安装ECK 2.16.1的CRDs和Operator:
      kubectl create -f https://download.elastic.co/downloads/eck/2.16.1/crds.yaml
      kubectl apply -f https://download.elastic.co/downloads/eck/2.16.1/operator.yaml
      
    • 部署Elasticsearch集群的配置文件:
      apiVersion: elasticsearch.k8s.elastic.co/v1
      kind: Elasticsearch
      metadata:
        name: quickstart
      spec:
        version: 8.17.3
        nodeSets:
        - name: default
          config:
            node.store.allow_mmap: false
          count: 3
          volumeClaimTemplates:
          - metadata:
              name: elasticsearch-data
            spec:
              accessModes:
              - ReadWriteOnce
              resources:
                requests:
                  storage: 5Gi
              storageClassName: default
      
  2. 安全上下文验证

    • 对照ECK安全规范,配置的安全上下文符合要求:
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
          - ALL
        privileged: false
        readOnlyRootFilesystem: true 
      
    • 已通过volumeClaimTemplates挂载elasticsearch-data目录,Pod和StatefulSet的fsGroup均为1000。
  3. 容器内用户组检查

    • 进入容器执行id命令,确认用户组包含root:
      kubectl exec -it quickstart-es-default-0 -- bash
      elasticsearch@quickstart-es-default-0:~$ id
      uid=1000(elasticsearch) gid=1000(elasticsearch) groups=1000(elasticsearch),0(root)
      

解决方法

该问题源于Elasticsearch官方镜像默认将elasticsearch用户加入root组,用于兼容部分文件权限场景。可通过以下步骤修复:

  1. 自定义Pod安全上下文
    在Elasticsearch资源的nodeSets中添加podTemplate,明确指定用户组并强制覆盖补充组:

    apiVersion: elasticsearch.k8s.elastic.co/v1
    kind: Elasticsearch
    metadata:
      name: quickstart
    spec:
      version: 8.17.3
      nodeSets:
      - name: default
        config:
          node.store.allow_mmap: false
        count: 3
        podTemplate:
          spec:
            securityContext:
              runAsUser: 1000
              runAsGroup: 1000
              supplementalGroups: [1000]
              fsGroup: 1000
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
              privileged: false
              readOnlyRootFilesystem: true
        volumeClaimTemplates:
        - metadata:
            name: elasticsearch-data
          spec:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 5Gi
            storageClassName: default
    

    通过supplementalGroups: [1000]强制仅保留elasticsearch组,避免自动添加root组。

  2. 验证修复效果
    重新部署后,进入容器执行id命令,确认用户组仅包含1000:

    kubectl exec -it quickstart-es-default-0 -- id
    uid=1000(elasticsearch) gid=1000(elasticsearch) groups=1000(elasticsearch)
    
  3. 权限兼容处理
    若修改后出现文件权限问题,需确保:

    • PVC挂载目录的权限由fsGroup:1000自动设置为1000:1000
    • 如需访问特定系统文件,通过initContainer调整权限,而非依赖root组。

内容的提问来源于stack exchange,提问作者Gruss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:34:59