在离线环境中安装编辑

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 工件仓库
  • 要访问 Enterprise Search 功能(除了 Elasticsearch 的一般搜索功能之外),您需要设置和配置Enterprise Search
  • 要访问 APM 集成,您需要设置和配置Elastic APM

1.3. Beats编辑

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

1.4. Logstash编辑

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

1.5. Elastic Agent编辑

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

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

要详细了解安装和配置,请参阅Elastic Agent 安装文档。请务必查看在离线环境中运行 Elastic Agents 的特定要求。

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

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. Enterprise Search编辑

详细的安装和配置说明可在Enterprise Search 安装文档中找到。

1.10. Elastic 软件包注册表编辑

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

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

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

1.11. Elastic 工件注册表编辑

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

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

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

1.12. Elastic Endpoint 工件仓库编辑

该组件的离线安装与 弹性制品仓库 的安装基本相同,只是服务的制品不同。如需了解更多信息,请参阅 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。
  • 为弹性制品仓库构建自定义部署容器镜像。
  • 为弹性端点制品仓库构建自定义部署容器镜像。

2.2. 弹性软件包仓库编辑

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

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

2.3. 弹性制品仓库编辑

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

2.4. 弹性端点制品仓库编辑

与弹性制品仓库一样。需要按照 自管安装案例 中为其设置 Web 服务器的类似说明创建自定义容器。

2.5. 用于 Elastic 的 Ironbank 安全镜像编辑

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

3.0 Elastic Cloud Enterprise编辑

要在离线环境中安装 Elastic Cloud Enterprise,您需要托管自己的 1.10. 弹性软件包仓库。有关详细信息,请参阅 ECE 离线安装说明

附录 A - 弹性软件包仓库编辑

以下脚本在 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.3"

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.3
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 - 弹性制品仓库编辑

以下示例脚本从互联网下载制品,以便稍后作为私有弹性软件包仓库提供服务。

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

STACK_VERSION=8.14.3
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

以下是用于为弹性制品仓库运行 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.3
          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 - 代理集成指南编辑

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

D.1. 术语编辑

请注意以下术语和定义

集成
可以在 Elastic Stack 之上部署的各种可选功能。请参阅 集成 了解更多信息。
代理集成
需要 Elastic Agent 才能运行的集成。例如,示例数据集成只需要 Elasticsearch 和 Kibana,并且由仪表板、数据和相关对象组成,而 APM 集成不仅具有一些 Elasticsearch 对象,还需要 Elastic Agent 才能运行 APM 服务器。
软件包
给定集成的依赖项集(例如仪表板、脚本等),通常需要从 弹性软件包仓库 中检索这些依赖项,然后才能正确安装和配置集成。
代理策略
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 应从弹性软件包仓库 (EPR) 下载的所有集成软件包名称和版本的列表。这样做是因为 Elastic Agent 本身不会直接从 EPR 获取软件包。
xpack.fleet.agentPolicies
Kibana Fleet HTTP API 预期的格式获取 Elastic Agent 策略列表。有关格式,请参阅 预配置设置 中的设置。另请参阅 D.2.3. 使用 Kibana Fleet API
xpack.fleet.registryUrl
获取 Kibana 服务器可以访问的弹性软件包仓库的 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 配置特定集成。