dns - 使用 udp 协议时,Traefik 背后的 hashcorp consul DNS 没有响应
问题描述
我在 Traefik 2 后面的 kubernetes 集群中运行了我的领事服务器(使用官方 helm chart 部署的 v1.9.1),我注册了一个客户端,现在我想使用 dig 命令获取它的 IP 地址。
当我将 dig 命令与 tcp 协议一起使用时,这里的问题它可以工作,但如果使用 udp 则不是
# Works
dig @<ip_address_traefik> -p 5053 <registered_node_name>.node.consul. +tcp
# Doesn't work
dig @<ip_address_traefik> -p 5053 <registered_node_name>.node.consul.
5053:是我用于我的 dns 流量的端口
Traefik 监听 5053/tcp (dns-tcp) 和 5053/udp (dns-udp) 入口点
我用来将流量路由到 consul-dns k8s 服务的 ingressRouteTCP 和 ingressRouteUDP
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: consul-dns-tcp
spec:
entryPoints:
- dns-tcp
routes:
- match: HostSNI(`*`)
kind: Rule
services:
- name: consul-dns
port: 53
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteUDP
metadata:
name: consul-dns-udp
spec:
entryPoints:
- dns-udp
routes:
- services:
- name: consul-dns
port: 53
如果我 ssh 到部署了 consul 服务器的工作节点,并且我使用 consul-dns 服务的 ClusterIP(端口 53),或者甚至使用 consul 服务器 pod 的 IP 地址(端口 8600),那么 dig 命令可以同时使用这两种协议
其他信息
# kubectl get svc
consul-dns ClusterIP <clusterIP> <none> 53/TCP,53/UDP
consul-server ClusterIP None <none> 8500/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP
# kubectl get ep
consul-dns <consul-server-podIP>:8600,<consul-server-podIP>:8600
有任何想法吗 ?提前致谢
解决方案
Traefik 的 Helm 图表在与 TCP 流量不同的负载均衡器上公开 UDP 侦听器。TCP 流量驻留在 LoadBalancer 服务上traefik
,而 UDP 流量绑定到traefik-udp
.
https://github.com/traefik/traefik-helm-chart/blob/f147e4c/traefik/templates/service.yaml#L66-L111
根据您的配置,此 UDP 负载平衡器可能位于不同的 IP 上。检查kubectl get services
您应该在哪里看到此其他负载平衡器服务的 IP 地址的输出。
如果您正在使用诸如MetalLB 之metallb.universe.tf/allow-shared-ip
类的负载均衡器提供程序,则可以通过将注解添加到 Traefik 的服务注解列表中来为 UDP 流量配置负载均衡器服务以使用与 TCP 相同的 IP (请参阅:MetalLB: IP 地址共享)。例如:
---
# traefik-values.yaml
service:
annotations:
metallb.universe.tf/allow-shared-ip: traefik-external-service
当您部署 Helm 图表时,traefik
负载traefik-udp
均衡器服务将使用相同的 IP 地址。
$ kubectl -n traefik get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 10.43.230.205 10.0.0.200 5053:31662/TCP,80:32021/TCP,443:31845/TCP 20m
traefik-udp LoadBalancer 10.43.82.75 10.0.0.200 5053:30648/UDP 20m
然后,您应该能够通过 TCP 和 UDP 协议查询 Consul 的 DNS。
$ dig @10.0.0.200 -p 5053 consul.service.consul +short +tcp
10.0.0.132
10.0.0.37
10.0.0.82
$ dig @10.0.0.200 -p 5053 consul.service.consul +short
10.0.0.82
10.0.0.37
10.0.0.132
推荐阅读
- javascript - Nestjs - 创建 DTO 文件以转换嵌套 json 对象的正确方法是什么?
- android - How to launch advanced download manager (ADM) app from a flutter app and give it download data?
- node.js - npm package works locally but modules cannot be resolved when published
- qt - How to make QtDesigner offer Enumeration for Plugin Property
- mongodb - How to start and connect to the newly installed MongoDB server?
- reactjs - How do Typescript/ES6 imports behave with multiple class instances or component calls?
- c# - Pre-filling Tabs on a Template in DocuSign
- pandas - How do I prevent Spark from automatically adding time in date column?
- tensorflow - keras implementation of a parallel convolution layer
- web-scraping - Is there any ways to extract the number of views a webpage recieved?