$ oc annotate namespace <namespace> \
k8s.ovn.org/multicast-enabled=true
在 IP 组播中,数据同时广播到多个 IP 地址。
|
OpenShift Dedicated Pod 之间的组播流量默认情况下是禁用的。如果您使用的是 OVN-Kubernetes 网络插件,则可以基于每个项目启用组播。
您可以为您的项目启用 Pod 之间的组播。
安装 OpenShift 命令行工具 (oc
)。
您必须使用具有 `cluster-admin` 或 `dedicated-admin` 角色的用户登录到集群。
运行以下命令以启用项目的组播。将 <namespace>
替换为您要为其启用组播的项目的命名空间。
$ oc annotate namespace <namespace> \
k8s.ovn.org/multicast-enabled=true
或者,您可以应用以下 YAML 来添加注释
|
要验证是否已为项目启用了组播,请完成以下步骤
将当前项目更改为您已为其启用组播的项目。将 <project>
替换为项目名称。
$ oc project <project>
创建一个 Pod 作为组播接收器
$ cat <<EOF| oc create -f -
apiVersion: v1
kind: Pod
metadata:
name: mlistener
labels:
app: multicast-verify
spec:
containers:
- name: mlistener
image: registry.access.redhat.com/ubi9
command: ["/bin/sh", "-c"]
args:
["dnf -y install socat hostname && sleep inf"]
ports:
- containerPort: 30102
name: mlistener
protocol: UDP
EOF
创建一个 Pod 作为组播发送器
$ cat <<EOF| oc create -f -
apiVersion: v1
kind: Pod
metadata:
name: msender
labels:
app: multicast-verify
spec:
containers:
- name: msender
image: registry.access.redhat.com/ubi9
command: ["/bin/sh", "-c"]
args:
["dnf -y install socat && sleep inf"]
EOF
在新终端窗口或选项卡中,启动组播侦听器。
获取 Pod 的 IP 地址
$ POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')
输入以下命令启动组播侦听器
$ oc exec mlistener -i -t -- \
socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname
启动组播发射器。
获取 Pod 网络 IP 地址范围
$ CIDR=$(oc get Network.config.openshift.io cluster \
-o jsonpath='{.status.clusterNetwork[0].cidr}')
要发送组播消息,请输入以下命令
$ oc exec msender -i -t -- \
/bin/bash -c "echo | socat STDIO UDP4-DATAGRAM:224.1.0.1:30102,range=$CIDR,ip-multicast-ttl=64"
如果组播正常工作,则之前的命令将返回以下输出
mlistener