9.10. 설치 후 RHOSP 네트워크 구성

설치 후 RHOSP(Red Hat OpenStack Platform) 클러스터에서 OpenShift Container Platform의 일부 측면을 구성할 수 있습니다.

9.10.1. 부동 IP 주소로 애플리케이션 액세스 구성

OpenShift Container Platform을 설치한 후 애플리케이션 네트워크 트래픽을 허용하도록 RHOSP(Red Hat OpenStack Platform)를 구성합니다.

참고

install-config.yaml 파일에서 platform.openstack.apiFloatingIPplatform.openstack.ingressFloatingIP 에 대한 값을 제공하거나 설치 중에 inventory.yaml 플레이 북의 os_api_fipos_ingress_fip에 대한 값을 제공한 경우 이 절차를 수행 할 필요가 없습니다. 부동 IP 주소가 이미 설정되어 있습니다.

전제 조건

  • OpenShift Container Platform 클러스터가 설치되어 있어야 합니다.
  • RHOSP의 OpenShift Container Platform 설치에 관한 문서에 설명 된대로 부동 IP 주소가 활성화됩니다.

프로세스

OpenShift Container Platform 클러스터를 설치한 후 부동 IP 주소를 인그레스 포트에 연결합니다.

  1. 포트 표시:

    $ openstack port show <cluster_name>-<cluster_ID>-ingress-port
  2. IP 주소에 포트 연결:

    $ openstack floating ip set --port <ingress_port_ID> <apps_FIP>
  3. *apps의 와일드카드 A 레코드를 DNS 파일에 추가:

    *.apps.<cluster_name>.<base_domain>  IN  A  <apps_FIP>
참고

DNS 서버를 제어하지 않지만 프로덕션 이외의 목적으로 애플리케이션 액세스를 활성화하려는 경우 다음과 같은 호스트 이름을 /etc/hosts에 추가할 수 있습니다.

<apps_FIP> console-openshift-console.apps.<cluster name>.<base domain>
<apps_FIP> integrated-oauth-server-openshift-authentication.apps.<cluster name>.<base domain>
<apps_FIP> oauth-openshift.apps.<cluster name>.<base domain>
<apps_FIP> prometheus-k8s-openshift-monitoring.apps.<cluster name>.<base domain>
<apps_FIP> <app name>.apps.<cluster name>.<base domain>

9.10.2. Kuryr 포트 풀

Kuryr 포트 풀은 Pod 생성을 위해 대기 중인 다수의 포트를 유지 관리합니다.

포트를 대기 상태로 유지하면 Pod 생성 시간이 최소화됩니다. 포트 풀이 없으면 Kuryr는 Pod를 생성하거나 삭제할 때마다 포트 생성 또는 삭제를 명시적으로 요청해야 합니다.

Kuryr가 사용하는 Neutron 포트는 네임스페이스에 연결된 서브넷에 생성됩니다. 이러한 Pod 포트도 OpenShift Container Platform 클러스터 노드의 기본 포트에 하위 포트로 추가됩니다.

Kuryr는 각 네임스페이스를 별도의 서브넷에 유지하므로 각 네임스페이스-작업자 쌍에 대해 별도의 포트 풀이 유지됩니다.

클러스터를 설치하기 전에 cluster-network-03-config.yml 매니페스트 파일에서 다음 매개변수를 설정하여 포트 풀 동작을 구성할 수 있습니다.

  • enablePortPoolsPrepopulation 매개변수는 Pod에 전용 네트워크를 사용하도록 구성된 첫 번째 Pod가 생성되어 Pod에 전용 네트워크를 사용하도록 구성된 경우 Kuryr가 풀에 Neutron 포트를 추가하도록 강제 적용합니다. 기본값은 false입니다.
  • poolMinPorts 매개변수는 풀에 보관되는 사용 가능한 최소 포트 수입니다. 기본값은 1 입니다.
  • poolMaxPorts 매개변수는 풀에 보관되는 사용 가능한 최대 포트 수입니다. 값이 0이면 해당 상한이 비활성화됩니다. 이 설정은 기본 설정입니다.

    OpenStack 포트 할당량이 낮거나 pod 네트워크에 IP 주소가 제한된 경우 이 옵션을 설정하여 불필요한 포트가 삭제되었는지 확인합니다.

  • poolBatchPorts 매개 변수는 한 번에 생성할 수 있는 최대 Neutron 포트 수를 정의합니다. 기본값은 3입니다.

