文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488836&idx=1&sn=740f9aac069de3fbf82dfc4be340973f&chksm=fdb91a59cace934f48591409a53743df8b2bdbe02eecdbeb66779feb0b5e40e3b00055f83ec4&cur_album_id=1319287026209947648&scene=190#rd

TCP服务查看这篇文章:https://www.cnblogs.com/sanduzxcvbnm/p/15745150.html

首先部署一个如下所示的 UDP 服务:

apiVersion: v1
kind: Service
metadata:
name: whoamiudp
spec:
ports:
- protocol: UDP
name: udp
port: 8080
selector:
app: whoamiudp
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: whoamiudp
labels:
app: whoamiudp
spec:
replicas: 2
selector:
matchLabels:
app: whoamiudp
template:
metadata:
labels:
app: whoamiudp
spec:
containers:
- name: whoamiudp
image: containous/whoamiudp
ports:
- name: udp
containerPort: 8080

直接部署上面的应用,部署完成后我们需要在 Traefik 中定义一个 UDP 的 entryPoint 入口点,修改我们部署 Traefik 的 values-prod.yaml 文件(查看前文),增加 UDP 协议的入口点:

# values-prod.yaml
# Configure ports
ports:
web:
port: 8000
hostPort: 80
websecure:
port: 8443
hostPort: 443
mongo:
port: 27017
hostPort: 27017
udpep:
port: 18080
hostPort: 18080
protocol: UDP

我们这里定义了一个名为 udpep 的入口点,但是 protocol 协议是 UDP(此外 TCP 和 UDP 共用同一个端口也是可以的,但是协议一定要声明为不一样),然后重新更新 Traefik:

➜ helm upgrade --install traefik --namespace=kube-system ./traefik -f ./values-prod.yaml

更新完成后我们可以导出 Traefik 部署的资源清单文件来检测是否增加上了 UDP 的入口点:

➜ kubectl get deploy traefik -n kube-system -o yaml
......
containers:
- args:
- --entryPoints.mongo.address=:27017/tcp
- --entryPoints.traefik.address=:9000/tcp
- --entryPoints.udpep.address=:18080/udp
- --entryPoints.web.address=:8000/tcp
- --entryPoints.websecure.address=:8443/tcp
- --api.dashboard=true
- --ping=true
- --providers.kubernetescrd
- --providers.kubernetesingress
......

UDP 的入口点增加成功后,接下来我们可以创建一个 IngressRouteUDP 类型的资源对象,用来代理 UDP 请求:

➜ cat <<EOF | kubectl apply -f -
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteUDP
metadata:
name: whoamiudp
spec:
entryPoints:
- udpep
routes:
- services:
- name: whoamiudp
port: 8080
EOF
➜ kubectl get ingressrouteudp
NAME AGE
whoamiudp 31s

创建成功后我们首先在集群上通过 Service 来访问上面的 UDP 应用:

➜ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
whoamiudp ClusterIP 10.106.10.185 <none> 8080/UDP 36m
➜ echo "WHO" | socat - udp4-datagram:10.106.10.185:8080
Hostname: whoamiudp-d884bdb64-6mpk6
IP: 127.0.0.1
IP: 10.244.1.145
➜ echo "othermessage" | socat - udp4-datagram:10.106.10.185:8080
Received: othermessage

我们这个应用当我们输入 WHO 的时候,就会打印出访问的 Pod 的 Hostname 这些信息,如果不是则打印接收到字符串。现在我们通过 Traefik 所在节点的 IP(10.151.30.11)与 18080 端口来访问 UDP 应用进行测试:

➜ echo "othermessage" | socat - udp4-datagram:10.151.30.11:18080
Received: othermessage
➜ echo "WHO" | socat - udp4-datagram:10.151.30.11:18080
Hostname: whoamiudp-d884bdb64-hkw6k
IP: 127.0.0.1
IP: 10.244.2.87

我们可以看到测试成功了,证明我就用 Traefik 来代理 UDP 应用成功了。除此之外 Traefik 还有很多功能,特别是强大的中间件和自定义插件的功能,为我们提供了不断扩展其功能的能力,我们完成可以根据自己的需求进行二次开发。

最新文章

  1. 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta
  2. PHP非阻塞模式 (转自 尘缘)
  3. 【CodeVS 1037】取数游戏
  4. docker快速启动脚本
  5. ORACLE SEQUENCE用法
  6. mysql 表空间及索引的查看方法
  7. 【CF】556D A Lot of Games
  8. ubuntu下编译内核驱动。
  9. mysql大写和小写问题
  10. Angular vs React 最全面深入对比
  11. java设计模式-----14、桥接模式
  12. 不能完整读取txt文件问题
  13. mass
  14. 自动化发布-GitLab WEB Hooks 配置
  15. Amoeba常见问题
  16. suoi31 最近公共祖先2 (倍增lca)
  17. 那些你觉得堪称神兵利器的 Chrome 插件
  18. HRBUST单词接龙
  19. Filter应用之2-设置某些页面缓存或是不缓存
  20. 20155212 实验三 敏捷开发与XP实践

热门文章

  1. JSP页面+请求转发+EL表达式
  2. Linux环境下ProxyChains应用网络代理
  3. 【一知半解】AQS
  4. Solution -「校内题」矩阵求和
  5. mysql常见用法
  6. 【AGC】开放式测试示例
  7. 【系统设计】S3 对象存储
  8. Apache DolphinScheduler 的持续集成方向实践
  9. 让Python更优雅更易读(第一集)
  10. Redis 18 Jedis