容器中的 Tableau Server - 使用设置工具

简介

“容器中的 Tableau Server”是 Tableau 的第一款基于容器的服务器产品。“容器中的 Tableau Server”是在 Linux Docker 容器内运行的一体化 Tableau Server 实例。换句话说,“容器中的 Tableau Server”是运行整个自包含 Tableau Server 应用程序的 Docker 映像。“容器中的 Tableau Server”是我们为在基于容器的环境中运行的 Tableau Server 提供支持的许多步骤中的第一个步骤。了解“容器中的 Tableau Server”概念的最简单方法是将其看作一个预装了 Tableau Server 的 VM。映像以 UBI 8 映像(适用于版本 2022.1 及更低版本的 CentOS 7.x)为基础,并在容器内运行 supervisord(而不是 systemd)。容器启动 supervisord 后,将立即尝试初始化和启动 Tableau Server。此处的大部分文档旨在描述如何提供配置和利用自动化,以便您可以在 Docker 环境中运行 Tableau Server。

“容器中的 Tableau Server”映像设置工具可帮助您创建和自定义容器映像以包括自定义包和项目。该工具的主要功能之一是构建容器映像并安装自定义数据连接器。

“容器中的 Tableau Server”的限制

  • “容器中的 Tableau Server”仅支持使用服务器 ATR 激活许可证。2023.1 及更高版本支持使用服务器 ATR 脱机激活。此功能在容器中可用,但需要额外的步骤和批准。如果您需要在隔离网络的环境或脱机环境中运行“容器中的 Tableau Server”,请联系您的客户代表了解详细信息。
  • “容器中的 Tableau Server”当前不支持 Resource Monitoring Tool (RMT) 代理。
  • “容器中的 Tableau Server”不支持 Kerberos。

“容器中的 Tableau Server”设置工具

“容器中的 Tableau Server”设置工具 build-image 可依据 Tableau .rpm 安装程序和提供的配置文件构建“容器中的 Tableau Server”自定义映像。

设置工具将 Tableau Server 安装程序和驱动程序以及其他项目作为输入,并创建 Docker 映像。当正确使用 build-image 工具时,新生成的映像将安装所需的项目。

支持的构建发行版

仅在基于 RHEL 的 Linux 系统(RHEL、CentOS 或 Amazon Linux 2)上支持构建“容器中的 Tableau Server”Docker 映像。在任何其他 Linux 发行版上进行构建是也许可行,但目前未经测试且不受支持。不支持在 macOS 上构建映像。创建的映像基于 UBI 8映像(对于版本 2022.1 及更低版本为 CentOS 7.x)。

您必须在主机上安装 Docker 版本 18.09 或更高版本才能构建容器映像。一般来说,我们推荐使用最新的稳定版 Docker。某些 Linux 发行版仅在其软件存储库中提供旧版本的 Docker,在这种情况下,您可能需要从其他来源安装 Docker。低于版本 18.09 的 Docker 版本不包含“容器中的 Tableau Server”所需的功能。

下载必要的文件

若要使用设置工具,您需要下载该工具和兼容的 Server 安装程序 .rpm 文件。安装程序文件必须是版本 2021.2.0 或更高版本。这两个文件都可以从 Tableau Server 页面(链接在新窗口中打开) 下载。

  1. 下载 Server 安装程序文件 tableau-server-<version>.rpm 版本 2021.2.0 或更高版本。

  2. 下载“容器中的 Tableau Server”设置工具 tableau-server-container-setup-tool-<version>.tar.gz

安装

“容器中的 Tableau Server”设置工具以压缩包形式提供。您将需要提取压缩文件的内容。下面是一个示例,该示例假定“容器中的 Tableau Server”设置工具存档位于当前目录中:

tar -xzf tableau-server-container-setup-tool-<VERSION>.tar.gz

这将创建一个新目录 tableau-server-container-setup-tool-<VERSION>,其中包含用于运行工具的 build-image 脚本。

填写注册表单

编辑注册文件以提供您根据最终用户许可协议注册 Tableau Server 所需的唯一标识信息。文件 reg-info.json 用作必需、唯一可识别的注册信息的模板,位于“容器中的 Tableau Server”设置工具的顶级目录中。此文件用于注册在映像中运行的 Tableau Server 实例。提供准确的信息将确保注册过程正确完成。

eula 字段值预先填入“接受”,表示您接受我们的最终用户许可协议 (EULA)。您可以在构建工具的 EULA 目录中查看 EULA。如 EULA 中所述,您必须在激活 Tableau Server 时提交唯一可识别的用户注册。完成注册文件编辑后,其他字段应具有反映您的独特信息的值。此文件用于注册在映像中运行的 Tableau Server 实例。提供准确的信息将确保注册过程完成,并且您提交的内容符合许可授予的要求。

