说明
grpc 插件支持 gRPC 和 TLS。
此插件每个服务器块只能使用一次。
语法
其最基本形式为
grpc FROM TO...
- FROM 是要代理的请求的匹配基本域。
- TO… 是要代理到的目标端点。上游数上限为 15。
首批使用时,会将多个上游随机化(参见 policy
)。如果代理返回错误,则将尝试列表中的下一个上游。
扩展语法还有其他参数可用
grpc FROM TO... {
except IGNORED_NAMES...
tls CERT KEY CA
tls_servername NAME
policy random|round_robin|sequential
}
-
FROM 和 TO…同如上。
-
except
中的 IGNORED_NAMES 是不进行代理的域的空间分隔列表。将传递与这些名称都不匹配的请求。 -
tls
CERT KEY CA 定义 TLS 连接的 TLS 属性。意义如下文所述,可以提供 0 到 3 个参数tls
- 不使用客户端验证,使用系统 CA 验证服务器证书tls
CA - 不使用客户端验证,使用文件 CA 验证服务器证书tls
CERT KEY - 使用指定的证书/密钥对使用客户端验证。使用系统 CA 验证服务器证书tls
CERT KEY CA - 使用指定的证书/密钥对使用客户端验证。使用指定的 CA 文件验证服务器证书
-
tls_servername
NAME 允许你在 TLS 配置中设置服务器名称;例如,9.9.9.9 需要将其设置为dns.quad9.net
。此场景中仍然允许使用多个上游,但它们必须使用同一个tls_servername
。例如,将 9.9.9.9(QuadDNS)和 1.1.1.1(Cloudflare)混合不会成功。 -
policy
指定用于选择上游服务器的策略。默认值为random
。
还需要注意的是,对于整个 grpc 代理,TLS 配置是“全局”的,如果你需要不同的 tls-name
针对不同的上游,你很可能会失败。
指标
如果已启用监视(通过 prometheus 插件),则会导出以下指标
coredns_grpc_request_duration_seconds{to}
- 每次上游交互的持续时间。coredns_grpc_requests_total{to}
- 每次上游的查询计数。coredns_grpc_responses_total{to, rcode}
- 每个上游的 RCODE 计数。而且我们随机(这总是使用random
策略)喷洒到上游。
示例
代理 example.org
中的所有请求到在不同端口上运行的名称服务器
example.org {
grpc . 127.0.0.1:9005
}
在三个解析器之间负载平衡所有请求,其中一个解析器具有 IPv6 地址。
. {
grpc . 10.0.0.10:53 10.0.0.11:1053 [2003::1]:53
}
转发除 example.org
之外的所有请求
. {
grpc . 10.0.0.10:1234 {
except example.org
}
}
使用主机 resolv.conf
的名称服务器代理除 example.org
之外的所有内容
. {
grpc . /etc/resolv.conf {
except example.org
}
}
使用 TLS 协议代理所有对 9.9.9.9 的请求,并将每个答案最多缓存 30 秒。请注意,如果您希望设置正常工作,则 tls_servername
是强制性的,因为 9.9.9.9 不能用于 TLS 协商。
. {
grpc . 9.9.9.9 {
tls_servername dns.quad9.net
}
cache 30
}
或者来自同一提供商的多个上游
. {
grpc . 1.1.1.1 1.0.0.1 {
tls_servername cloudflare-dns.com
}
cache 30
}
将请求转发到监听 Unix 域套接字的本地上游。
. {
grpc . unix:///path/to/grpc.sock
}
错误
如果您需要为不同的上游使用不同的 tls_servername
,则 TLS 配置对整个 grpc 代理是全局的,您很可能不会成功。