在容器中设置 Qlik Data Gateway - Direct Access
上次更新日期:2026/9/30
本主题概述了如何设置容器化 Direct Access gateway。它提供了先决条件和安装说明,并介绍了在使用容器化 Direct Access gateway 时应了解的限制和注意事项。
信息注释自 Direct Access gateway 1.8.0 起支持。
什么是容器化的 Direct Access gateway?
您可以将 Direct Access gateway 部署到 Docker 容器中。这种类型的部署被称为容器化 Direct Access gateway。容器化 Direct Access gateway 部署支持 Linux、macOS 和 Windows。
容器化的 Direct Access gateway 为您的 Direct Access gateway 环境提供可移植性。
使用 Qlik Data Gateway - Direct Access 时的最佳实践
为了在使用 Qlik Data Gateway - Direct Access 时获得成功体验,强烈建议遵守以下最佳实践:
系统先决条件
本部分介绍使用容器化 Direct Access gateway 的要求。
软件要求
推荐硬件
最低硬件要求
最低硬件仅适用于使用较小的专用部署(开发、测试或生产)、持续低数据量和有限数量的并发重载的特定场景。
安装 Qlik Data Gateway - Direct Access
设置 Direct Access gateway 涉及需要在 Administration 活动中心和 Direct Access gateway 服务器上执行的步骤。
信息注释需要在 Administration 活动中心中执行的数据网关过程需要租户管理员权限。
阶段一:下载 Qlik Data Gateway - Direct Access
-
在 Administration 活动中心中,选择数据网关。
任何现有的数据网关都将列在一个表中,其中显示了每个网关的基本信息。
-
单击部署工具栏按钮。
部署数据网关对话框打开。
-
选择 数据网关 - 直接访问 - 容器化直接访问网关,接受 Qlik 客户协议,然后单击 下载。Direct Access gateway 设置文件 (docker-compose.qlik-data-gateway-direct-access.yml) 将下载到您的计算机。
阶段二:通过运行 Docker Compose 文件启动部署
要开始部署 Direct Access gateway,请运行以下命令:
docker compose -f docker-compose.qlik-data-gateway-direct-access.yml up
阶段四:注册数据网关
下一步是注册数据网关。 这可以通过 Administration 活动中心或在命令行中完成。
您还可以从命令行自动注册 Direct Access gateway,而无需使用 Administration 活动中心。此方法使用由 OAuth 客户端生成的短期会话令牌。
信息注释自动注册仅支持通过命令行进行。用于网关自动注册的 REST API 目前不可用。
先决条件
具有创建和管理 OAuth 客户端的租户管理员权限的 API 密钥。
通过自动注册注册网关
-
首先,您需要设置一个 Python 环境,以在 direct-access-agent 容器中生成 OAuth 客户端 ID 以及断言密钥(短期令牌)。按此顺序分别运行以下命令:
-
docker exec -it --user root direct-access-agent-1 bash
-
apt-get update && apt-get install -y python3 python3-pip
-
apt install python3.11-venv
-
python3 -m venv .venv
-
source .venv/bin/activate
-
pip install cryptography pyjwt
-
python3 generate_gateway_assertion.py --tenant-url <tenant-url>
-
对于上述列表中的最后一条命令,关注交互式提示,并在提供时复制 client_id(OAuth 客户端 ID)和 assertion。暂时将这些详细信息记录在纸上或保存到临时文本文件中——后续步骤中需要用到它们。
-
记下 client_id 和 assertion 后,使用以下命令清理 Python 环境:
deactivate
-
将 OAuth 客户端的同意方式设置为受信任。
curl "https://<tenant-url>/api/v1/oauth-clients/<client-id>/connection-configs/me" -X PATCH -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer <api-key>' -d '[{"op":"replace","path":"/consentMethod","value":"trusted"}]'
-
请求访问令牌。这还会触发自动创建网关所使用的机器人用户账户。
curl "https://<tenant-url>/oauth/token" -X POST -H 'content-type: application/x-www-form-urlencoded' -d "grant_type=client_credentials" -d "client_id=<client-id>" -d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" -d "client_assertion=<assertion>" -d "scope=admin.direct-access-gateways:register_gateway admin.direct-access-gateways:delete_gateway"
信息注释
如果断言已过期,请从虚拟环境中重新运行脚本。
-
查找自动创建的机器人用户。
curl "https://<tenant-url>/api/v1/users" -H 'accept: application/json' -H 'authorization: Bearer <API-key>'
-
复制 my-bot-client 的 ID。
-
创建“DAG 注册”角色。
curl "https://<tenant-url>/api/v1/roles" -X POST -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer <API-key>' -d '{"name":"DAG Registration","description":"Role for registering a gateway","assignedScopes":["admin.direct-access-gateways:register_gateway", "admin.direct-access-gateways:delete_gateway"]}'
-
为机器人用户分配租户级角色。
curl "https://<tenant-url>/api/v1/users/<bot-user-ID>" -X PATCH -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer <API-key>' -d ' [ { "op": "replace", "path": "/assignedRoles", "value": [ { "name": "DAG Registration" } ] } ]'
-
获取直接访问网关空间。
curl "https://<tenant-url>/api/v1/spaces" -H 'authorization: Bearer <API-key>'
-
复制 Direct Access Gateway 空间 ID。
-
将机器人用户添加到空间,并赋予 可编辑 权限。
curl "https://<tenant-url>/api/v1/spaces/<DAG-space-ID>/assignments" -X POST -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer <API-key>' -d '{"assigneeId": "<bot-user-ID>","roles": ["consumer","dataconsumer","producer"], "type": "user"}'
-
如果现有断言已过期,请生成新的断言。然后运行以下命令:
python3 generate_gateway_assertion.py --tenant-url <tenant-url>
-
在命令提示符中按照所需步骤进行操作。由于 OAuth 客户端已创建,需要使用此 API 调用更新 JWK:
curl "https://<tenant-url>/api/v1/oauth-clients/<client-ID>" -X PATCH -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer <API-key>' -d '[{"op":"replace","path":"/publicKeys/0/y","value":"<Y-value-from-JWK>"},{"op":"replace","path":"/publicKeys/0/x","value":"<X-value-from-JWK>"},{"op":"remove","path":"/publicKeys/0/use"},{"op":"replace","path":"/publicKeys/0/kid","value":"<kid-value-from-JWK>"}]'
-
注册网关:
dotnet ConnectorAgent.dll qcs register_gateway --tenant_url <tenant-url> --gateway_name <DAG-name> --gateway_description <DAG-description> --space_name <space-name> --client-id <client-ID> --assertion <assertion>
移除自动注册的网关
请按照以下步骤注销使用上文所述基于会话令牌的自动方法注册的网关。这些步骤还会删除为其创建的 OAuth 客户端、机器人用户和角色。
-
生成断言,如上一部分中所述。
-
删除网关:
dotnet ConnectorAgent.dll qcs delete_gateway --tenant_url <tenant-url> --gateway_name <gateway-name> --client-id <client-ID> --assertion <assertion>
-
查找为网关创建的机器人用户账户。
curl "https://<tenant-url>/api/v1/users" -H 'accept: application/json' -H 'authorization: Bearer <api-key>'
-
复制机器人 ID。
-
删除此机器人用户账户。
curl -X DELETE "https://<tenant-url>/api/v1/users/<bot-user-ID>" -H "Authorization: Bearer <api-key>"
-
查找为网关创建的“DAG 注册”角色。
curl "https://<tenant-url>/api/v1/roles?limit=1&filter=(name%20eq%20%22DAG%20Registration%22)" -H "Authorization: Bearer <api-key>"
-
复制角色 ID。
-
删除此角色。
curl -X DELETE "https://<tenant-url>/api/v1/roles/<role-ID> -H "Authorization: Bearer <api-key>"
-
删除 OAuth 客户端。
curl -X DELETE https://<tenant-url>/api/v1/oauth-clients/<OAuth-client-ID> -H "qlik-confirm-delete: <OAuth-client-ID>" -H "Authorization: Bearer <api-key>
阶段五:在 Direct Access gateway 服务器上启动 Qlik Data Gateway - Direct Access 服务
要启动 Qlik Data Gateway - Direct Access 服务,请启动 dcaas-dg 和 direct-access-agent 容器。
阶段六:将连接添加到数据源
参见 阶段六:将连接添加到数据源。
环境设置
本部分列出了 docker-compose.qlik-data-gateway-direct-access.yml 文件中的特定环境变量,您可能需要配置这些变量以通过网关正确连接您的数据源。
支持的数据源