# Server 命令行 ## 概述 `spire-server` 提供丰富的命令行接口用于管理和操作 SPIRE Server。 ## 全局选项 ```bash spire-server [全局选项] <命令> [命令选项] ``` | 选项 | 描述 | |------|------| | `-socketPath` | Server socket 路径 | | `-output` | 输出格式: pretty, json | ## 服务命令 ### run 启动 SPIRE Server: ```bash spire-server run -config /path/to/server.conf ``` | 选项 | 描述 | |------|------| | `-config` | 配置文件路径 | | `-logLevel` | 覆盖日志级别 | | `-expandEnv` | 展开环境变量 | ### validate 验证配置文件: ```bash spire-server validate -config /path/to/server.conf ``` ### healthcheck 检查 Server 健康状态: ```bash spire-server healthcheck -socketPath /tmp/spire-server/private/api.sock ``` ## 条目管理 ### entry create 创建注册条目: ```bash # 基本用法 spire-server entry create \ -spiffeID spiffe://example.org/myworkload \ -parentID spiffe://example.org/myagent \ -selector unix:uid:1000 # 带 TTL spire-server entry create \ -spiffeID spiffe://example.org/myworkload \ -parentID spiffe://example.org/myagent \ -selector k8s:ns:default \ -selector k8s:sa:myapp \ -ttl 3600 # 带 DNS 名称 spire-server entry create \ -spiffeID spiffe://example.org/myworkload \ -parentID spiffe://example.org/myagent \ -selector unix:uid:1000 \ -dns myservice.example.org # 带联邦信任域 spire-server entry create \ -spiffeID spiffe://example.org/myworkload \ -parentID spiffe://example.org/myagent \ -selector unix:uid:1000 \ -federatesWith spiffe://partner.org ``` | 选项 | 描述 | |------|------| | `-spiffeID` | 工作负载的 SPIFFE ID | | `-parentID` | 父条目的 SPIFFE ID | | `-selector` | 选择器(可多次使用)| | `-ttl` | SVID TTL(秒)| | `-dns` | DNS 名称(可多次使用)| | `-federatesWith` | 联邦信任域 | | `-admin` | 标记为管理员 | | `-downstream` | 标记为下游 | | `-storeSvid` | 存储 SVID | ### entry show 显示注册条目: ```bash # 显示所有条目 spire-server entry show # 按 SPIFFE ID 过滤 spire-server entry show -spiffeID spiffe://example.org/myworkload # 按父 ID 过滤 spire-server entry show -parentID spiffe://example.org/myagent # 按选择器过滤 spire-server entry show -selector unix:uid:1000 # JSON 输出 spire-server entry show -output json ``` ### entry update 更新注册条目: ```bash spire-server entry update \ -entryID \ -spiffeID spiffe://example.org/newid \ -selector unix:uid:2000 ``` ### entry delete 删除注册条目: ```bash spire-server entry delete -entryID ``` ### entry count 统计注册条目: ```bash spire-server entry count ``` ## Token 管理 ### token generate 生成 Join Token: ```bash # 基本用法 spire-server token generate -spiffeID spiffe://example.org/myagent # 自定义 TTL(秒) spire-server token generate -spiffeID spiffe://example.org/myagent -ttl 600 # JSON 输出 spire-server token generate -spiffeID spiffe://example.org/myagent -output json ``` ## Bundle 管理 ### bundle show 显示信任包: ```bash # 显示本地信任包 spire-server bundle show # JSON 格式 spire-server bundle show -format spiffe ``` ### bundle set 设置联邦信任包: ```bash spire-server bundle set \ -id spiffe://partner.org \ -path /path/to/partner-bundle.json ``` ### bundle list 列出所有信任包: ```bash spire-server bundle list ``` ### bundle delete 删除联邦信任包: ```bash spire-server bundle delete -id spiffe://partner.org ``` ## Agent 管理 ### agent list 列出所有 Agent: ```bash spire-server agent list ``` ### agent show 显示 Agent 详情: ```bash spire-server agent show -spiffeID spiffe://example.org/myagent ``` ### agent evict 驱逐 Agent: ```bash spire-server agent evict -spiffeID spiffe://example.org/myagent ``` ### agent ban 禁止 Agent: ```bash spire-server agent ban -spiffeID spiffe://example.org/myagent ``` ### agent count 统计 Agent 数量: ```bash spire-server agent count ``` ## 实用命令 ### x509 mint 手动颁发 X.509-SVID: ```bash spire-server x509 mint \ -spiffeID spiffe://example.org/myworkload \ -ttl 3600 \ -write /path/to/output ``` ### jwt mint 手动颁发 JWT-SVID: ```bash spire-server jwt mint \ -spiffeID spiffe://example.org/myworkload \ -audience https://api.example.org \ -ttl 300 ``` ## 输出格式 大多数命令支持 `-output` 选项: - `pretty`: 人类可读格式(默认) - `json`: JSON 格式 ```bash # JSON 输出 spire-server entry show -output json | jq . # 结合 jq 过滤 spire-server entry show -output json | jq '.entries[] | select(.spiffeId | contains("web"))' ``` ## 脚本示例 ### 批量创建条目 ```bash #!/bin/bash SERVICES=("web" "api" "worker") for service in "${SERVICES[@]}"; do spire-server entry create \ -spiffeID "spiffe://example.org/${service}" \ -parentID "spiffe://example.org/node" \ -selector "k8s:ns:production" \ -selector "k8s:sa:${service}" done ``` ### 导出和导入条目 ```bash # 导出 spire-server entry show -output json > entries.json # 导入(需要自定义脚本) cat entries.json | jq -c '.entries[]' | while read entry; do spiffe_id=$(echo "$entry" | jq -r '.spiffeId') parent_id=$(echo "$entry" | jq -r '.parentId') selectors=$(echo "$entry" | jq -r '.selectors[] | "-selector \(.type):\(.value)"' | tr '\n' ' ') eval "spire-server entry create -spiffeID $spiffe_id -parentID $parent_id $selectors" done ``` ## 下一步 了解 {doc}`/4.server/api` 以编程方式与 Server 交互。