注意:您必须接受 EULA 才能使用 Tableau Server。如果您不接受 EULA,则无法运行 Tableau Server。

编辑前的注册文件模板 reg-info.json

{
"zip" : "<value>",
"country" : "<value>",
"city" : "<value>",
"last_name" : "<value>",
"industry" : "<value>",
"eula" : "accept",
"title" : "<value>",
"phone" : "<value>",
"company" : "<value>",
"state" : "<value>",
"department" : "<value>",
"first_name" : "<value>",
"email" : "<value>"
}

如何使用该工具

设置工具中有一个名为 build-image 的可执行脚本。使用 -h 选项运行此脚本将显示帮助:

./src/build-image -h
Usage: build-image --accepteula -i [INPUT_IMAGE_NAME] -o [OUTPUT_IMAGE_NAME] [optional arguments]
Creates new Tableau Server image with pre-installed database drivers, configuration, and instructions.
REQUIRED

--accepteula              Indicate that you have accepted the End User License Agreement (EULA).

The EULA is available in the EULA directory of this tool.

-i installer              Path to the Tableau Server installer.

OPTIONAL

-o output name            Tag of target generated Tableau Server image.

-e environment file       Optional environment file to configuration overrides to docker image at build time.

-v setup tool version     Prints the Setup tool version.


-b base image version     Prints the default base image URL.

基本示例用法:

./build-image --accepteula -i tableau-server-image.rpm

在不提供项目或设置脚本的情况下运行该命令可以正常工作,但它不会执行任何操作,因为它不会将任何附加资源复制或安装到原始“容器中的 Tableau Server”映像中。

编排

Tableau 仅为在 Linux 上运行的 Tableau Server 容器提供文档和支持。Tableau 不为 Kubernetes 或 Docker Swarm 等容器编排系统提供文档或支持。但是,Kubernetes 可用于部署“容器中的 Tableau Server”。有关在 Kubernetes 中部署 Tableau 容器的资源和指南,请参见我们社区支持的 GitHub 项目:https://github.com/tableau/tableau-server-in-kubernetes(链接在新窗口中打开)

自定义映像

构建时设置环境变量

一部分可以自定义映像的环境变量只能在构建映像时设置。包括在容器内需要 root 权限的用户、组和其他属性。默认情况下,root 操作在运行时不可用。此外,在构建时将某些环境变量引入到映像中也很有用,这样就不必在每次运行映像时都设置它们。所有这些环境变量都可以通过将环境文件传递给 build-image 脚本来设置。

环境文件

可以使用 -e 参数将环境文件传递给 build-image 脚本。该文件必须符合以下格式:

<KEY>=<VALUE>
<KEY>=<VALUE>
示例用法:

创建具有正确格式的环境文件:

UNPRIVILEGED_TABLEAU_UID=1012
UNPRIVILEGED_TABLEAU_GID=1020
TABLEAU_USERNAME=myuser
TABLEAU_PASSWORD=pw

将文件传递给映像构建器

./build-image --accepteula -i tableau-server-2020-3.x86_64.rpm -e <path-to-env-file>
环境变量

可以在环境文件中设置任何环境变量。查看“环境变量”部分以查看完整列表。

构建时环境变量只能在运行此脚本构建映像时设置:

环境名称默认描述
BASE_IMAGE_URL使用构建工具命令:build-image -bbuild-image 工具和 Dockerfile 中指定的默认映像是唯一官方支持的基础映像。此参数可用于从自定义 docker 映像存储库中提取此特定基础映像的副本或定义自定义基础映像。如果您选择使用自定义基础映像(有关更多详细信息,请参见“定义自定义基础映像”),您有责任确保它基于 UBI 8(对于版本 2022.1 及更低版本为 CentOS 7 或 RHEL 7)并包含正确运行 Tableau Server 所需的资源。
PRIVILEGED_TABLEAU_GID997特权表组的 GID。
UNPRIVILEGED_TABLEAU_GID 998 非特权表组的 GID。
UNPRIVILEGED_TABLEAU_UID 999 运行 tableau 进程的用户的 UID(单用户部署)。
UNPRIVILEGED_USERNAME tableau 非特权用户的字符串名称。
UNPRIVILEGED_GROUP_NAME tableau 非特权组的字符串名称。
PRIVILEGED_GROUP_NAMEtsmadmin特权组的字符串名称。
LANG en_US.UTF-8区域设置

驱动程序、证书和其他文件

