k8s_external

源代码

k8s_external 解析 Kubernetes 集群外部的负载均衡器、外部 IP,如果启用,还会解析无头服务。

说明

此插件允许一个附加区域解析 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.orgA 记录,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 记录