在气隙环境中安装

编辑

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 Maps Service
  • 为了能够使用 Kibana 示例数据、安装或更新数百个预构建的警报规则以及探索可用的数据集成,您需要设置和配置Elastic Package Registry
  • 为了为 Endpoint Security Agent 提供检测规则更新,您需要设置和配置Elastic Endpoint Artifact Repository
  • 为了访问 Enterprise Search 功能(除了 Elasticsearch 的通用搜索功能之外),您需要设置和配置Enterprise Search
  • 为了访问 APM 集成,您需要设置和配置Elastic APM
  • 为了安装和使用 Kibana AI 助手的 Elastic 文档,您需要设置和配置Kibana 的 Elastic 产品文档

1.3. Beats

编辑

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

1.4. Logstash

编辑

Logstash 是一个多功能的数据传送和处理应用程序。它在气隙场景中不需要任何独特的设置。要了解更多信息,请参考Logstash 文档

1.5. Elastic Agent

编辑

Elastic Agent 的气隙安装取决于Elastic Package RegistryElastic Artifact Registry,以满足大多数用例。代理本身相当轻量级,并且仅在配置需要时才安装依赖项。在与这些依赖项的连接方面,Elastic Agent 需要能够直接连接到 Elastic Artifact Registry,但 Elastic Package Registry 连接是通过Kibana处理的。

此外,如果使用 Elastic Agent Elastic Defend 集成,则为了部署某些检测和预防功能的更新,必须访问Elastic Endpoint Artifact Repository

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

为了更好地了解如何使用 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 Maps Service

编辑

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

1.9. Enterprise Search

编辑

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

1.10. Elastic Package Registry

编辑

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

请参考附录 A - Elastic Package Registry,了解其他设置示例。

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

1.11. Elastic Artifact Registry

编辑

为了使 Elastic Agent 部署能够执行自我升级并安装某些数据集成所需的组件(即除了从 EPR 获取的内容之外),必须进行 Elastic Artifact Registry 的气隙安装。要了解更多信息,请参考 Fleet 和 Elastic Agent 指南中的托管您自己的二进制文件下载的工件注册表

请参考附录 B - Elastic Artifact Registry,了解其他设置示例。

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

1.12. Elastic Endpoint Artifact Repository

编辑

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

1.13 机器学习

编辑

一些机器学习功能,例如自然语言处理 (NLP),需要您部署训练好的模型。要了解如何在气隙环境中部署机器学习模型,请参阅

1.14 Kibana AI 助手产品文档

编辑

详细的安装和配置说明可在Kibana AI 助手设置文档中找到。

2. Kubernetes 和 OpenShift 安装

编辑

在气隙环境中设置 Kubernetes 或 OpenShift 安装 Elastic Stack 有一些独特的考虑事项,但一般依赖项与在普通 Linux 机器上进行自管理安装的情况相同。

2.1. Elastic Kubernetes Operator (ECK)

编辑

Elastic Kubernetes Operator 是 Kubernetes OpenShift 安装中的一个附加组件,它本质上完成了 Elastic Stack 的安装、配置和更新部署的大部分工作。有关详细信息,请参阅Elastic Cloud on Kubernetes 安装说明

主要要求是

  • 将 ECK 和所有其他 Elastic Stack 组件的容器镜像同步到本地可访问的容器存储库。
  • 修改 ECK helm 图表配置,以便 ECK 知道它应该使用您的离线容器存储库而不是公共 Elastic 存储库。
  • (可选)在 ECK helm 图表中禁用 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.17.0"

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

以下是通过 Podman 服务启动的 EPR 的实际 SystemD 服务文件示例。

# 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.17.0
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.17.0
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.17.0
          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 服务器。
给定集成的依赖项(例如仪表板、脚本等)集合,通常需要从Elastic Package Registry中检索,然后才能正确安装和配置集成。
Agent 策略
Elastic Agent 的配置,可能包括一个或多个 Elastic Agent 集成,以及每个集成的配置。

D.2. 如何配置

编辑

有三种方法可以配置 Elastic Agent 集成

D.2.1. 使用 Kibana UI

编辑

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

示例:开始使用日志和指标

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

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 配置特定集成。