描述
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 連線的屬性。可以提供 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
。
另請注意,如果您需要針對不同的上游使用不同的 tls-name
,則 TLS 設定對於整個 grpc 代理來說是「全域性的」,您將無法實現。
指標
如果啟用監控(透過 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 代理來說是全域性的,您將無法實現。