weavenet と metallb で構成された2ノード bare-metal kubernetes クラスターをセットアップしました。このクラスターでホストされているサービスで、ホームネットワーク上のUPnPデバイスを検出して操作できるようにしたいと思います。これが機能するためには、UPnP検出パケットをホームネットワークに再マルチキャストするように構成する必要があると思います。仮想ウィーブネットネットワークとローカルネットワーク間の再マルチキャストを構成する正しい方法は何ですか?
192.168.1.0/24
にあり、マスターノードとスレーブノードの両方があります。10.32.0.1/12
オーバーレイネットワークのどこかに配置するデフォルトのweavenetセットアップを使用してポッドをデプロイします。192.168.2.192/26
内のどこかにLoadBalancerIPを提供するmetallbLoadBalancerを使用してサービスをデプロイすることができます。ホームネットワーク上の任意のコンピューターからマルチキャスト(239.255.255.250:1900
)を使用してUPnPデバイスを検出する テスト検出スクリプト を実行できます。クラスターに展開すると( このように )、UPnPデバイスは検出されなくなります。クラスター内の他のポッドからのUPnPパケットは表示されますが、ホームネットワークに直接接続されているコンピューターからは表示されません。
この問題の解決策には、UPnPパケットをweavenetからホームネットワークに再ブロードキャストし、応答をリバースプロキシすることが含まれると思います...しかし、weavenetでそのようなことを行う方法がわかりません。ホストのネットワークを使用するときに、UPnPデバイスと相互作用するあらゆる種類のサービス/展開/ポッド/ネットワークを構成するにはどうすればよいですか? テストスクリプト
問題:ポッドの内部アドレスから送信されている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をnodeIPに自動的に供給します。
タイプ:NodePort-NATをノードpodIPに自動的に供給します。
NodePortとhostNetworkを使用すると、ポッドのNodePortがNode IP、したがってUDPブロードキャストは正当なアドレスから送信されます。
この設定の制限:
ソリューション:
NodePortの割り当てについては、terrarium-service-udp.yamlを参照してください。
HostNetwork宣言については、terrarium-deployment.yamlを参照してください。
terrarium-service-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
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
Minidlnaの動作構成があります。比較のために必要な場合はお知らせください。GitHubにアップロードします。