Mistral 客户端高级用法

配置 Keystone 认证

如果 Mistral 使用 Keystone 进行认证,则环境应包含认证变量

$ export OS_AUTH_URL=http://<Keystone_host>:5000/v3
$ export OS_TENANT_NAME=tenant
$ export OS_USERNAME=user
$ export OS_PASSWORD=secret
$ export OS_MISTRAL_URL=http://<Mistral host>:8989/v2
  ( optional, by default URL=https://:8989/v2)

并且在通过 https 对 Keystone 进行认证的情况下

$ export OS_CACERT=<path_to_ca_cert>

注意

在客户端,我们可以使用 Keystone 的两个认证版本 - v2.0 和 v3。但服务器仅支持 v3。

您可以通过输入以下命令查看可用命令列表

$ mistral --help

为了确保 Mistral 客户端正常工作,请输入

$ mistral workbook-list

配置 Keycloak 认证

Mistral 还支持通过 OpenID Connect 协议对 Keycloak 服务器进行认证。为了在客户端使用它,环境应如下所示

$ export MISTRAL_AUTH_TYPE=keycloak-oidc
$ export OS_AUTH_URL=https://<Keycloak-server-host>:<Keycloak-server-port>/auth
$ export OS_TENANT_NAME=my_keycloak_realm
$ export OS_USERNAME=admin
$ export OS_PASSWORD=secret
$ export OPENID_CLIENT_ID=my_keycloak_client
$ export OPENID_CLIENT_SECRET=my_keycloak_client_secret
$ export OS_MISTRAL_URL=http://<Mistral host>:8989/v2
 (optional, by default URL=https://:8989/v2)

注意

变量 OS_TENANT_NAME、OS_USERNAME 和 OS_PASSWORD 用于 Keystone 和 Keycloak 认证。在 Keycloak 的情况下,OS_TENANT_NAME 需要对应 Keycloak realm。与 Keystone 不同,Keycloak 需要提前注册一个访问受 Keycloak 保护的资源(在我们的例子中是 Mistral 服务器)的客户端。因此,OPENID_CLIENT_ID 和 OPENID_CLIENT_SECRET 变量应分配为在 Keycloak 中注册的正确值。

与 Keystone 类似,OS_CACERT 变量也可以添加以提供 SSL/TLS 验证的证书

$ export OS_CACERT=<path_to_ca_cert>

为了禁用 SSL/TLS 证书验证,需要将 MISTRALCLIENT_INSECURE 变量设置为 True

$ export MISTRALCLIENT_INSECURE=True

定位未预配置的云

Mistral 能够在外围 OpenStack 云上执行工作流,这些云与 mistral.conf 文件中 keystone_authtoken 部分中定义的云不同。(更多详细信息请参见 配置和策略指南)。

例如,如果 Mistral 服务器配置为使用 http://keystone1.example.com 云进行认证,而用户希望在 http://keystone2.example.com 云上执行工作流。

mistral.conf 的配置如下

[keystone_authtoken]
www_authenticate_uri = http://keystone1.example.com:5000/v3
...

客户端参数如下

$ export OS_AUTH_URL=http://keystone1.example.com:5000/v3
$ export OS_USERNAME=mistral_user
...
$ export OS_TARGET_AUTH_URL=http://keystone2.example.com:5000/v3
$ export OS_TARGET_USERNAME=cloud_user
...

注意

每个 OS_* 参数都有一个 OS_TARGET_* 对应的参数。有关更多详细信息,请查看 mistral –help

OS_* 参数用于使用 Mistral 对用户进行认证和授权,即检查用户是否允许使用 Mistral 服务。而 OS_TARGET_* 参数用于定义在外部云 keystone2.example.com 上执行工作流的用户。

用例

在 Mistral 中进行认证并使用不同的用户执行 OpenStack 操作

作为 Mistral 的用户,我希望使用云上的不同用户执行工作流。

在任何 OpenStack 云上执行工作流

作为 Mistral 的用户,我希望在自己选择的云上执行工作流。

特殊情况

在没有 OpenStack 配置的情况下使用 Mistral:

借助定位功能,可以在 Mistral 服务器端没有额外配置的情况下,在任何任意云上执行工作流。如果 Mistral 服务器中的认证已关闭(mistral.conf 中的 Pecan 的 auth_enable = False 选项),则无需设置 keystone_authtoken 部分。即使 Mistral 未部署在 OpenStack 环境中(即没有 Keystone 集成),也可以使用外部 OpenStack 云。

使用此设置,以下调用将返回 heat stack 列表

$ mistral \
    --os-target-auth-url=http://keystone2.example.com:5000/v3 \
    --os-target-username=testuser \
    --os-target-tenant=testtenant \
    --os-target-password="MistralRuleZ" \
    run-action heat.stacks_list

此设置特别适用于 Mistral 以独立模式使用时,即 Mistral 服务不是 OpenStack 云的一部分,而是单独运行。

请注意,只有 OS-TARGET-* 参数才能启用此操作。