在离线环境中安装编辑

Elastic Stack 的某些组件需要额外的配置和本地依赖项才能在没有互联网访问的环境中部署。本指南概述了此设置方案,并帮助将现有文档与堆栈的各个部分联系起来。

如果您在离线环境中工作,并且您的订阅级别包含支持服务,请联系我们以请求 Elastic 文档的离线版本。

1. 自管型安装(Linux)编辑

请参阅每个 Elastic 组件的部分,了解在自管型 Linux 环境中进行离线安装的配置和依赖项。

1.1. Elasticsearch编辑

Elasticsearch 的离线安装可能需要额外的步骤才能访问某些功能。有关常规安装和配置指南,请参阅Elasticsearch 安装文档

具体来说

  • 要能够使用 GeoIP 处理器,请参阅GeoIP 处理器文档,了解有关下载和部署所需数据库的说明。
  • 请参阅机器学习,了解有关部署 Elastic Learned Sparse EncodeR (ELSER) 自然语言处理 (NLP) 模型和其他经过训练的机器学习模型的说明。

1.2. Kibana编辑

Kibana 的离线安装可能需要在本地网络中使用许多其他服务才能访问某些功能。有关常规安装和配置指南,请参阅Kibana 安装文档

具体来说

  • 要能够使用 Kibana 地图可视化,您需要设置和配置Elastic 地图服务
  • 要能够使用 Kibana 示例数据、安装或更新数百条预构建的警报规则以及探索可用的数据集成,您需要设置和配置Elastic 软件包注册表
  • 要为 Endpoint Security 代理提供检测规则更新,您需要设置和配置Elastic Endpoint 工件存储库
  • 要访问企业搜索功能(除了 Elasticsearch 的常规搜索功能之外),您需要设置和配置企业搜索
  • 要访问 APM 集成,您需要设置和配置Elastic APM

1.3. Beats编辑

Elastic Beats 是轻量级数据传送器。它们在离线场景中不需要任何独特的设置。要了解更多信息,请参阅Beats 文档

1.4. Logstash编辑

Logstash 是一款通用的数据传送和处理应用程序。它在离线场景中不需要任何独特的设置。要了解更多信息,请参阅Logstash 文档

1.5. Elastic Agent编辑

Elastic Agent 的离线安装在大多数用例中都依赖于Elastic 软件包注册表Elastic 工件注册表。代理本身相当轻量级,并且仅在其配置需要时才安装依赖项。在与这些依赖项的连接方面,Elastic Agent 需要能够直接连接到 Elastic 工件注册表,但 Elastic 软件包注册表的连接是通过Kibana处理的。

此外,如果使用 Elastic Agent Elastic Defend 集成,则需要访问Elastic Endpoint 工件存储库才能部署某些检测和防御功能的更新。

要了解更多有关安装和配置的信息,请参阅Elastic Agent 安装文档。请务必查看在离线环境中运行 Elastic Agent 的特定要求。

要更好地了解如何使用 Elastic Agent 配置设置和策略,请参阅附录 D - 代理集成指南

1.6. Fleet Server编辑

Fleet Server 是任何可扩展的 Elastic Agent 部署所需的中间件组件。Fleet Server 的离线依赖项与Elastic Agent的依赖项相同。

要了解更多有关安装 Fleet Server 的信息,请参阅Fleet Server 设置文档

1.7. Elastic APM编辑

APM 服务器的离线设置可以通过两种方式实现

1.8. Elastic 地图服务编辑

请参阅 Kibana 文档中的连接到 Elastic 地图服务,了解如何配置防火墙以连接到 Elastic 地图服务、在本地托管它或完全禁用它。

1.9. 企业搜索编辑

详细的安装和配置说明可在企业搜索安装文档中找到。

1.10. Elastic 软件包注册表编辑

可以使用任何与 OCI 兼容的运行时(如 Podman(类 RHEL Linux 系统的典型选择)或 Docker)来离线安装 EPR。官方容器镜像和使用指南的链接可在 Fleet 和 Elastic Agent 指南的离线环境页面上找到。

有关其他设置示例,请参阅附录 A - Elastic 软件包注册表

除了设置 EPR 服务之外,您还需要配置 Kibana以使用此服务。如果将 TLS 与 EPR 服务一起使用,则还需要将 Kibana 设置为信任 EPR 提供的证书。

1.11. Elastic 工件注册表编辑

