【发布时间】:2023-03-07 10:08:01
【问题描述】:
我的 consul 服务器(使用官方 helm chart 部署的 v1.9.1)在 Traefik 2 后面的 kubernetes 集群中运行,我注册了一个客户端,现在我想使用 dig 命令获取它的 IP 地址。
这里的问题是当我使用带有 tcp 协议的 dig 命令时它可以工作,但如果使用 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) 入口点
ingressRouteTCP 和 ingressRouteUDP 我用来将流量路由到 consul-dns k8s 服务
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
有什么想法吗?提前致谢
【问题讨论】:
标签: dns udp consul traefik-ingress