在气隙环境中安装
编辑在气隙环境中安装
编辑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 Registry和Elastic 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 服务器的气隙设置可以通过两种方式完成
- 通过使用 APM 集成设置其中一个 Elastic Agent 部署,如将自安装切换到 APM 集成中所述。
- 或者,通过安装独立的 Elastic APM Server,如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 策略中系统集成的日志记录配置
D.2.2. 使用 kibana.yml
配置文件
编辑不错的选择:声明性配置以及需要可重现和自动化部署的用户。
此文档仍在开发中;可能在构建自定义代理策略方面存在差距。
您可以通过在 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 文档,但应参考公共代码存储库中的其他资源,以捕获给定集成的可用完整配置选项集。具体而言,许多集成都有配置选项,例如 inputs
和 data_streams
,它们是独一无二的。
特别是,应参考 *.yml.hbs
模板以确定哪些 vars
可用于使用 Kibana Fleet API 配置特定集成。
- 对于大多数集成,请参阅 elastic/integrations 存储库中相应目录中的 README 和
*.yml.hbs
文件。 - 对于 APM 集成,请参阅 elastic/apm-server 存储库中的 README 和
*.yml.hbs
文件。