Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

16.10. Flannel 사용

OpenShift Container Platform은 기본 SDN에 대한 대안으로 flannel- 기반 네트워킹을 설치하기 위한 Ansible 플레이북도 제공합니다. 이는 Red Hat OpenStack Platform과 같은 SDN에도 의존하고 두 플랫폼을 통해 패킷을 캡슐화하지 않으려는 클라우드 공급자 플랫폼에서 OpenShift Container Platform을 실행하는 경우 유용합니다.

Flannel은 공간의 인접 하위 집합을 각 인스턴스에 할당하는 모든 컨테이너에 단일 IP 네트워크 공간을 사용합니다. 따라서 컨테이너가 동일한 네트워크 공간에 있는 IP 주소에 접속하지 못하게 할 수 없습니다. 이 경우 한 애플리케이션의 컨테이너를 격리하는 데 네트워크를 사용할 수 없기 때문에 멀티 테넌시가 중단됩니다.

내부 네트워크의 mutli-tenancy 격리 또는 성능을 선호하는지 여부에 따라 OpenShift SDN(다중 테넌시)과 flannel(performance) 중에서 선택할 때 적절한 선택을 결정해야 합니다.

중요

Flannel은 Red Hat OpenStack Platform의 OpenShift Container Platform에서만 지원됩니다.

중요

현재 버전의 Neutron은 기본적으로 포트에 포트 보안을 적용합니다. 이렇게 하면 포트 자체에서 MAC 주소와 다른 MAC 주소로 패킷을 보내거나 받는 것을 방지할 수 있습니다. Flannel은 가상 MAC 및 IP 주소를 만들고 포트에서 패킷을 전송하고 수신해야 하므로 flannel 트래픽을 전송하는 포트에서 포트 보안을 비활성화해야 합니다.

OpenShift Container Platform 클러스터 내에서 flannel을 활성화하려면 다음을 수행합니다.

  1. Neutron 포트 보안 제어는 Flannel과 호환되도록 구성해야 합니다. Red Hat OpenStack Platform의 기본 구성에서는 port_security 의 사용자 제어를 비활성화합니다. 사용자가 개별 포트에서 port_security 설정을 제어할 수 있도록 Neutron을 구성합니다.

    1. Neutron 서버에서 다음을 /etc/neutron/plugins/ml2/ml2_conf.ini 파일에 추가합니다.

      [ml2]
      ...
      extension_drivers = port_security
    2. 그런 다음 Neutron 서비스를 다시 시작하십시오.

      service neutron-dhcp-agent restart
      service neutron-ovs-cleanup restart
      service neutron-metadata-agentrestart
      service neutron-l3-agent restart
      service neutron-plugin-openvswitch-agent restart
      service neutron-vpn-agent restart
      service neutron-server  restart
  2. Red Hat OpenStack Platform에서 OpenShift Container Platform 인스턴스를 생성할 때 컨테이너 네트워크 플란널 인터페이스가 될 포트에서 포트 보안 및 보안 그룹을 모두 비활성화합니다.

    neutron port-update $port --no-security-groups --port-security-enabled=False
    참고

    Flannel은 etcd에서 정보를 수집하여 노드의 서브넷을 구성하고 할당합니다. 따라서 etcd 호스트에 연결된 보안 그룹은 노드에서 포트 2379/tcp로의 액세스를 허용해야 하며 노드 보안 그룹은 etcd 호스트의 해당 포트에 대한 송신 통신을 허용해야 합니다.

    1. 설치를 실행하기 전에 Ansible 인벤토리 파일에서 다음 변수를 설정합니다.

      openshift_use_openshift_sdn=false 1
      openshift_use_flannel=true 2
      flannel_interface=eth0
      1
      기본 SDN을 비활성화하려면 openshift_use_openshift_sdnfalse로 설정합니다.
      2
      해당 위치에서 flannel 을 활성화하려면 openshift_use_flanneltrue 로 설정합니다.
    2. 선택적으로 flannel_interface 변수를 사용하여 호스트 간 통신에 사용할 인터페이스를 지정할 수 있습니다. 이 변수가 없으면 OpenShift Container Platform 설치에 기본 인터페이스가 사용됩니다.

      참고

      flannel을 사용하는 Pod 및 서비스의 사용자 지정 네트워킹 CIDR이 향후 릴리스에서 지원됩니다. BZ#1473858

  3. OpenShift Container Platform을 설치한 후 모든 OpenShift Container Platform 노드에 iptables 규칙 세트를 추가합니다.

    iptables -A DOCKER -p all -j ACCEPT
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

    /etc/sysconfig/iptables 에서 이러한 변경 사항을 지속하려면 모든 노드에서 다음 명령을 사용합니다.

    cp /etc/sysconfig/iptables{,.orig}
    sh -c "tac /etc/sysconfig/iptables.orig | sed -e '0,/:DOCKER -/ s/:DOCKER -/:DOCKER ACCEPT/' | awk '"\!"p && /POSTROUTING/{print \"-A POSTROUTING -o eth1 -j MASQUERADE\"; p=1} 1' | tac > /etc/sysconfig/iptables"
    참고

    iptables-save 명령은 모든 현재 in memory iptables 규칙을 저장합니다. 그러나 Docker, Kubernetes 및 OpenShift Container Platform은 지속되도록 설계되지 않은 많은 iptables 규칙(서비스 등)을 생성하므로 이러한 규칙을 저장하는 것이 문제가 될 수 있습니다.

OpenShift Container Platform 트래픽의 나머지 부분에서 컨테이너 트래픽을 분리하려면 격리된 테넌트 네트워크를 생성하고 모든 노드를 연결하는 것이 좋습니다. 다른 네트워크 인터페이스(eth1)를 사용하는 경우 /etc/sysconfig/network-scripts/ifcfg-eth1 파일을 통해 부팅 시 시작되도록 인터페이스를 구성해야 합니다.

DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
DEFTROUTE=no
PEERDNS=no