9.10.3. RHOSP의 활성 배포에서 Kuryr 포트 풀 설정 조정

CR(사용자 정의 리소스)을 사용하여 Kuryr가 RHOSP(Red Hat OpenStack Platform) Neutron 포트를 관리하는 방법을 구성하여 배포된 클러스터에서 Pod 생성 속도와 효율성을 제어할 수 있습니다.

프로세스

  1. 명령줄에서 편집을 위해 CNO(Cluster Network Operator) CR을 엽니다.

    $ oc edit networks.operator.openshift.io cluster
  2. 요구 사항에 맞게 설정을 편집합니다. 다음 파일은 예제로 제공됩니다.

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      clusterNetwork:
      - cidr: 10.128.0.0/14
        hostPrefix: 23
      serviceNetwork:
      - 172.30.0.0/16
      defaultNetwork:
        type: Kuryr
        kuryrConfig:
          enablePortPoolsPrepopulation: false 1
          poolMinPorts: 1 2
          poolBatchPorts: 3 3
          poolMaxPorts: 5 4
    1
    Pod에 전용 네트워크를 사용하도록 구성된 첫 번째 Pod가 네임스페이스에 생성될 때 Kuryr가 Neutron 포트를 생성하도록 하려면 enablePortPoolsPrepopulationtrue 로 설정합니다. 이 설정은 Neutron 포트 할당량을 높이지만 pod를 생성하는 데 필요한 시간을 줄일 수 있습니다. 기본값은 false입니다.
    2
    Kuryr는 풀의 사용 가능한 포트 수가 poolMinPorts 값보다 낮은 경우 풀에 대한 새 포트를 만듭니다. 기본값은 1 입니다.
    3
    poolBatchPorts는 사용 가능한 포트 수가 poolMinPorts 값보다 낮은 경우 생성되는 새 포트 수를 제어합니다. 기본값은 3입니다.
    4
    풀에서 사용 가능한 포트 수가 poolMaxPorts 값보다 크면 Kuryr는 숫자가 해당 값과 일치할 때까지 해당 포트를 삭제합니다. 값을 0으로 설정하면 이 상한이 비활성화되므로 풀이 축소되지 않습니다. 기본값은 0입니다.
  3. 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 커밋합니다.
중요

실행 중인 클러스터에서 이러한 옵션을 수정하면 kuryr-controller 및 kuryr-cni Pod가 다시 시작됩니다. 결과적으로 새 Pod 및 서비스 생성이 지연됩니다.

9.10.4. OVS 하드웨어 오프로드 활성화

RHOSP(Red Hat OpenStack Platform)에서 실행되는 클러스터의 경우 OVS(Open vSwitch) 하드웨어 오프로드를 활성화할 수 있습니다.

OVS는 대규모 다중 서버 네트워크 가상화를 활성화하는 다중 계층 가상 스위치입니다.

사전 요구 사항

  • RHOSP에 SR-IOV(Single-root input/output virtualization)용으로 구성된 클러스터가 설치되어 있어야 합니다.
  • 클러스터에 SR-IOV Network Operator가 설치되어 있어야 합니다.
  • 클러스터에 두 개의 hw-offload 유형 VF(가상 기능) 인터페이스를 생성했습니다.
참고

애플리케이션 계층 게이트웨이 흐름은 OpenShift Container Platform 버전 4.10, 4.11 및 4.12에서 손상됩니다. 또한 OpenShift Container Platform 버전 4.13의 애플리케이션 계층 게이트웨이 흐름을 오프로드할 수 없습니다.