Tableau Server 映像不附带预安装的数据连接器或驱动程序。您将需要创建一个 bash 设置脚本,用于指示 build-image 脚本安装 Tableau Server 将需要的数据连接器。以下是您将采取的步骤:

  1. 确保“容器中的 Tableau Server”设置工具已正确安装

  2. 从 Tableau 驱动程序页面下载驱动程序:https://www.tableau.com/zh-cn/support/drivers(链接在新窗口中打开)

  3. 将下载的驱动程序文件复制到“容器中的 Tableau Server”设置工具中的 customer-files 目录中。

    customer-files 目录将被复制到 docker 映像中。它将位于容器内的以下路径中:/docker/customer-files

  4. 在“容器中的 Tableau Server”设置工具中编辑文件 customer-files/setup-script,指示 Docker 如何安装驱动程序。

    该脚本只是一个可执行 bash 文件,在构建 Docker 映像时执行。(从技术上讲,它可用于在映像中执行任意操作,包括环境设置、配置等。)

    该脚本将在容器内运行,因此请注意,在“容器中的 Tableau Server”映像内执行命令时,这些命令必须有效。

    举例来说,如果要安装名为 mydriver.rpm 的驱动程序,则您将在 setup-script 中编写此命令:

    yum install -y /docker/customer-files/mydriver.rpm
Tableau 管理视图

Tableau 管理视图需要安装 PostgreSQL 驱动程序。如果您计划使用这些视图,则需要按照上述步骤安装 PostgreSQL 驱动程序。有关管理视图的详细信息,请参见管理视图

定义自定义基础映像

用于构建 Tableau Server 容器的默认基础映像是来自 Docker Hub 的 UBI 8 映像(对于版本 2022.1 及更低版本为 CentOS 7.x)。在某些情况下,您可能希望配置 build-image 工具以从其他 docker 映像存储库中提取映像。例如,您的公司可能管理一个内部 docker 存储库并且不希望 build-image 从公共存储库中提取。使用以下步骤自定义基础映像路径:

  1. 使用以下命令查看当前 build-image 工具的默认基础映像名称和版本:

    ./build-image -b
  2. 从 Docker Hub 中提取完全匹配的基础映像名称和版本,并将其存储/缓存在您首选的映像存储库中(根据您公司的映像策略)

  3. 回到 build-image 工具。创建或修改现有环境文件以包含 BASE_IMAGE_URL 环境键,将值设置为新的 docker 映像注册表路径:

    BASE_IMAGE_URL=<custom-image-registry-path>
  4. 使用环境文件构建映像:

    ./build-image --accepteula -i <rpm> -e <path-to-env-file>

这些步骤使您能够指定完全不同的基础映像。只有基于 UBI 8(对于版本 2022.1 及更低版本为 RHEL 和 CentOS 7.x)的映像才支持此功能,提供此功能是为了帮助客户创建更安全的映像。

使用 Tableau 指定的默认值以外的基础映像可能会导致生成的映像无法正常启动或无法正常运行的风险。如果您选择使用自定义基础映像,则您有责任确保基础映像使 Tableau Server 能够正常运行。我们建议使用默认基础映像,除非您的组织出于某种原因(例如安全问题)无法接受它。

自定义基础镜像必须基于 UBI 8(对于版本 2022.1 及更低版本为 RHEL 7 或 CentOS 7)。使用任何其他发行版将导致映像不受支持。

使用 yum 和 pip 的内部存储库

容器中的 Tableau Server 映像配置为使用默认 yum 和 pip 存储库来拉取依赖包。如果您需要编辑、移除或添加存储库(例如,内部存储库可能用于提高安全性),则需要修改 Image Setup Tool 的初始化脚本之一。

修改源代码中的 <setup_tool>/src/image/init/setup_default_environment.bash 脚本以使用内部存储库。请将内部存储库所需的任何存储库文件保留在 <setup_tool>/src/image/init/ 目录中。该目录将被复制到 docker 映像中。

基础映像图像和安全性

许多客户将针对生成的 Tableau Server Docker 映像运行容器扫描工具(例如 AquaScan 或 TwistLock)。这些安全工具将生成潜在安全漏洞(或常见漏洞和暴露,即 CVE)的报告。有两种与“容器中的 Tableau Server”映像相关的漏洞:

  • 与 Tableau Server 或我们依赖的库相关的 C1VE。
  • 与基础 Linux 发行版相关的 CVE。

Tableau 对与 Tableau Server 直接关联的 CVE 负责。安全团队分析这些报告以确定影响和严重性,以帮助确定要解决的问题的优先级。基线修复优先级和时间表将由原始 CVSS 严重性评分确定。除非存在暴露漏洞的可执行代码路径,否则第三方组件安全更新通常不会反向移植到旧版本中。