需要离线安装 Elastic 工件注册表,以便使 Elastic Agent 部署能够执行自我升级并安装某些组件,这些组件是某些数据集成所需的(也就是说,除了从 EPR 检索到的内容之外)。要了解更多信息,请参阅 Fleet 和 Elastic Agent 指南中的托管您自己的工件注册表以进行二进制下载

有关其他设置示例,请参阅附录 B - Elastic 工件注册表

在设置自己的 Web 服务器(如 NGINX)以充当 Elastic 工件注册表时,建议不要使用 TLS,因为目前没有直接方法可以在 Elastic Agent 和此服务之间建立证书信任。

1.12. Elastic Endpoint 工件存储库编辑

此组件的离线设置本质上与Elastic 工件注册表的设置相同,只是提供不同的工件。要了解更多信息,请参阅 Elastic Security 指南中的配置离线端点和离线环境

1.13 机器学习编辑

某些机器学习功能(如自然语言处理 (NLP))要求您部署经过训练的模型。要了解如何在离线环境中部署机器学习模型,请参阅

2. Kubernetes 和 OpenShift 安装编辑

设置 Elastic Stack 的离线 Kubernetes 或 OpenShift 安装有一些需要注意的特殊事项,但总体依赖项与在常规 Linux 机器上进行自管安装的情况相同。

2.1. Elastic Kubernetes Operator (ECK)编辑

Elastic Kubernetes Operator 是 Kubernetes OpenShift 安装中的一个附加组件,它主要负责安装、配置和更新 Elastic Stack 的部署。有关详细信息,请参阅Elastic Cloud on Kubernetes 安装说明

主要要求是

  • 将 ECK 和所有其他 Elastic Stack 组件的容器镜像同步到本地可访问的容器仓库。
  • 修改 ECK Helm Chart 配置,以便 ECK 知道它应该使用您的离线容器仓库而不是 Elastic 公共仓库。
  • (可选)在 ECK Helm Chart 中禁用 ECK 遥测收集。此配置将传播到所有其他 Elastic 组件,例如 Kibana。
  • 为 Elastic Artifact Registry 构建自定义部署容器镜像。
  • 为 Elastic Endpoint Artifact Repository 构建自定义部署容器镜像。

2.2. Elastic Package Registry编辑

可以从 Elastic Docker 官方仓库下载容器镜像,如 Fleet 和 Elastic Agent 离线环境文档中所述。

理想情况下,此容器应作为 Kubernetes 部署运行。有关示例,请参阅附录 C - EPR Kubernetes 部署

2.3. Elastic Artifact Registry编辑

需要按照自管安装情况中设置 Web 服务器的类似说明来创建自定义容器。例如,可以使用使用 NGINX 基础镜像的容器文件来运行类似于附录 B - Elastic Artifact Registry中所述示例的构建。

2.4. Elastic Endpoint Artifact Repository编辑

与 Elastic Artifact Registry 一样。需要按照自管安装情况中为其设置 Web 服务器的类似说明来创建自定义容器。

2.5. Elastic 的 Ironbank 安全镜像编辑

除了公共Elastic 容器仓库之外,大多数 Elastic Stack 容器镜像也可以在 Platform One 的Iron Bank中找到。

3.0 Elastic Cloud Enterprise编辑

要在离线环境中安装 Elastic Cloud Enterprise,您需要托管自己的1.10. Elastic Package Registry。有关详细信息,请参阅ECE 离线安装说明

附录 A - Elastic Package Registry编辑

以下脚本在 RHEL 8 系统上生成一个 SystemD 服务文件,以便在生产环境中使用 Podman 运行 EPR。

#!/usr/bin/env bash

EPR_BIND_ADDRESS="0.0.0.0"
EPR_BIND_PORT="8443"
EPR_TLS_CERT="/etc/elastic/epr/epr.pem"
EPR_TLS_KEY="/etc/elastic/epr/epr-key.pem"
EPR_IMAGE="docker.elastic.co/package-registry/distribution:8.14.2"

podman create \
  --name "elastic-epr" \
  -p "$EPR_BIND_ADDRESS:$EPR_BIND_PORT:$EPR_BIND_PORT" \
  -v "$EPR_TLS_CERT:/etc/ssl/epr.crt:ro" \
  -v "$EPR_TLS_KEY:/etc/ssl/epr.key:ro" \
  -e "EPR_ADDRESS=0.0.0.0:$EPR_BIND_PORT" \
  -e "EPR_TLS_CERT=/etc/ssl/epr.crt" \
  -e "EPR_TLS_KEY=/etc/ssl/epr.key" \
  "$EPR_IMAGE"