프로세스

  1. 클러스터에 있는 두 hw-offload 유형 VF 인터페이스에 대한 SriovNetworkNodePolicy 정책을 생성합니다.

    첫 번째 가상 기능 인터페이스

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy 1
    metadata:
      name: "hwoffload9"
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      isRdma: true
      nicSelector:
        pfNames: 2
        - ens6
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: 'true'
      numVfs: 1
      priority: 99
      resourceName: "hwoffload9"

    1
    SriovNetworkNodePolicy 값을 여기에 삽입합니다.
    2
    두 인터페이스 모두 물리적 기능(PF) 이름을 포함해야 합니다.

    두 번째 가상 기능 인터페이스

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy 1
    metadata:
      name: "hwoffload10"
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      isRdma: true
      nicSelector:
        pfNames: 2
        - ens5
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: 'true'
      numVfs: 1
      priority: 99
      resourceName: "hwoffload10"

    1
    SriovNetworkNodePolicy 값을 여기에 삽입합니다.
    2
    두 인터페이스 모두 물리적 기능(PF) 이름을 포함해야 합니다.
  2. 두 인터페이스에 대한 NetworkAttachmentDefinition 리소스를 생성합니다.

    첫 번째 인터페이스에 대한 NetworkAttachmentDefinition 리소스

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload9
      name: hwoffload9
      namespace: default
    spec:
        config: '{ "cniVersion":"0.3.1", "name":"hwoffload9","type":"host-device","device":"ens6"
        }'

    두 번째 인터페이스에 대한 NetworkAttachmentDefinition 리소스

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload10
      name: hwoffload10
      namespace: default
    spec:
        config: '{ "cniVersion":"0.3.1", "name":"hwoffload10","type":"host-device","device":"ens5"
        }'

  3. Pod와 함께 생성한 인터페이스를 사용합니다. 예를 들면 다음과 같습니다.

    두 개의 OVS 오프로드 인터페이스를 사용하는 Pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: dpdk-testpmd
      namespace: default
      annotations:
        irq-load-balancing.crio.io: disable
        cpu-quota.crio.io: disable
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload9
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload10
    spec:
      restartPolicy: Never
      containers:
      - name: dpdk-testpmd
        image: quay.io/krister/centos8_nfv-container-dpdk-testpmd:latest

9.10.5. OVS 하드웨어 오프로드 네트워크 연결

OVS(Open vSwitch) 하드웨어 오프로드 네트워크를 클러스터에 연결할 수 있습니다.

사전 요구 사항

  • 클러스터가 설치되어 실행 중입니다.
  • 클러스터에 사용할 OVS 하드웨어 오프로드 네트워크를 RHOSP(Red Hat OpenStack Platform)에 프로비저닝했습니다.

프로세스

  1. 다음 템플릿에서 network.yaml 이라는 파일을 생성합니다.

    spec:
      additionalNetworks:
      - name: hwoffload1
        namespace: cnf
        rawCNIConfig: '{ "cniVersion": "0.3.1", "name": "hwoffload1", "type": "host-device","pciBusId": "0000:00:05.0", "ipam": {}}' 1
        type: Raw

    다음과 같습니다.

    pciBusId

    오프로드 네트워크에 연결된 장치를 지정합니다. 이 값이 없는 경우 다음 명령을 실행하여 이 값을 찾을 수 있습니다.

    $ oc describe SriovNetworkNodeState -n openshift-sriov-network-operator
  2. 명령줄에서 다음 명령을 입력하여 클러스터를 파일로 패치합니다.

    $ oc apply -f network.yaml

9.10.6. RHOSP에서 Pod에 IPv6 연결 활성화

다른 노드에 있는 추가 네트워크가 있는 Pod 간에 IPv6 연결을 활성화하려면 서버의 IPv6 포트에 대한 포트 보안을 비활성화합니다. 포트 보안을 비활성화하면 Pod에 할당된 각 IPv6 주소에 대해 허용된 주소 쌍을 생성하고 보안 그룹에서 트래픽을 활성화할 필요가 없습니다.

