第 3 章 OpenShift SDN 默认 CNI 网络供应商

3.1. 为项目启用多播

3.1.1. 关于多播

通过使用 IP 多播,数据可同时广播到许多 IP 地址。

重要

目前,多播最适用于低带宽协调或服务发现。它不是一个高带宽解决方案。

默认情况下,Red Hat OpenShift Service on AWS 间的多播流量被禁用。如果使用 OpenShift SDN 网络插件,可以根据每个项目启用多播。

networkpolicy 隔离模式中使用 OpenShift SDN 网络插件:

  • pod 发送的多播数据包将传送到项目中的所有其他 pod,而无需考虑 NetworkPolicy 对象。即使在无法通过单播通信时,Pod 也能通过多播进行通信。
  • 一个项目中的 pod 发送的多播数据包不会传送到任何其他项目中的 pod,即使存在允许项目间通信的 NetworkPolicy 对象。

multitenant 隔离模式使用 OpenShift SDN 网络插件时:

  • pod 发送的多播数据包将传送到项目中的所有其他 pod。
  • 只有在各个项目接合在一起并且每个接合的项目上都启用了多播时,一个项目中的 pod 发送的多播数据包才会传送到其他项目中的 pod。

3.1.2. 启用 pod 间多播

您可以为项目启用 pod 间多播。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 您必须使用具有 cluster-admindedicated-admin 角色的用户登录集群。

流程

  • 运行以下命令,为项目启用多播。使用您要启用多播的项目的名称替换 <namespace>

    $ oc annotate netnamespace <namespace> \
        netnamespace.network.openshift.io/multicast-enabled=true

验证

要验证项目是否启用了多播,请完成以下步骤:

  1. 将您的当前项目更改为启用多播的项目。使用项目名替换 <project>

    $ oc project <project>
  2. 创建 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
  3. 创建 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
  4. 在新的终端窗口或选项卡中,启动多播监听程序。

    1. 获得 Pod 的 IP 地址:

      $ POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')
    2. 输入以下命令启动多播监听程序:

      $ oc exec mlistener -i -t -- \
          socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname
  5. 启动多播传输。

    1. 获取 pod 网络 IP 地址范围:

      $ CIDR=$(oc get Network.config.openshift.io cluster \
          -o jsonpath='{.status.clusterNetwork[0].cidr}')
    2. 要发送多播信息,请输入以下命令:

      $ 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