Skip to content

本文为 SPIRE 官方文档 plugin_agent_nodeattestor_http_challenge 的中文译本,以英文原文为准。 🔗 穿越源码分析:Agent 详解 · NodeAttestor

Agent 插件:NodeAttestor "http_challenge"

必须与服务端 http_challenge 插件配合使用

http_challenge 插件通过 HTTP 进行握手(handshake),以确保 Agent 运行在一个有效的 DNS 名称上。

服务端 http_challenge 插件所生成的 SPIFFE ID 基于 Agent 的 DNS 名称。该 SPIFFE ID 形如:

xml
spiffe://<trust_domain>/spire/agent/http_challenge/<hostname>
配置项说明默认值
hostname用于握手的主机名(hostname)。若未设置,将自动检测。
agentname本主机上该 Agent 的名称。如果你在同一主机上有多个 Agent 分别绑定到不同的 SPIRE Server 并共享同一端口,该项会很有用。"default"
port监听的端口。若未指定,将使用一个随机值。random
advertised_port告知 Server 回调(call back)时使用的端口。$port

如果 advertised_port != port,你将需要在这两个端口之间设置一个 HTTP 代理。如果你已经在 80 端口上运行了一个 Web 服务器,这会很有用。

一个示例配置:

hcl
    NodeAttestor "http_challenge" {
        plugin_data {
            port = 80
        }
    }

代理(Proxies)

假设你希望使用 80 端口进行校验,以便对互联网防火墙更友好。如果你已经在 80 端口上运行了一个 Web 服务器,或者希望让多个 Agent 使用不同的 SPIRE Server 却共用同一端口,你可以让你的 Web 服务器通过设置代理,将 /.well-known/spiffe/nodeattestor/http_challenge/$agentname 代理转发到 http://localhost:$port/.well-known/spiffe/nodeattestor/http_challenge/$agentname,从而转发给 SPIRE Agent。

一个 SPIRE Agent 配置示例:

hcl
    NodeAttestor "http_challenge" {
        plugin_data {
            port = 8080
            advertised_port = 80
        }
    }