etcd

ソース

etcd は、etcd からの SkyDNS サービスディスカバリを有効にします。

説明

etcd プラグインは、(旧)SkyDNS サービスディスカバリサービスを実装します。これは、一般的な DNS ゾーンデータプラグインとしては不適切です。DNS レコードタイプの一部のみが実装されており、サブドメインと委任はまったく処理されません。このプラグインは、ツリーを再帰的に下降し、見つかったすべてのレコードを返します。詳細については、以下の「特別な動作」を参照してください。

etcd インスタンスのデータは、メッセージのように SkyDNS としてエンコードされている必要があります。SkyDNS と同様に機能します。

etcd プラグインは、ネットワーク内の他のサーバーへの転送とクエリに、forward プラグインを広範囲に使用します。そのプラグインも有効になっている場合です。

構文

etcd [ZONES...]
  • ZONES etcd が権威を持つゾーン。

パスはデフォルトで /skydns ローカル etcd3 プロキシ (https://#:2379) になります。ゾーンが指定されていない場合、ブロックのゾーンがゾーンとして使用されます。

etcd [ZONES...] {
    fallthrough [ZONES...]
    path PATH
    endpoint ENDPOINT...
    credentials USERNAME PASSWORD
    tls CERT KEY CACERT
}
  • fallthrough ゾーンが一致したが、レコードを生成できない場合、リクエストを次のプラグインに渡します。[ZONES...] が省略された場合、プラグインが権威を持つすべてのゾーンに対してフォールスルーが発生します。特定のゾーン(例:in-addr.arpa および ip6.arpa)がリストされている場合、それらのゾーンに対するクエリのみがフォールスルーの対象となります。

  • PATH etcd 内のパス。デフォルトは「/skydns」です。

  • ENDPOINT etcd エンドポイント。デフォルトは「https://#:2379」です。

  • credentials は、etcd クラスタにアクセスするための USERNAMEPASSWORD を設定するために使用されます。

  • tls の後に続くのは

    • サーバー証明書がシステムにインストールされた CA によって署名されており、クライアント証明書が不要な場合、引数なし
    • サーバー証明書がシステム CA によって署名されておらず、クライアント証明書が不要な場合、CA PEM ファイルである単一の引数
    • サーバー証明書がシステムにインストールされた CA によって署名されており、クライアント証明書が必要な場合、証明書 PEM ファイルへのパスと、秘密鍵 PEM ファイルへのパスの 2 つの引数
    • サーバー証明書がシステムにインストールされた CA によって署名されておらず、クライアント証明書が必要な場合、証明書 PEM ファイルへのパス、クライアント秘密鍵 PEM ファイルへのパス、CA PEM ファイルへのパスの 3 つの引数。

特別な動作

etcd プラグインは、関連するエントリを検索するためにディレクトリ構造を利用します。たとえば、エントリ /skydns/test/skydns/mx には、/skydns/test/skydns/mx/a/skydns/test/skydns/mx/b などのエントリがあります。同様に、ディレクトリ /skydns/test/skydns/mx1 には、すべての mx1 エントリがあります。このプラグインは、レコードに対して(サブ)ツリー全体を検索することに注意してください。最初の例の場合、mx.skydns.test のクエリは、a および b レコードの両方の内容を返します。ディレクトリがさらに深く拡張されている場合、それらのレコードも返されます。

etcd3 では、階層キーのサポートが削除されました。これは、ディレクトリはなく、etcd3 にはプレフィックス付きのフラットキーのみがあることを意味します。ルックアップに対応するために、etcd プラグインは、/skydns/test/skydns/mx/a などのエントリを検索するために、プレフィックス /skydns/test/skydns/mx/ でルックアップを実行するようになりました。そして、/skydns/test/skydns/mx/ で何も見つからない場合は、/skydns/test/skydns/mx1 のようなエントリを検索するために /skydns/test/skydns/mx を検索します。

これにより、特定のケースで CoreDNS から etcd への 2 つのルックアップが発生します。

これは、すべてが完全に指定された、デフォルトの SkyDNS 設定です。

skydns.local {
    etcd {
        path /skydns
        endpoint https://#:2379
    }
    prometheus
    cache
    loadbalance
}

. {
    forward . 8.8.8.8:53 8.8.4.4:53
    cache
}

または、外部の指し示す CNAME を解決するときに、プロキシとアップストリームの基礎として /etc/resolv.conf を使用する設定。

skydns.local {
    etcd {
        path /skydns
    }
    cache
}

. {
    forward . /etc/resolv.conf
    cache
}

複数のエンドポイントもサポートされています。

etcd skydns.local {
    endpoint https://#:2379 https://#:4001
...

これらの例を開始する前に、こちらで説明されているように、etcdctletcdv3 API を使用)をセットアップしてください。これは、etcd サーバーにサンプルキーを配置するのに役立ちます。

必要に応じて、curl を使用して etcd サーバーをポップレートできますが、curl の場合、エンドポイント URL は etcd のバージョンによって異なります。たとえば、etcd v3.2 以前は [CLIENT-URL]/v3alpha/* のみを使用しますが、etcd v3.5 以降は [CLIENT-URL]/v3/* を使用します。また、キーと値は JSON ペイロードで base64 でエンコードされている必要があります。etcdctl を使用すると、これらの詳細は自動的に処理されます。詳細については、このドキュメントを確認してください。

リバースゾーン

リバースゾーンがサポートされています。リバースについても権威があるという事実を CoreDNS に認識させる必要があります。たとえば、10.0.0.0/24 のリバースを追加する場合は、ゾーンのリストに 0.0.10.in-addr.arpa ゾーンを追加する必要があります。Corefile のスニペットを表示します。

etcd skydns.local 10.0.0.0/24 {
...

次に、ゾーンにリバースレコードを設定する必要があります。ここでは、reverse.skydns.local を指す 10.0.0.127 のリバースを追加します。

% etcdctl put /skydns/arpa/in-addr/10/0/0/127 '{"host":"reverse.skydns.local."}'

dig でのクエリ

% dig @localhost -x 10.0.0.127 +short
reverse.skydns.local.

A レコードとしてのゾーン名

ゾーン名自体は A レコードとして使用できます。この動作は、ゾーンの ETCD パスに特別なエントリを書き込むことで実現できます。たとえば、ゾーンの名前が skydns.local の場合、次の方法でこのゾーンの A レコードを作成できます。

% etcdctl put /skydns/local/skydns/ '{"host":"1.1.1.1","ttl":60}'

ゾーン名自体をクエリすると、作成された A レコードが返されます。

% dig +short skydns.local @localhost
1.1.1.1

ゾーン名に DNS RR を使用する場合は、次のように設定できます。

% etcdctl put /skydns/local/skydns/x1 '{"host":"1.1.1.1","ttl":60}'
% etcdctl put /skydns/local/skydns/x2 '{"host":"1.1.1.2","ttl":60}'

ゾーン名をクエリすると、次の応答が得られます。

% dig +short skydns.local @localhost
1.1.1.1
1.1.1.2

AAAA レコードとしてのゾーン名

ゾーン名にも AAAA レコードを使用する場合は、次のように設定できます。

% etcdctl put /skydns/local/skydns/x3 '{"host":"2003::8:1","ttl":60}'
% etcdctl put /skydns/local/skydns/x4 '{"host":"2003::8:2","ttl":60}'

AAAA のゾーン名をクエリすると、次の応答が得られます。

% dig +short skydns.local AAAA @localhost
2003::8:1
2003::8:2

SRV レコード

SRV レコードを使用する場合は、次のように設定できます。

% etcdctl put /skydns/local/skydns/x5 '{"host":"skydns-local.server","ttl":60,"priority":10,"port":8080}'

キー hostSRVtarget であることに注意してください。したがって、ドメイン名である必要があります。

SRV のゾーン名をクエリすると、次の応答が得られます。

% dig +short skydns.local SRV @localhost
10 100 8080 skydns-local.server.

TXT レコード

TXT レコードを使用する場合は、次のように設定できます。

% etcdctl put /skydns/local/skydns/x6 '{"ttl":60,"text":"this is a random text message."}'
% etcdctl put /skydns/local/skydns/x7 '{"ttl":60,"text":"this is a another random text message."}'

TXT のゾーン名をクエリすると、次の応答が得られます。

% dig +short skydns.local TXT @localhost
"this is a random text message."
"this is a another random text message."

参照

A および AAAA 応答を ラウンドロビン にする場合は、loadbalance プラグインを参照してください。