4.3. RHOSO에서 BGP 네트워크용 Cryostat 준비


RHOSO(Red Hat OpenStack Services on OpenShift) 서비스는 RHOCP(Red Hat OpenShift Container Platform) 워크로드로 실행됩니다. NMState Operator를 사용하여 작업자 노드를 필수 격리된 네트워크에 연결합니다. MetalLB Operator를 사용하여 격리된 네트워크에 내부 서비스 끝점을 노출합니다. 기본적으로 공용 서비스 끝점은 Cryostat 경로로 노출됩니다.

참고

다음 절차의 예제에서는 IPv4 주소를 사용합니다. IPv4 주소 대신 IPv6 주소를 사용할 수 있습니다. Dual stack IPv4/6을 사용할 수 없습니다. IPv6 주소를 구성하는 방법에 대한 자세한 내용은 Cryostat 네트워킹 가이드의 다음 리소스를 참조하십시오.

4.3.1. Cryostat 노드의 BGP 인터페이스에서 rcp_filter 비활성화

Red Hat OpenShift Container Platform (RHOCP) 작업자 노드가 수신하는 BGP 알림을 기반으로 트래픽을 전달하려면 RHOSO 서비스를 실행하는 Cryostat 작업자 노드의 BGP 인터페이스에서 역방향 경로 필터를 비활성화해야 합니다.

프로세스

  1. 다음과 유사한 콘텐츠를 사용하여 tuned.yaml 이라는 매니페스트 파일을 생성합니다.

    apiVersion: tuned.openshift.io/v1
    kind: Tuned
    metadata:
      name: default
      namespace: openshift-cluster-node-tuning-operator
    spec:
      profile:
      - data: |
          [main]
          summary=Optimize systems running OpenShift (provider specific parent profile)
          include=-provider-${f:exec:cat:/var/lib/ocp-tuned/provider},openshift
    
          [sysctl]
          net.ipv4.conf.enp8s0.rp_filter=0
          net.ipv4.conf.enp9s0.rp_filter=0
        name: openshift
      recommend:
      - match:
        - label: kubernetes.io/hostname
          value: worker-0
        - label: kubernetes.io/hostname
          value: worker-1
        - label: kubernetes.io/hostname
          value: worker-2
        - label: node-role.kubernetes.io/master
        operand:
          tunedConfig:
            reapply_sysctl: false
        priority: 15
        profile: openshift-no-reapply-sysctl
    status: {}
  2. 파일을 저장하고 Tuned 리소스를 생성합니다.

    $ oc create -f tuned.yaml

4.3.2. BGP를 위한 격리된 네트워크 인터페이스를 사용하여 Cryostat 준비

NodeNetworkConfigurationPolicy (nncp) CR(사용자 정의 리소스)을 생성하여 Red Hat OpenShift Container Platform(RHOCP) 클러스터의 각 작업자 노드에서 각 격리된 네트워크의 인터페이스를 구성합니다.

