描述
此插件与 k8s_external 非常相似,但支持所有类型的 Kubernetes 外部资源 - Ingress、类型为 LoadBalancer 的服务和 networking.x-k8s.io/Gateway
(当该类型可用时)。
此插件依赖于它与 k8s API 服务器自己的连接,不会与现有的 kubernetes 插件共享任何代码。设想是此插件现在可以作为一个单独的实例(与内部 kube-dns 一起)进行部署,并作为 Kubernetes 集群的单个外部 DNS 接口。
语法
k8s_gateway [ZONE...]
您可以选择指定要监视的资源类型和响应中返回的默认 TTL,例如
k8s_gateway example.com {
resources Ingress
ttl 10
}
示例
. {
k8s_gateway example.com
}
使用上述配置,插件的行为方式如下
- 所有 DNS 查询首先将与已配置的区域匹配 -
example.com
- 如果有匹配,下一步是将其与任何现有 Ingress 资源进行匹配。查找针对 Ingress 的
spec.rules[*].host
字段中配置的 FQDN 执行。在此阶段,可以使用从.status.loadBalancer.ingress
收集的 IP 将结果返回给用户。 - 如果没有找到匹配的 Ingress,则使用 Services 对象继续搜索。由于服务本身没有域名,因此使用
serviceName.namespace
作为密钥执行查找。 - 如果有匹配,它将以类似的方式返回给最终用户,或者插件以 NXDOMAIN 响应。
支持的功能
k8s_gateway
根据配置中指定的区域以其外部 IP 地址解析 Kubernetes 资源。此插件将解析以下类型的资源
种类 | 匹配依据 | 外部 IP 地址来自 |
---|---|---|
Ingress | 来自 spec.rules[*].host 的所有 FQDN 匹配已配置的区域 |
.status.loadBalancer.ingress |
Service[*] | name.namespace 加上任何已配置的区域 |
.status.loadBalancer.ingress |
[*]: 仅解析类型为 LoadBalancer 的服务
当前只支持 A 类型查询,所有其他查询都将导致 NODATA 响应。
此插件不应该用于群集内 DNS 解析,并且默认情况下不包含默认上游的 kubernetes 插件。