## creates service file in the root directory
# podman generate systemd --new --files --name elastic-epr --restart-policy always

以下是一个实际的 SystemD 服务文件示例,用于作为 Podman 服务启动的 EPR。

# container-elastic-epr.service
# autogenerated by Podman 4.1.1
# Wed Oct 19 13:12:33 UTC 2022

[Unit]
Description=Podman container-elastic-epr.service
Documentation=man:podman-generate-systemd(1)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=%t/containers

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always
TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run \
	--cidfile=%t/%n.ctr-id \
	--cgroups=no-conmon \
	--rm \
	--sdnotify=conmon \
	-d \
	--replace \
	--name elastic-epr \
	-p 0.0.0.0:8443:8443 \
	-v /etc/elastic/epr/epr.pem:/etc/ssl/epr.crt:ro \
	-v /etc/elastic/epr/epr-key.pem:/etc/ssl/epr.key:ro \
	-e EPR_ADDRESS=0.0.0.0:8443 \
	-e EPR_TLS_CERT=/etc/ssl/epr.crt \
	-e EPR_TLS_KEY=/etc/ssl/epr.key docker.elastic.co/package-registry/distribution:8.14.2
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify
NotifyAccess=all

[Install]
WantedBy=default.target

附录 B - Elastic Artifact Registry编辑

以下示例脚本从 Internet 下载工件,以便稍后作为私有 Elastic Package Registry 提供服务。

#!/usr/bin/env bash
set -o nounset -o errexit -o pipefail

STACK_VERSION=8.14.2
ARTIFACT_DOWNLOADS_BASE_URL=https://artifacts.elastic.co/downloads

DOWNLOAD_BASE_DIR=${DOWNLOAD_BASE_DIR:?"Make sure to set DOWNLOAD_BASE_DIR when running this script"}

COMMON_PACKAGE_PREFIXES="apm-server/apm-server beats/auditbeat/auditbeat beats/elastic-agent/elastic-agent beats/filebeat/filebeat beats/heartbeat/heartbeat beats/metricbeat/metricbeat beats/osquerybeat/osquerybeat beats/packetbeat/packetbeat cloudbeat/cloudbeat endpoint-dev/endpoint-security fleet-server/fleet-server"

WIN_ONLY_PACKAGE_PREFIXES="beats/winlogbeat/winlogbeat"

RPM_PACKAGES="beats/elastic-agent/elastic-agent"
DEB_PACKAGES="beats/elastic-agent/elastic-agent"

function download_packages() {
  local url_suffix="$1"
  local package_prefixes="$2"

  local _url_suffixes="$url_suffix ${url_suffix}.sha512 ${url_suffix}.asc"
  local _pkg_dir=""
  local _dl_url=""

  for _download_prefix in $package_prefixes; do
    for _pkg_url_suffix in $_url_suffixes; do
          _pkg_dir=$(dirname ${DOWNLOAD_BASE_DIR}/${_download_prefix})
          _dl_url="${ARTIFACT_DOWNLOADS_BASE_URL}/${_download_prefix}-${_pkg_url_suffix}"
          (mkdir -p $_pkg_dir && cd $_pkg_dir && curl -O "$_dl_url")
    done
  done
}

# and we download
for _os in linux windows; do
  case "$_os" in
    linux)
      PKG_URL_SUFFIX="${STACK_VERSION}-${_os}-x86_64.tar.gz"
      ;;
    windows)
      PKG_URL_SUFFIX="${STACK_VERSION}-${_os}-x86_64.zip"
      ;;
    *)
      echo "[ERROR] Something happened"
      exit 1
      ;;
  esac

  download_packages "$PKG_URL_SUFFIX" "$COMMON_PACKAGE_PREFIXES"

  if [[ "$_os" = "windows" ]]; then
    download_packages "$PKG_URL_SUFFIX" "$WIN_ONLY_PACKAGE_PREFIXES"
  fi

  if [[ "$_os" = "linux" ]]; then
    download_packages "${STACK_VERSION}-x86_64.rpm" "$RPM_PACKAGES"
    download_packages "${STACK_VERSION}-amd64.deb" "$DEB_PACKAGES"
  fi
done


## selinux tweaks
# semanage fcontext -a -t "httpd_sys_content_t" '/opt/elastic-packages(/.*)?'
# restorecon -Rv /opt/elastic-packages