프로세스

  1. 워크스테이션에 NodeNetworkConfigurationPolicy (nncp) CR 파일을 생성합니다(예: openstack-nncp-bgp.yaml ).
  2. Cryostat 클러스터에서 작업자 노드의 이름을 검색합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker -o jsonpath="{.items[*].metadata.name}"
  3. 네트워크 구성을 검색합니다.

    $ oc get nns/<worker_node> -o yaml | more
    • & lt;worker_node >를 2단계에서 검색된 작업자 노드의 이름으로 바꿉니다(예: worker-1 ). 각 작업자 노드에 대해 이 단계를 반복합니다.
  4. nncp CR 파일에서 Cryostat 클러스터의 각 작업자 노드에 있는 각 격리된 네트워크의 인터페이스를 구성합니다. 네트워크 격리로 구성해야 하는 기본 물리적 데이터 센터 네트워크에 대한 자세한 내용은 BGP의 OpenShift 네트워크의 Default Red Hat OpenStack Services를 참조하십시오.

    다음 예에서 nncp CR은 OpenShift(RHOSO) 네트워크에서 Red Hat OpenStack Services를 매핑하는 데 사용하는 연결되지 않은 여러 브릿지를 구성합니다. BGP 인터페이스를 사용하여 네트워크 패브릭과 피어링하고 연결을 설정합니다. 루프백 인터페이스는 BGP 네트워크 소스 주소인 9 Cryostat .0.x 로 구성됩니다. NIC를 ctlplane 네트워크에 선택적으로 전용으로 지정할 수 있습니다.

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      labels:
        osp/nncm-config-type: standard
      name: worker-0
      namespace: openstack
    spec:
      desiredState:
        dns-resolver:
          config:
            search: []
            server:
            - 192.168.122.1
        interfaces:
        - description: internalapi bridge
          mtu: 1500
          name: internalapi
          state: up
          type: linux-bridge
        - description: storage bridge
          mtu: 1500
          name: storage
          state: up
          type: linux-bridge
        - description: tenant bridge
          mtu: 1500
          name: tenant
          state: up
          type: linux-bridge
        - description: ctlplane bridge
          mtu: 1500
          name: ospbr
          state: up
          type: linux-bridge
        - description: BGP interface 1
          ipv4:
            address:
            - ip: 100.64.0.14
              prefix-length: "30"
            dhcp: false
            enabled: true
          ipv6:
            enabled: false
          mtu: 1500
          name: enp8s0
          state: up
          type: ethernet
        - description: BGP interface 2
          ipv4:
            address:
            - ip: 100.65.0.14
              prefix-length: "30"
            dhcp: false
            enabled: true
          ipv6:
            enabled: false
          mtu: 1500
          name: enp9s0
          state: up
          type: ethernet
        - description: loopback interface
          ipv4:
            address:
            - ip: 99.99.0.3
              prefix-length: "32"
            dhcp: false
            enabled: true
          mtu: 65536
          name: lo
          state: up
        route-rules:
          config: []
        routes:
          config:
          - destination: 99.99.0.0/16
            next-hop-address: 100.64.0.13
            next-hop-interface: enp8s0
          - destination: 99.99.0.0/16
            next-hop-address: 100.65.0.13
            next-hop-interface: enp9s0
      nodeSelector:
        kubernetes.io/hostname: worker-0
        node-role.kubernetes.io/worker: ""
  5. 클러스터에 nncp CR을 생성합니다.

    $ oc apply -f openstack-nncp-bgp.yaml
  6. nncp CR이 생성되었는지 확인합니다.

    $ oc get nncp -w
    NAME                        STATUS        REASON
    osp-enp6s0-worker-1   Progressing   ConfigurationProgressing
    osp-enp6s0-worker-1   Progressing   ConfigurationProgressing
    osp-enp6s0-worker-1   Available     SuccessfullyConfigured

4.3.3. BGP의 격리된 네트워크에 서비스 Pod 연결

서비스 pod를 네트워크에 연결하기 위해 분리된 각 네트워크에 대해 NetworkAttachmentDefinition (net-attach-def) 사용자 정의 리소스(CR)를 생성합니다.

프로세스

  1. 워크스테이션에 NetworkAttachmentDefinition (net-attach-def) CR 파일을 생성합니다(예: openstack-net-attach-def.yaml ).
  2. NetworkAttachmentDefinition CR 파일에서 서비스 배포 Pod를 네트워크에 연결하도록 각 격리된 네트워크에 대한 NetworkAttachmentDefinition 리소스를 구성합니다. 다음 예제에서는 특정 게이트웨이 구성 및 추가 옵션과 함께 유형 브리지 인터페이스를 사용하는 NetworkAttachmentDefinition 리소스를 생성합니다.

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      labels:
        osp/net: internalapi
        osp/net-attach-def-type: standard
      name: internalapi
      namespace: openstack 
    1
    
    spec:
      config: |
    	{
      	"cniVersion": "0.3.1",
      	"name": "internalapi", 
    2
    
      	"type": "bridge",
      	"isDefaultGateway": true,
      	"isGateway": true,
      	"forceAddress": false,
      	"ipMasq": true,
      	"hairpinMode": true,
      	"bridge": "internalapi",
      	"ipam": { 
    3
    
          "type": "whereabouts",
          "range": "172.17.0.0/24",
          "range_start": "172.17.0.30", 
    4
    
          "range_end": "172.17.0.70",
          "gateway": "172.17.0.1"
        }
      }
    1
    서비스가 배포되는 네임스페이스입니다.
    2
    nncp CR에 정의된 대로 네트워크와 연결된 노드 인터페이스 이름입니다.
    3
    .30 - .70 범위에서 생성된 Pod에 IP를 할당하는 whereabouts CNI IPAM 플러그인입니다.
    4
    IP 주소 풀 범위는 MetalLB IPAddressPool 범위 및 NetConfig allocationRange 와 겹치지 않아야 합니다.
  3. 클러스터에 NetworkAttachmentDefinition CR을 생성합니다.

    $ oc apply -f openstack-net-attach-def.yaml
  4. NetworkAttachmentDefinition CR이 생성되었는지 확인합니다.

    $ oc get net-attach-def -n openstack

4.3.4. BGP용 RHOSO 네트워크 VIPS 준비

