説明
このプラグインは、バックエンドとして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
参照
マニュアルを参照してください。