ril*_*ell 5 upnp kubernetes weave
我已经设置了一个配置有weavenet和metallb的两节点裸机 kubernetes集群。我希望此集群上托管的服务能够发现我的家庭网络上的 UPnP 设备并与之交互。我相信要实现此功能,需要将 UPnP 发现数据包配置为重新多播到我的家庭网络。在虚拟 weavenet 网络和本地网络之间配置重新多播的正确方法是什么?
192.168.1.0/24,有主节点和从节点。10.32.0.1/12覆盖网络中的某个位置。192.168.2.192/26.我可以执行一个测试发现脚本,该脚本使用多播 ( ) 从我的家庭网络上的任何计算机发现我的 UPnP 设备239.255.255.250:1900。一旦我部署到集群(像这样),就不再检测到 UPnP 设备。我可以看到来自集群中其他 Pod 的 UPnP 数据包,但看不到来自直接连接到家庭网络的计算机的 UPnP 数据包。
我相信这个问题的解决方案将涉及将 UPnP 数据包从 weavenet 重新广播到我的家庭网络并反向代理响应......但我不知道如何使用 weave net 执行类似的操作。如何配置任何类型的服务/部署/pod/网络,以便与我的 UPnP 设备进行交互,就像我的测试脚本在使用主机网络时所做的那样?
小智 3
问题:来自 pod 内部地址的 uPnP UDP 广播在传出到您的家庭网络之前被节点丢弃。
即数据包看起来像
IP 10.32.0.x.45196 > 239.255.255.250.1900: UDP, length 215
根据https://kubernetes.io/docs/tutorials/services/source-ip/的文档
类型:LoadBalancer - 将自动将 NAT 源到节点IP。
类型:NodePort - 将自动将 NAT 源到节点Pod IP。
使用带有hostNetwork的NodePort会将 pod 的 NodePort 绑定到节点 IP,因此 UDP 广播将来自合法地址。
此设置的限制:
解决方案:
有关 NodePort 分配,请参阅 terrarium-service-udp.yaml。
有关 hostNetwork 声明,请参阅 terrarium-deployment.yaml。
玻璃容器服务-udp.yaml:
kind: Service
metadata:
annotations:
metallb.universe.tf/allow-shared-ip: terrarium
creationTimestamp: null
labels:
io.kompose.service: terrarium
name: terrarium-udp
spec:
ports:
- name: '32767'
port: 32767
protocol: UDP
targetPort: 54321
- name: '31900'
port: 31900
protocol: UDP
targetPort: 1900
selector:
io.kompose.service: terrarium
type: NodePort
Run Code Online (Sandbox Code Playgroud)
terrarium-deployment.yaml:
kind: Deployment
metadata:
annotations:
creationTimestamp: null
labels:
io.kompose.service: terrarium
name: terrarium
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: terrarium
spec:
hostNetwork: true
containers:
- image: docker.lan/terrarium
name: terrarium
ports:
- containerPort: 80
- containerPort: 32767
protocol: UDP
- containerPort: 1900
protocol: UDP
resources: {}
restartPolicy: Always
Run Code Online (Sandbox Code Playgroud)
我有一个 minidlna 的工作配置。如果您需要比较,请告诉我,我将上传到 GitHub。
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |