【问题标题】:log4j temporary fix in elasticsearch helm chart using Dlog4j2.formatMsgNoLookups使用 Dlog4j2.formatMsgNoLookups 在 elasticsearch helm 图表中临时修复 log4j
【发布时间】:2022-01-16 06:15:38
【问题描述】:

我尝试使用 helm chart 在 AKS 中设置弹性搜索集群,但由于 log4j 漏洞,我想将其设置为选项 -Dlog4j2.formatMsgNoLookups 设置为 true。当我在 helm 命令中传递参数时,出现未知标志错误。 参考:https://artifacthub.io/packages/helm/elastic/elasticsearch/6.8.16

helm upgrade  elasticsearch elasticsearch --set imageTag=6.8.16 esJavaOpts "-Dlog4j2.formatMsgNoLookups=true"
Error: unknown shorthand flag: 'D' in -Dlog4j2.formatMsgNoLookups=true

我也尝试在values.yaml文件中添加以下内容

esConfig: {}
#  elasticsearch.yml: |
#    key:
#      nestedkey: value
log4j2.properties: |
  -Dlog4j2.formatMsgNoLookups = true

但这些值并未添加到 /usr/share/elasticsearch/config/jvm.options/usr/share/elasticsearch/config/log4j2.properties 或环境变量中。

【问题讨论】:

    标签: elasticsearch kubernetes log4j kubernetes-helm elk


    【解决方案1】:

    首先,如果这是您到达这里的原因,这里有一个很好的关于缓解Log4j2 security issue 的知识来源。

    以下是为 Elasticsearch 图表编写 values.yaml 的方法:

    esConfig:
      log4j2.properties: |
        logger.discovery.name = org.elasticsearch.discovery
        logger.discovery.level = debug
    

    Helm 会生成一个 ConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: elasticsearch-master-config
      ...
    data:
      log4j2.properties: |
        logger.discovery.name = org.elasticsearch.discovery
        logger.discovery.level = debug
    

    Log4j 配置将安装到您的 Elasticsearch 中:

    ...
    volumeMounts:
      ...
      - name: esconfig
        mountPath: /usr/share/elasticsearch/config/log4j2.properties
        subPath: log4j2.properties
    

    更新:如何设置和添加多个配置文件。

    您可以在 values.yaml 中设置其他 ES 配置文件,您在此处指定的所有文件都将成为 ConfigMap 的一部分,每个文件都将挂载到 Elasticsearch 容器中的 /usr/share/elasticsearch/config/。示例:

    esConfig:
      elasticsearch.yml: |
        node.master: true
        node.data: true
    
      log4j2.properties: |
        logger.discovery.name = org.elasticsearch.discovery
        logger.discovery.level = debug
    
      jvm.options: |
        # You can also place a comment here.
        -Xmx1g -Xms1g -Dlog4j2.formatMsgNoLookups=true
    
      roles.yml: |
        click_admins:
          run_as: [ 'clicks_watcher_1' ]
          cluster: [ 'monitor' ]
          indices:
          - names: [ 'events-*' ]
            privileges: [ 'read' ]
            field_security:
              grant: ['category', '@timestamp', 'message' ]
            query: '{"match": {"category": "click"}}'
    

    以上所有配置仅用于说明如何在 values.yaml 中添加多个配置文件。请用您自己的设置替换这些配置。

    【讨论】:

    • 谢谢,我可以再问一个吗?目前的配置文件是:[elasticsearch@elasticsearch-master-0 ~]$ ls /usr/share/elasticsearch/config/ elasticsearch.keystore elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles 虽然我在 log4j2.properties 文件中添加了配置参数,但我真的很想在 jvm.options 中添加配置但找不到如何做到这一点。你能帮我吗,因为我不确定配置的优先级?
    • 当然,请查看有关如何添加其他可配置文件的更新答案。
    • 这个答案在两个方面是不正确的。 log4j2 标志应该在 jvm 设置中设置,不建议像这样覆盖 jvm.options 文件。参考:elastic.co/guide/en/elasticsearch/reference/current/…
    【解决方案2】:

    正如我在弹性存储库中看到的更新 values.yml

    esConfig: {}
    log4j2.properties:|
    键=值

    可能需要取消注释 log4j2.properties 部分。

    【讨论】:

      【解决方案3】:

      如果您更新并在 esConfig 下放置一个值,则需要删除大括号

      esConfig:
      log4j2.properties: |
      key = value
      

      【讨论】:

        【解决方案4】:

        我宁愿建议更改 /config/jvm.options 文件并在最后添加

        -Dlog4j2.formatMsgNoLookups=true

        【讨论】:

        【解决方案5】:

        舵图has an option设置java选项。

        esJavaOpts: "" # example: "-Xmx1g -Xms1g"
        

        在你的情况下,这样设置应该是解决方案:

        esJavaOpts: "-Dlog4j2.formatMsgNoLookups=true"
        

        【讨论】:

        • The ES_JAVA_OPTS variable overrides all other JVM options. We do not recommend using ES_JAVA_OPTS in production. - Go to the last lines here
        猜你喜欢
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2022-01-17
        • 2022-01-19
        • 1970-01-01
        • 2021-05-31
        • 2021-05-02
        • 1970-01-01
        相关资源
        最近更新 更多