opensuse/salt-api本镜像包含SaltStack的salt-api组件,salt-api是SaltStack的REST API接口实现,用于通过HTTP请求与SaltStack生态系统交互。其核心功能包括执行Salt命令、获取minion节点状态、管理基础设施配置等,主要用途是将SaltStack的自动化能力集成到第三方系统或通过API实现远程运维操作。
salt-master服务,且容器网络可访问salt-master(建议使用Docker网络或宿主网络)。openssl自行生成或使用CA签发证书)。bashdocker run -d \ --name salt-api \ --network salt-net \ # 与salt-master共享网络(需提前创建) -v /host/path/to/config:/etc/salt/master.d \ # 挂载本地配置目录 -v /host/path/to/certs:/etc/salt/certs \ # 挂载SSL证书(若启用HTTPS) -e SALT_MASTER=salt-master \ # 指定salt-master地址(默认值:salt-master) -p 8000:8000 \ # 映射API端口(宿主端口:容器端口) salt-api
salt-api的核心配置通过/etc/salt/master.d/api.conf文件定义,示例配置(挂载到/etc/salt/master.d/api.conf):
yaml# /etc/salt/master.d/api.conf 示例 rest_cherrypy: port: 8000 # API监听端口 host: 0.0.0.0 # 监听地址(0.0.0.0表示允许所有网络访问) ssl_crt: /etc/salt/certs/server.crt # SSL证书路径 ssl_key: /etc/salt/certs/server.key # SSL私钥路径 disable_ssl: False # 启用HTTPS(设为True则禁用) external_auth: pam: # 使用PAM认证(其他选项:ldap、file等) admin: # 允许认证的用户(需在容器内存在对应系统用户) - .* # 允许执行所有Salt命令 - '@runner' # 允许访问runner模块 - '@wheel' # 允许访问wheel模块
api.conf)| 参数路径 | 描述 | 默认值 |
|---|---|---|
rest_cherrypy.port | API服务监听端口 | 8000 |
rest_cherrypy.host | 监听IP地址 | 0.0.0.0 |
rest_cherrypy.ssl_crt | SSL证书文件路径 | /etc/salt/certs/server.crt |
rest_cherrypy.ssl_key | SSL私钥文件路径 | /etc/salt/certs/server.key |
rest_cherrypy.disable_ssl | 是否禁用HTTPS | False(启用) |
external_auth | 认证配置节点,嵌套具体认证方式(如pam) | - |
| 环境变量 | 描述 | 默认值 |
|---|---|---|
SALT_MASTER | salt-master服务地址 | salt-master |
API_PORT | 容器内API监听端口 | 8000 |
LOG_LEVEL | 日志级别(debug/info/warn/error) | info |
进入容器并创建测试用户:
bashdocker exec -it salt-api bash useradd -m saltuser && passwd saltuser # 设置密码(如:saltpass123)
更新/etc/salt/master.d/api.conf,添加用户权限:
yamlexternal_auth: pam: saltuser: # 新增用户 - '*' # 允许执行所有命令
重启容器使配置生效:docker restart salt-api
bash# 使用curl发送HTTPS请求(-k忽略证书验证,生产环境建议使用可信证书) curl -k -X GET "https://localhost:8000/minions" \ -H "Accept: application/json" \ -u saltuser:saltpass123 # PAM认证用户密码
bashcurl -k -X POST "https://localhost:8000/run" \ -H "Content-Type: application/json" \ -u saltuser:saltpass123 \ -d '{ "client": "local", "tgt": "*", # 目标minion(*表示所有) "fun": "test.ping" # Salt模块函数(测试连通性) }'
成功响应示例:
json{ "return": [ { "minion1": true, "minion2": true } ] }






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务