说明
此插件允许一个附加区域解析 Kubernetes 服务和无头服务的外部 IP 地址。仅当已加载kubernetes插件时,此插件才有用。
该插件使用外部区域解析群集内 IP 地址。它只处理 A、AAAA、SRV 和 PTR 记录的查询;为了将其变成一个真正的 DNS 区域,它处理区域顶点的 SOA 和 NS 查询。
默认情况下,区域的顶点如下所示(假设使用的是 example.org
区域)
example.org. 5 IN SOA ns1.dns.example.org. hostmaster.example.org. (
12345 ; serial
14400 ; refresh (4 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
5 ; minimum (4 hours)
)
example.org 5 IN NS ns1.dns.example.org.
ns1.dns.example.org. 5 IN A ....
ns1.dns.example.org. 5 IN AAAA ....
请注意,我们使用 dns
子域进行 DNS 所需的记录(参见 apex
指令)。另请注意 SOA 的序列号是静态的。名称服务器记录的 IP 地址是 CoreDNS 服务的 IP 地址。
k8s_external 插件处理子域 dns
和区域自身的顶点;所有其他查询都解析为群集中的地址。
语法
k8s_external [ZONE...]
- ZONES k8s_external 应具有授权的区域。
如果您想更改顶点域或为返回的记录使用不同的 TTL,可以使用此扩展语法。
k8s_external [ZONE...] {
apex APEX
ttl TTL
}
- APEX 是用于顶点记录的名称(DNS 标签);默认值为
dns
。 ttl
允许您为响应设置自定义TTL。默认值为 5(秒)。
如果您想启用无头服务解析,可以通过添加 headless
选项来执行此操作。
k8s_external [ZONE...] {
headless
}
- 如果存在设置了外部 IP 的无头服务,将解析外部 IP
如果查询的域不存在,可以通过添加 fallthrough
选项来传递到下一个插件。
k8s_external [ZONE...] {
fallthrough [ZONE...]
}
示例
启用 example.org
下的名称解析为群集内 DNS 地址。
. {
kubernetes cluster.local
k8s_external example.org
}
使用上面的 Corefile,以下服务将获得 test.default.example.org
的A
记录,IP 地址为 192.168.200.123
。
apiVersion: v1
kind: Service
metadata:
name: test
namespace: default
spec:
clusterIP: None
externalIPs:
- 192.168.200.123
type: ClusterIP
k8s_external 插件可与 transfer 插件结合使用以启用区域传输。不支持通知。
. {
transfer example.org {
to *
}
kubernetes cluster.local
k8s_external example.org
}
使用 fallthrough
选项后,如果查询的域不存在,则会将其传递到与该区域匹配的下一个插件。
. {
kubernetes cluster.local
k8s_external example.org {
fallthrough
}
forward . 8.8.8.8
}
另请参阅
有关一些背景,请参阅 解析外部 IP 地址。以及 带有负载均衡器 IP 的服务的 A 记录。