중요

다음 IPv6 추가 네트워크 구성만 지원됩니다.

  • SLAAC 및 호스트 장치
  • SLAAC 및 MACVLAN
  • DHCP 상태 비저장 및 호스트 장치
  • DHCP 상태 비저장 및 MACVLAN

프로세스

  • 명령줄에서 다음 명령을 입력합니다.

    $ openstack port set --no-security-group --disable-port-security <compute_ipv6_port>
    중요

    이 명령은 포트에서 보안 그룹을 제거하고 포트 보안을 비활성화합니다. 트래픽 제한은 전적으로 포트에서 제거됩니다.

다음과 같습니다.

<compute_ipv6_port>
컴퓨팅 서버의 IPv6 포트를 지정합니다.

9.10.7. RHOSP의 Pod에 IPv6 연결 추가

Pod에서 IPv6 연결을 활성화한 후 CNI(Container Network Interface) 구성을 사용하여 연결을 추가합니다.

프로세스

  1. CNO(Cluster Network Operator)를 편집하려면 다음 명령을 입력합니다.

    $ oc edit networks.operator.openshift.io cluster
  2. spec 필드에서 CNI 구성을 지정합니다. 예를 들어 다음 구성은 MACVLAN과 함께 SLAAC 주소 모드를 사용합니다.

    ...
    spec:
      additionalNetworks:
      - name: ipv6
        namespace: ipv6 1
        rawCNIConfig: '{ "cniVersion": "0.3.1", "name": "ipv6", "type": "macvlan", "master": "ens4"}' 2
        type: Raw
    1 1
    동일한 네임스페이스에 Pod를 생성해야 합니다.
    2
    네트워크 연결 "master" 필드의 인터페이스는 더 많은 네트워크가 구성되거나 다른 커널 드라이버가 사용되는 경우 "ens4" 와 다를 수 있습니다.
    참고

    상태 저장 주소 모드를 사용하는 경우 CNI 구성에 IPAM(IP 주소 관리)을 포함합니다.

    DHCPv6은 Multus에서 지원되지 않습니다.

  3. 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 커밋합니다.

검증

  • 명령줄에서 다음 명령을 입력합니다.

    $ oc get network-attachment-definitions -A

    출력 예

    NAMESPACE       NAME            AGE
    ipv6            ipv6            21h

이제 보조 IPv6 연결이 있는 pod를 생성할 수 있습니다.

9.10.8. RHOSP에 IPv6 연결이 있는 Pod 생성

Pod에 IPv6 연결을 활성화하고 Pod에 추가한 후 보조 IPv6 연결이 있는 Pod를 생성합니다.

프로세스

  1. IPv6 네임스페이스와 k8s.v1.cni.cncf.io/networks: <additional_network_name > 주석을 사용하는 Pod를 정의합니다. 여기서 < additional_network_name 은 추가 네트워크의 이름입니다. 예를 들어 Deployment 오브젝트의 일부로 다음을 수행합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-openshift
      namespace: ipv6
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
             - labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - hello-openshift
      replicas: 2
      selector:
        matchLabels:
          app: hello-openshift
      template:
        metadata:
          labels:
            app: hello-openshift
          annotations:
            k8s.v1.cni.cncf.io/networks: ipv6
        spec:
          securityContext:
            runAsNonRoot: true
            seccompProfile:
              type: RuntimeDefault
          containers:
          - name: hello-openshift
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                - ALL
            image: quay.io/openshift/origin-hello-openshift
            ports:
            - containerPort: 8080
  2. Pod를 생성합니다. 예를 들어 명령줄에서 다음 명령을 입력합니다.

    $ oc create -f <ipv6_enabled_resource>

다음과 같습니다.

<ipv6_enabled_resource>
리소스 정의가 포함된 파일을 지정합니다.