k8s_gateway

源代码 主页

启用方式
k8s_gateway:github.com/ori-edge/k8s_gateway

k8s_gateway - 插件,用于解析所有类型的外部 Kubernetes 资源。

描述

此插件与 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
}

使用上述配置,插件的行为方式如下

  1. 所有 DNS 查询首先将与已配置的区域匹配 - example.com
  2. 如果有匹配,下一步是将其与任何现有 Ingress 资源进行匹配。查找针对 Ingress 的 spec.rules[*].host 字段中配置的 FQDN 执行。在此阶段,可以使用从 .status.loadBalancer.ingress 收集的 IP 将结果返回给用户。
  3. 如果没有找到匹配的 Ingress,则使用 Services 对象继续搜索。由于服务本身没有域名,因此使用 serviceName.namespace 作为密钥执行查找。
  4. 如果有匹配,它将以类似的方式返回给最终用户,或者插件以 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 插件。