使用容器化分发模型,客户面临着一系列围绕操作系统层漏洞的不同挑战。传统上,借助 Tableau Server,Tableau 将集中精力交付安全的应用程序,而客户负责管理操作系统(Linux 或 Windows)。但是,通过容器化,操作系统(从版本 2023.3 开始为 UBI 8,对于版本 2022.1 及更低版本为 CentOS 7.x 或 RHEL 7.x)和应用程序一起打包在一个容器中。Tableau 负责处理与 Tableau Server 关联的 CVE,并确定来自第三方库的 CVE 是否会影响客户。但是,客户必须对操作系统层问题负责。为了让客户解决操作系统层的安全问题,客户可以将基本操作系统层替换为他们自己的版本(从版本 2022.3 及更高版本开始基于 UBI 8,对于版本 2022.1 及更低版本为 RHEL 或 CentOS 7.x)。在执行此操作时,您必须验证 Tableau Server 是否正常运行。由于有安全问题,移除 Tableau Server 所依赖的库可能会导致 Tableau Server 实例无法运行。如果您更改基本操作系统层,客户有责任验证它是否有效。

强化“容器中的 Tableau Server”

您可以将标准强化步骤应用于“容器中的 Tableau Server”。有关强化 Tableau Server 的详细信息,请参见安全强化检查表

部署配置举例

Docker

“容器中的 Tableau Server”基本用法
docker run \
-e LICENSE_KEY=<key>
-p 8080:8080
-d <Tableau Server in a Container image ID or tag>
具有自动化初始管理员用户的“容器中的 Tableau Server”基本用法
docker run \
-e LICENSE_KEY=<key> \
-e TABLEAU_USERNAME=<myadmin> \
-e TABLEAU_PASSWORD_FILE=/etc/tableau-admin-secret \
-v <full-path-to-pw-file>:/etc/tableau-admin-secret \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
仅 TSM 模式
docker run \
-e TSM_ONLY=1 \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
多节点基本用法
初始节点

选项 1:如果服务器配置 (CONFIG_FILE ) 指定多节点拓扑,则使用此选项:

docker run \
-v <network-shared-directory>:/docker/config/bootstrap \
-v <full-path-to-config-file>:/docker/config/config.json:ro \
-e LICENSE_KEY=<key> \
-p 8080:8080 -p 8800-9000:8800-9000 -p 27000-27010:27000-27010 \
--hostname=<name-of-host-machine> \
-d <Tableau Server in a Container image ID or tag>

选项 2:如果您想要多节点部署,即使服务器配置未指定多节点拓扑,也可以使用此选项:

docker run \
-v <network-shared-directory>:/docker/config/bootstrap \
-e LICENSE_KEY=<key> -e ALWAYS_WRITE_BOOTSTRAP_FILE=1 \
-p 8080:8080 -p 8800-9000:8800-9000 -p 27000-27010:27000-27010 \
--hostname=<name-of-host-machine> \
-d <Tableau Server in a Container image ID or tag>
其他节点
docker run \
-v <network-shared-directory>:/docker/config/bootstrap \
-e BOOTSTRAP_INSTALL=1 \
-p 8080:8080 -p 8800-9000:8800-9000 \
--hostname=<name-of-host-machine> \
-d <Tableau Server in a Container image ID or tag>
外部化数据用法
docker run \
-v <empty-data-dir>:/var/opt/tableau \
-e LICENSE_KEY=<key> \
--hostname=localhost \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
初始化容器基本用法

初始化容器

docker run \
-v <empty-data-dir>:/var/opt/tableau \
-e LICENSE_KEY=<key> \
-e INIT_CONTAINER=1 \
--hostname=localhost \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>

运行容器

docker run \
-v <empty-data-dir>:/var/opt/tableau \
--hostname=localhost \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
基本备份还原:单节点
docker run \
-v <full-path-to-backup-file>:/docker/config/backup/backup-file.tsbak \
-v <full-path-to-config-only-file>:/docker/config/config.json:ro \
-e LICENSE_KEY=<key> \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>

Docker-Compose

version: '3.2'
services:
    tableau-server:
         hostname: localhost
         volumes:
              - <your-tsm-command-file>:/docker/config/tsm-commands:ro
              - <your-config-file >:/docker/config/config.json:ro
         ports:
              - "8080:8080"
         image: ${IMAGE_NAME}
         environment:
              - LICENSE_KEY=<license-key>

 

 

感谢您的反馈!您的反馈已成功提交。谢谢!