각 노드의 eth2eth3 인터페이스에 연결된 리프 스위치를 정의하려면 BGPPeer CR(사용자 정의 리소스) 쌍을 생성해야 합니다. 예를 들어 worker-0 에는 두 개의 BGPPeer CR이 있으며 하나는 leaf-0 및 leaf-1을 위한 것입니다. BGP 피어에 대한 자세한 내용은 BGP 피어 구성을 참조하십시오.

또한 제공할 네트워크 범위를 정의하기 위해 IPAddressPool CR을 생성해야 하며, BGPPeer CR의 발표 방법을 정의하는 BGPAdvertisement CR을 생성해야 하며 IPAddressPool CR을 알림을 수신하는 BGPPeer CR에 연결합니다.

프로세스

  1. 워크스테이션에 BGPPeer CR 파일을 생성합니다(예: bgppeers.yaml ).
  2. 각 노드가 피어링할 BGPPeer CR 쌍을 구성합니다. 다음 예제는 worker-0 노드에 대해 두 개의 BGPPeer CR을 구성합니다. 하나는 leaf-0 및 leaf-1용입니다.

    apiVersion: metallb.io/v1beta2
    kind: BGPPeer
    metadata:
      name: bgp-peer-node-0-0
      namespace: metallb-system
    spec:
      myASN: 64999
      nodeSelectors:
      - matchExpressions:
    	- key: kubernetes.io/hostname
      	operator: In
      	values:
      	- worker-0
      password: r3dh4t1234
      peerASN: 64999
      peerAddress: 100.64.0.13
    ---
    apiVersion: metallb.io/v1beta2
    kind: BGPPeer
    metadata:
      name: bgp-peer-node-0-1
      namespace: metallb-system
    spec:
      myASN: 64999
      nodeSelectors:
      - matchExpressions:
    	- key: kubernetes.io/hostname
      	operator: In
      	values:
      	- worker-0
      password: r3dh4t1234
      peerASN: 64999
      peerAddress: 100.65.0.13
  3. BGPPeer CR을 생성합니다.

    $ oc create -f bgppeers.yaml
  4. 워크스테이션에 IPAddressPool CR 파일을 만듭니다(예: ipaddresspools-bgp.yaml ).
  5. IPAddressPool CR 파일에서 MetalLB에 권한이 있는 IP 주소 범위를 지정하도록 각 격리된 네트워크에서 IPAddressPool 리소스를 구성합니다.

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: ctlplane
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.125.80-192.168.125.90 
    1
    
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: internalapi
      namespace: metallb-system
    spec:
      addresses:
      - 172.17.0.80-172.17.0.90
    1
    IPAddressPool 범위는 whereabouts IPAM 범위 및 NetConfig allocationRange 와 겹치지 않아야 합니다.

    다른 IPAddressPool 리소스 매개변수를 구성하는 방법에 대한 자세한 내용은 Cryostat 네트워킹 가이드의 MetalLB 주소 풀 구성 을 참조하십시오.

  6. 클러스터에 IPAddressPool CR을 생성합니다.

    $ oc apply -f ipaddresspools-bgp.yaml
  7. IPAddressPool CR이 생성되었는지 확인합니다.

    $ oc describe -n metallb-system IPAddressPool
  8. 워크스테이션에 BGPAdvertisement CR 파일을 만듭니다(예: bgpadvert.yaml ).

    apiVersion: metallb.io/v1beta1
    kind: BGPAdvertisement
    metadata:
      name: bgpadvertisement
      namespace: metallb-system
    spec:
      ipAddressPools:
      - ctlplane
      - internalapi
      - storage
      - tenant
      peers: 
    1
    
      - bgp-peer-node-0-0
      - bgp-peer-node-0-1
      - bgp-peer-node-1-0
      - bgp-peer-node-1-1
      - bgp-peer-node-2-0
      - bgp-peer-node-2-1
      ...
    1
    각 Cryostat 노드가 통신해야 하는 피어 IP 주소에 대해 정의한 모든 BGPPeer CR을 나열합니다.
  9. 클러스터에 BGPAdvertisement CR을 생성합니다.

    $ oc apply -f bgpadvert.yaml
  10. 클러스터에 네트워크 백엔드로 OVNKubernetes가 있는 경우 MetalLB가 보조 네트워크 인터페이스에서 작동할 수 있도록 글로벌 전달을 활성화해야 합니다.

    1. 클러스터에서 사용하는 네트워크 백엔드를 확인합니다.

      $ oc get network.operator cluster --output=jsonpath='{.spec.defaultNetwork.type}'
    2. 백엔드가 OVNKubernetes인 경우 다음 명령을 실행하여 글로벌 IP 전달을 활성화합니다.

      $ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동