19.16. 为项目启用多播
19.16.1. 关于多播
通过使用 IP 多播,数据可同时广播到许多 IP 地址。
- 目前,多播最适用于低带宽协调或服务发现。它不是一个高带宽解决方案。
- 
								默认情况下,网络策略会影响命名空间中的所有连接。但是,多播不受网络策略的影响。如果在与网络策略相同的命名空间中启用了多播,则始终允许多播,即使有一个 deny-all网络策略。在启用网络策略前,集群管理员应考虑对多播的影响。
默认情况下,OpenShift Container Platform pod 之间多播流量被禁用。如果使用 OVN-Kubernetes 网络插件,可以根据每个项目启用多播。
19.16.2. 启用 pod 间多播
您可以为项目启用 pod 间多播。
先决条件
- 
							安装 OpenShift CLI(oc)。
- 
							您必须作为 cluster-admin角色用户登录集群。
流程
- 运行以下命令,为项目启用多播。使用您要启用多播的项目的名称替换 - <namespace>。- oc annotate namespace <namespace> \ k8s.ovn.org/multicast-enabled=true- $ oc annotate namespace <namespace> \ k8s.ovn.org/multicast-enabled=true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 提示- 您还可以应用以下 YAML 来添加注解: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
要验证项目是否启用了多播,请完成以下步骤:
- 将您的当前项目更改为启用多播的项目。使用项目名替换 - <project>。- oc project <project> - $ oc project <project>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 pod 以作为多播接收器: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 pod 以作为多播发送器: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在新的终端窗口或选项卡中,启动多播监听程序。 - 获得 Pod 的 IP 地址: - POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')- $ POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令启动多播监听程序: - oc exec mlistener -i -t -- \ socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname- $ oc exec mlistener -i -t -- \ socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 启动多播传输。 - 获取 pod 网络 IP 地址范围: - CIDR=$(oc get Network.config.openshift.io cluster \ -o jsonpath='{.status.clusterNetwork[0].cidr}')- $ CIDR=$(oc get Network.config.openshift.io cluster \ -o jsonpath='{.status.clusterNetwork[0].cidr}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要发送多播信息,请输入以下命令: - oc exec msender -i -t -- \ /bin/bash -c "echo | socat STDIO UDP4-DATAGRAM:224.1.0.1:30102,range=$CIDR,ip-multicast-ttl=64"- $ oc exec msender -i -t -- \ /bin/bash -c "echo | socat STDIO UDP4-DATAGRAM:224.1.0.1:30102,range=$CIDR,ip-multicast-ttl=64"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果多播正在工作,则上一个命令会返回以下输出: - mlistener - mlistener- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow