Agent 命令行
概述
spire-agent 提供命令行接口用于运行和管理 SPIRE Agent。
服务命令
run
启动 SPIRE Agent:
# 基本启动
spire-agent run -config /path/to/agent.conf
# 使用 join token
spire-agent run -config /path/to/agent.conf -joinToken <token>
# 覆盖日志级别
spire-agent run -config /path/to/agent.conf -logLevel DEBUG
选项 |
描述 |
|---|---|
|
配置文件路径 |
|
一次性 join token |
|
覆盖日志级别 |
|
展开环境变量 |
validate
验证配置文件:
spire-agent validate -config /path/to/agent.conf
healthcheck
检查 Agent 健康状态:
spire-agent healthcheck -socketPath /tmp/spire-agent/public/api.sock
选项 |
描述 |
|---|---|
|
Agent socket 路径 |
|
浅层检查(不验证 Server 连接) |
API 命令
api fetch
从 Workload API 获取身份。
获取 X.509-SVID
# 获取所有 SVID
spire-agent api fetch x509
# 指定 socket 路径
spire-agent api fetch x509 -socketPath /tmp/spire-agent/public/api.sock
# 写入文件
spire-agent api fetch x509 -write /path/to/output
# 静默模式
spire-agent api fetch x509 -silent
输出文件:
svid.0.pem: 第一个 SVID 证书svid.0.key: 第一个 SVID 私钥bundle.0.pem: 信任包
获取 JWT-SVID
# 获取 JWT
spire-agent api fetch jwt -audience https://api.example.org
# 多个受众
spire-agent api fetch jwt -audience https://api.example.org -audience https://web.example.org
# 指定 SPIFFE ID
spire-agent api fetch jwt -audience https://api.example.org -spiffeID spiffe://example.org/myworkload
选项 |
描述 |
|---|---|
|
JWT 受众(可多次使用) |
|
请求特定 SPIFFE ID |
|
Agent socket 路径 |
api watch
持续监视 SVID 更新:
# 监视 X.509 SVID
spire-agent api watch
# 输出到文件
spire-agent api watch -output /path/to/output
api validate jwt
验证 JWT-SVID:
spire-agent api validate jwt -audience https://api.example.org -svid <jwt-token>
选项 |
描述 |
|---|---|
|
期望的受众 |
|
要验证的 JWT token |
实用示例
调试工作负载证明
# 以当前用户身份获取 SVID
spire-agent api fetch x509 -socketPath /tmp/spire-agent/public/api.sock
# 查看返回的 SVID
openssl x509 -in svid.0.pem -text -noout
检查证书内容
# 获取 SVID 并检查
spire-agent api fetch x509 -write /tmp/svid -socketPath /tmp/spire-agent/public/api.sock
# 查看证书详情
openssl x509 -in /tmp/svid/svid.0.pem -text -noout
# 查看 SPIFFE ID
openssl x509 -in /tmp/svid/svid.0.pem -text -noout | grep URI
测试 mTLS
# 获取证书
spire-agent api fetch x509 -write /tmp/svid
# 使用 curl 测试
curl --cert /tmp/svid/svid.0.pem \
--key /tmp/svid/svid.0.key \
--cacert /tmp/svid/bundle.0.pem \
https://api.example.org/
监控 SVID 轮换
#!/bin/bash
# 监控 SVID 轮换脚本
while true; do
spire-agent api fetch x509 -write /tmp/svid -silent
EXPIRY=$(openssl x509 -in /tmp/svid/svid.0.pem -enddate -noout | cut -d= -f2)
SPIFFEID=$(openssl x509 -in /tmp/svid/svid.0.pem -text -noout | grep -o 'URI:spiffe://[^,]*')
echo "$(date): $SPIFFEID expires $EXPIRY"
sleep 30
done
JWT 验证测试
# 获取 JWT
JWT=$(spire-agent api fetch jwt -audience https://api.example.org | grep -o 'Token: .*' | cut -d' ' -f2)
# 解码 JWT(需要 jq)
echo "$JWT" | cut -d. -f2 | base64 -d | jq .
# 验证 JWT
spire-agent api validate jwt -audience https://api.example.org -svid "$JWT"
输出格式
X.509 获取输出
Received 1 svid after 0.123456789s
SPIFFE ID: spiffe://example.org/myworkload
SVID Valid After: 2026-02-03 00:00:00 +0000 UTC
SVID Valid Until: 2026-02-03 01:00:00 +0000 UTC
CA #1 Valid After: 2026-02-03 00:00:00 +0000 UTC
CA #1 Valid Until: 2026-02-04 00:00:00 +0000 UTC
JWT 获取输出
Token: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlM2UVQ...
SPIFFE ID: spiffe://example.org/myworkload
Issued At: 2026-02-03 00:00:00 +0000 UTC
Expires At: 2026-02-03 00:05:00 +0000 UTC
Audience: [https://api.example.org]
故障排除
常见错误
无法连接 Agent:
# 检查 socket 文件
ls -la /tmp/spire-agent/public/api.sock
# 检查 Agent 进程
ps aux | grep spire-agent
# 检查 Agent 日志
journalctl -u spire-agent -f
无法获取 SVID:
# 检查注册条目
spire-server entry show
# 验证选择器
# 以目标用户身份运行
sudo -u appuser spire-agent api fetch x509
JWT 验证失败:
# 检查受众是否匹配
spire-agent api validate jwt -audience <correct-audience> -svid <token>
# 检查 JWT 是否过期
echo "<token>" | cut -d. -f2 | base64 -d | jq '.exp'
下一步
了解 Workload API 以编程方式使用 Workload API。