21.12. 프로젝트에 멀티 캐스트 사용
21.12.1. 멀티 캐스트 정보
IP 멀티 캐스트를 사용하면 데이터가 여러 IP 주소로 동시에 브로드캐스트됩니다.
현재 멀티 캐스트는 고 대역폭 솔루션이 아닌 저 대역폭 조정 또는 서비스 검색에 가장 적합합니다.
OpenShift Container Platform Pod 간 멀티 캐스트 트래픽은 기본적으로 비활성화되어 있습니다. OpenShift SDN 기본 CNI(Container Network Interface) 네트워크 공급자를 사용하는 경우 프로젝트별로 멀티 캐스트를 활성화할 수 있습니다.
네트워크 정책 격리 모드에서 OpenShift SDN 네트워크
플러그인을 사용하는 경우:
-
Pod에서 전송한 멀티 캐스트 패킷은
NetworkPolicy
오브젝트에 관계없이 프로젝트의 다른 모든 Pod로 전달됩니다. Pod는 유니 캐스트를 통해 통신할 수 없는 경우에도 멀티 캐스트를 통해 통신할 수 있습니다. -
한 프로젝트에서 Pod가 전송한 멀티 캐스트 패킷은 프로젝트 간에 통신을 허용하는
NetworkPolicy
오브젝트가 있더라도 다른 프로젝트의 Pod로 전달되지 않습니다.
다중 테넌트
격리 모드에서 OpenShift SDN 네트워크 플러그인을 사용하는 경우:
- Pod에서 전송한 멀티 캐스트 패킷은 프로젝트의 다른 모든 Pod로 전달됩니다.
- 한 프로젝트에서 Pod가 전송한 멀티 캐스트 패킷은 각 프로젝트가 함께 결합되고 각 참여 프로젝트에서 멀티 캐스트가 활성화된 경우에만 다른 프로젝트의 Pod로 전달됩니다.
21.12.2. Pod 간 멀티 캐스트 활성화
프로젝트의 Pod 간 멀티 캐스트를 활성화할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할을 가진 사용자로 클러스터에 로그인해야 합니다.
프로세스
다음 명령을 실행하여 프로젝트에 대한 멀티 캐스트를 활성화합니다. 멀티 캐스트를 활성화하려는 프로젝트의 네임스페이스로
<namespace>
를 바꿉니다.$ oc annotate netnamespace <namespace> \ netnamespace.network.openshift.io/multicast-enabled=true
검증
프로젝트에 멀티 캐스트가 활성화되어 있는지 확인하려면 다음 절차를 완료합니다.
멀티 캐스트를 활성화한 프로젝트로 현재 프로젝트를 변경합니다.
<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/ubi8 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/ubi8 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