以下是用于为 Elastic Artifact Registry 运行 Web 服务器的 NGINX 配置示例。

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log          /var/log/nginx/access.log  main;
    sendfile            on;
    keepalive_timeout   65;

    server {
        listen                  9080 default_server;
        server_name             _;
        root                    /opt/elastic-packages;

        location / {

        }
    }

}

附录 C - EPR Kubernetes 部署编辑

以下是一个示例 EPR Kubernetes 部署 YAML 文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elastic-package-registry
  namespace: default
  labels:
    app: elastic-package-registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elastic-package-registry
  template:
    metadata:
      name: elastic-package-registry
      labels:
        app: elastic-package-registry
    spec:
      containers:
        - name: epr
          image: docker.elastic.co/package-registry/distribution:8.14.2
          ports:
            - containerPort: 8080
              name: http
          livenessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 20
            periodSeconds: 30
          resources:
            requests:
              cpu: 125m
              memory: 128Mi
            limits:
              cpu: 1000m
              memory: 512Mi
          env:
            - name: EPR_ADDRESS
              value: "0.0.0.0:8080"
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: elastic-package-registry
  name: elastic-package-registry
spec:
  ports:
  - port: 80
    name: http
    protocol: TCP
    targetPort: http
  selector:
    app: elastic-package-registry

附录 D - Agent 集成指南编辑

在 Elastic Agent 中配置任何集成时,您需要在最终分配给该代理的任何策略中设置集成设置。

D.1. 术语编辑

请注意以下术语和定义

集成
可以部署在 Elastic Stack 之上的各种可选功能。有关详细信息,请参阅集成
Agent 集成
需要 Elastic Agent 才能运行的集成。例如,示例数据集成只需要 Elasticsearch 和 Kibana,并且包含仪表板、数据和相关对象,但 APM 集成不仅有一些 Elasticsearch 对象,还需要 Elastic Agent 才能运行 APM Server。
程序包
给定集成的一组依赖项(例如仪表板、脚本和其他依赖项),通常需要从Elastic Package Registry检索这些依赖项,然后才能正确安装和配置集成。
Agent 策略
Elastic Agent 的配置,可能包括一个或多个 Elastic Agent 集成,以及每个集成的配置。

D.2. 如何配置编辑

可以通过三种方式配置 Elastic Agent 集成

D.2.1. 使用 Kibana UI编辑

最适合:手动配置以及喜欢使用 UI 而不是脚本的用户。

示例:日志和指标入门

可以使用 Kibana UI 管理代理策略和集成设置。例如,以下显示了 Elastic Agent 策略中 System 集成的日志记录配置

Configuration of a logging integration in an agent policy

D.2.2. 使用 kibana.yml 配置文件编辑

适合:声明式配置以及需要可重现的自动化部署的用户。

示例:Kibana 中的 Fleet 设置

本文档仍在开发中;构建自定义代理策略方面可能存在差距。

您可以通过在 kibana.yml 设置文件中添加适当的配置参数来让 Kibana 代表您创建 Elastic Agent 策略,这些参数包括

xpack.fleet.packages
获取 Kibana 应从 Elastic Package Registry (EPR) 下载的所有集成程序包名称和版本的列表。这样做是因为 Elastic Agent 本身不会直接从 EPR 获取程序包。
xpack.fleet.agentPolicies
Kibana Fleet HTTP API预期的格式获取 Elastic Agent 策略列表。有关格式,请参阅预配置设置中的设置。另请参阅D.2.3. 使用 Kibana Fleet API
xpack.fleet.registryUrl
获取 Kibana 服务器可以访问的 Elastic Package Registry 的 URL。仅在离线环境中部署时才启用此设置。
其他设置
您可以为 Fleet、Elastic Agent 和策略添加其他更具可选性的设置。有关详细信息,请参阅Kibana 中的 Fleet 设置

D.2.3. 使用 Kibana Fleet API编辑

最适合:声明式配置以及需要在最棘手的环境中进行可重现的自动化部署的用户。

示例:请参见下文。

可以使用调用 Kibana Fleet API 的自定义脚本在不重新启动 Kibana 的情况下创建或更新策略,并且还可以使用自定义错误处理和更新逻辑。

目前,您可以参阅Kibana Fleet HTTP API文档,但是应该查阅公共代码仓库中的其他资源,以获取给定集成可用的完整配置选项集。具体来说,许多集成都有其特有的配置选项,例如 inputsdata_streams

特别地,您应该参考 *.yml.hbs 模板来确定哪些 vars 可用于使用 Kibana Fleet API 配置特定的集成。