Server 命令行

概述

spire-server 提供丰富的命令行接口用于管理和操作 SPIRE Server。

全局选项

spire-server [全局选项] <命令> [命令选项]

选项

描述

-socketPath

Server socket 路径

-output

输出格式: pretty, json

服务命令

run

启动 SPIRE Server:

spire-server run -config /path/to/server.conf

选项

描述

-config

配置文件路径

-logLevel

覆盖日志级别

-expandEnv

展开环境变量

validate

验证配置文件:

spire-server validate -config /path/to/server.conf

healthcheck

检查 Server 健康状态:

spire-server healthcheck -socketPath /tmp/spire-server/private/api.sock

条目管理

entry create

创建注册条目:

# 基本用法
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

显示注册条目:

# 显示所有条目
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

更新注册条目:

spire-server entry update \
    -entryID <entry-id> \
    -spiffeID spiffe://example.org/newid \
    -selector unix:uid:2000

entry delete

删除注册条目:

spire-server entry delete -entryID <entry-id>

entry count

统计注册条目:

spire-server entry count

Token 管理

token generate

生成 Join Token:

# 基本用法
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

显示信任包:

# 显示本地信任包
spire-server bundle show

# JSON 格式
spire-server bundle show -format spiffe

bundle set

设置联邦信任包:

spire-server bundle set \
    -id spiffe://partner.org \
    -path /path/to/partner-bundle.json

bundle list

列出所有信任包:

spire-server bundle list

bundle delete

删除联邦信任包:

spire-server bundle delete -id spiffe://partner.org

Agent 管理

agent list

列出所有 Agent:

spire-server agent list

agent show

显示 Agent 详情:

spire-server agent show -spiffeID spiffe://example.org/myagent

agent evict

驱逐 Agent:

spire-server agent evict -spiffeID spiffe://example.org/myagent

agent ban

禁止 Agent:

spire-server agent ban -spiffeID spiffe://example.org/myagent

agent count

统计 Agent 数量:

spire-server agent count

实用命令

x509 mint

手动颁发 X.509-SVID:

spire-server x509 mint \
    -spiffeID spiffe://example.org/myworkload \
    -ttl 3600 \
    -write /path/to/output

jwt mint

手动颁发 JWT-SVID:

spire-server jwt mint \
    -spiffeID spiffe://example.org/myworkload \
    -audience https://api.example.org \
    -ttl 300

输出格式

大多数命令支持 -output 选项:

  • pretty: 人类可读格式(默认)

  • json: JSON 格式

# JSON 输出
spire-server entry show -output json | jq .

# 结合 jq 过滤
spire-server entry show -output json | jq '.entries[] | select(.spiffeId | contains("web"))'

脚本示例

批量创建条目

#!/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

导出和导入条目

# 导出
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

下一步

了解 Server API 以编程方式与 Server 交互。