容器中的 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 所需的功能。
下載必要檔案
要使用安裝工具,需要下載該工具和相容的伺服器安裝程式 .rpm
檔。安裝程式檔必須是 2021.2.0 或更高版本。這兩個檔案都可以從 Tableau Server 頁面(連結在新視窗開啟)下載。
下載伺服器安裝程式檔,
tableau-server-<version>.rpm
版本 2021.2.0 或更高版本。下載容器中的 Tableau Server 設定工具,
tableau-server-container-setup-tool-<version>.tar.gz
。
安裝
容器中的 Tableau Server 設定工具會以 tarball 形式提供。需要擷取壓縮檔的內容。以下範例假設容器中的 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(連結在新視窗開啟)。
自訂映像
在組建時設定環境變數
可以自訂映像的環境變數子集只能在組建映像時設定。這包括在容器內需要根目錄權限的使用者、群組和其他屬性。預設情況下,根目錄動作在執行階段不可用。此外,在組建時將某些環境變數製作到映像中也很有用,這樣就不必在每次執行映像時都進行設定。所有這些環境變數都可以透過將環境檔案傳遞給 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 -b | build-image 工具和 Dockerfile 中指定的預設映像是唯一官方支援的基礎映像。此參數可用於從自訂 docker 映像存放庫中擷取此特定基礎映像的複本或定義自訂基礎映像。若您選擇使用自訂基礎映像(有關更多詳細資訊,請參閱定義自訂基礎映像),則您有責任確保其基於 UBI 8(CentOS 7 或 RHEL 7 版本 2022.1 及更早版本)並包含正確執行 Tableau Server 所需的資源。 |
PRIVILEGED_TABLEAU_GID | 997 | 取得權限之 tableau 群組的 GID。 |
UNPRIVILEGED_TABLEAU_GID | 998 | 未取得權限之 tableau 群組的 GID。 |
UNPRIVILEGED_TABLEAU_UID | 999 | 執行 tableau 程序的使用者的 UID(單一使用者部署)。 |
UNPRIVILEGED_USERNAME
| tableau | 未取得權限之使用者的字串名稱。 |
UNPRIVILEGED_GROUP_NAME
| tableau | 未取得權限之群組的字串名稱。 |
PRIVILEGED_GROUP_NAME | tsmadmin | 取得權限之群組的字串名稱。 |
LANG | en_US.UTF-8 | 地區設定 |
驅動程式、憑證和其他檔案
Tableau Server 映像不附帶已預先安裝的資料連接器或驅動程式。將需要建立 bash setup-script 來指示 build-image
指令碼安裝 Tableau Server 所需的資料連接器。將採取的步驟如下:
確保已正確安裝容器中的 Tableau Server 設定工具
從 Tableau 驅動程式頁面下載驅動程式:https://www.tableau.com/zh-tw/support/drivers(連結在新視窗開啟)
將下載的驅動程式檔案複製到容器中的 Tableau Server 設定工具中的 customer-files 目錄中。
customer-files
目錄會被複製到 docker 映像中。其會位於容器內的以下路徑中:/docker/customer-files
在容器中的 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 映像(CentOS 7.x 版本 2022.1 及更早版本)。在某些情況下,您可能希望設定 build-image 工具,以從不同的 docker 映像存放庫中擷取映像。例如,您的公司可能管理一個內部 docker 存放庫,並且不希望從公共存放庫中擷取 build-image
。使用以下步驟自訂基礎映像路徑:
使用以下命令檢視目前
build-image
工具的預設基礎映像名稱和版本:./build-image -b
從 Docker Hub 中擷取完全相符的基礎映像名稱和版本,並將其儲存/快取在您慣用的映像存放庫中(根據您公司的映像策略)
返回 build-image 工具。建立或修改現有的環境檔案,以包含
BASE_IMAGE_URL
環境金鑰,其值設定為新的 docker 映像登錄路徑:BASE_IMAGE_URL=<custom-image-registry-path>
使用環境檔案組建映像:
./build-image --accepteula -i <rpm> -e <path-to-env-file>
這些步驟可讓您指定完全不同的基礎映像。此功能僅支援基於 UBI 8 的映像(2022.1 及更早版本的 RHEL 和 CentOS 7.x),旨在幫助客戶建立更安全的映像。
使用 Tableau 指定的預設映像以外的基礎映像可能會導致產生的映像無法正常啟動或無法正常執行。若您選擇使用自訂基礎映像,則您有責任確保基礎映像可讓 Tableau Server 正常執行。我們建議使用預設基礎映像,除非您的組織出於某種原因(例如安全問題)對其無法接受。
自訂基礎映像必須基於 UBI 8(RHEL 7 或 CentOS 7 版本 2022.1 及更早版本)。使用任何其他發行版將導致映像不受支援。
用於內部存放庫的 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 或我們具有相依性的程式庫相關聯的 CVE。
- 與基礎 Linux 發行版相關聯的 CVE。
Tableau 負責與 Tableau Server 直接相關聯的 CVE。安全團隊會分析這些報告,確定影響和嚴重性,以幫助確定要解決問題的優先順序。基準修復優先順序和時間表將由原始 CVSS 嚴重性評分確定。除非存在暴露漏洞的可執行程式碼路徑,否則協力廠商元件安全性更新通常不會反向移植到舊版本中。
使用容器化分發模型時,客戶面臨著一系列圍繞作業系統層漏洞的不同挑戰。傳統上,借助 Tableau Server,Tableau 將集中精力交付安全的應用程式,而客戶則負責管理作業系統(Linux 或 Windows)。但是,透過容器化流程,作業系統(從 2023.3 版本開始的 UBI 8、CentOS 7.x 或用於 2022.1 及更早版本的 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>
Init 容器基本使用方式
Init 容器
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>