説明
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
です。
また、TLS設定はgrpcプロキシ全体で「グローバル」であることに注意してください。異なるアップストリームに異なる 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
}
すべてのリクエストを3つのリゾルバ(そのうちの1つは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秒間キャッシュします。 9.9.9.9はTLSネゴシエーションで使用できないため、動作する設定にするには tls_servername
が必須であることに注意してください。
. {
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設定はgrpcプロキシ全体でグローバルです。異なるアップストリームに異なる tls_servername
が必要な場合は、運が悪いです。