mysql

ソース ホーム

こちらを有効にする
mysql:github.com/cloud66-oss/coredns_mysql

mysql - CoreDNS用のMySQLバックエンド

説明

このプラグインは、バックエンドとしてMySQLを使用してDNSレコードを格納します。格納されたレコードは、CoreDNSで提供されます。このバックエンドでは、他のシステムで共有できるシンプルな単一テーブルデータ構造を使用して、DNSサーバーへのレコードの追加や削除を行います。プラグインには状態が格納されないので、同じデータベースでサポートされるCoreDNSの複数インスタンスをスピンすることで、サービスをスケールアウトできます。

構文

mysql {
    dsn DSN
    [table_prefix TABLE_PREFIX]
    [max_lifetime MAX_LIFETIME]
    [max_open_connections MAX_OPEN_CONNECTIONS]
    [max_idle_connections MAX_IDLE_CONNECTIONS]
    [ttl DEFAULT_TTL]
    [zone_update_interval ZONE_UPDATE_INTERVAL]
}
  • dsn MySQLのDSN(https://github.com/go-sql-driver/mysqlの例を参照)。DSNに$ENV_NAME形式を使用すると、環境変数の値に置き換えられます。
  • table_prefix MySQLテーブルのプレフィックス。デフォルトはcoredns_です。
  • max_lifetime SQL接続の期間(Go言語形式)。デフォルトは1分です。
  • max_open_connections データベースサーバーへの最大オープン接続数。デフォルトは10です。
  • max_idle_connections データベース接続プールの最大アイドル接続数。デフォルトは10です。
  • ttl 秒単位で指定されたTTLのないレコードのデフォルトのTTL。デフォルトは360(秒)です。
  • zone_update_interval データベースからすべてのゾーンを読み込む間の最大時間間隔。デフォルトは10分です。

サポートされているレコードタイプ

A、AAAA、CNAME、SOA、TXT、NS、MX、CAA、SRV。このバックエンドはAXFR要求をサポートしません。また、ワイルドカードレコードもまだサポートしていません。

セットアップ(外部プラグインとして)

plugin.cfgファイルに、外部プラグインとしてファイルを追加します

mysql:github.com/cloud66-oss/coredns_mysql

その後、次を実行します。

$ go generate
$ go build

表示されたプロンプトに従って、CoreDNSのコードに必要なモジュールを追加します。

データベースのセットアップ

このプラグインはまだそれらの使用のためにデータベーススキーマを作成したり、マイグレーションしたりしません。データベースとテーブルを作成するには、次のテーブル構造(テーブル名プレフィックスに注意)を使用します。

CREATE TABLE `coredns_records` (
    `id` INT NOT NULL AUTO_INCREMENT,
	`zone` VARCHAR(255) NOT NULL,
	`name` VARCHAR(255) NOT NULL,
	`ttl` INT DEFAULT NULL,
	`content` TEXT,
	`record_type` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

レコードのセットアップ

このプラグインによって提供される各レコードは、CoreDNSによってその提供が許可されているゾーンに属する必要があります。次に例を示します。

-- Insert batch #1
INSERT INTO coredns_records (zone, name, ttl, content, record_type) VALUES
('example.org.', 'foo', 30, '{"ip": "1.1.1.1"}', 'A'),
('example.org.', 'foo', '60', '{"ip": "1.1.1.0"}', 'A'),
('example.org.', 'foo', 30, '{"text": "hello"}', 'TXT'),
('example.org.', 'foo', 30, '{"host" : "foo.example.org.","priority" : 10}', 'MX');

これらは以下のようにdigを使用してクエリできます

$ dig A MX foo.example.org 

参照

マニュアルを参照してください。