Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

16.10. Flannel の使用

デフォルトの SDN の代わりとして、OpenShift Container Platform は、flannel ベースのネットワークをインストールするための Ansible Playbook を提供しています。これは、SDN に依存しているクラウドプロバイダーのプラットフォーム (Red Hat OpenStack Platform など) で OpenShift Container Platform を実行していて、両方のプラットフォームでパケットのカプセル化を 2 回実行することを避けたい場合に役立ちます。

Flannel は、すべてのコンテナーに単一の IP ネットワーク空間を使用し、隣接する空間のサブセットを各インスタンスに割り当てることを可能にします。これにより、コンテナーは何にも妨げられずに同じネットワーク空間内の任意の IP へ接続を試みることができます。これはネットワークを使ってアプリケーション内にあるコンテナーを別のアプリケーションから分離することができないために、マルチテナンシーを妨げます。

マルチテナンシーの分離とパフォーマンスのどちらを優先するかに応じて、内部ネットワークに OpenShift SDN (マルチテナンシー) と Flannel (パフォーマンス) のいずれか適切な方を選択する必要があります。

重要

Flannel は、Red Hat OpenStack Platform の OpenShift Container Platform のみでサポートされています。

重要

Neutron の現行バージョンは、各ポートに対するポートセキュリティーをデフォルトで実施します。これにより、ポートでのポート上のアドレスと異なる MAC アドレスを使ったパケットの送信または受信を実行できません。Flannel は、仮想の MAC アドレスと IP アドレスを作成し、パケットをポート上で送受信できる必要があります。 したがって、Flannel のトラフィックを実行するポートでは、ポートセキュリティーが無効にされている必要があります。

OpenShift Container Platform クラスターで Flannel を無効にするには、以下を実行します。

  1. Neutron のポートセキュリティーコントロールは、Flannel と互換性を持つように設定される必要があります。Red Hat OpenStack Platform のデフォルト設定では、port_security のユーザーコントロールは無効にされています。Neutron を、ユーザーが個々のポートで port_security 設定を制御できるように設定します。

    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 インスタンスが作成されている間に、ポートのポートセキュリティーとセキュリティーグループの両方を無効にします。 ここで、コンテナーネットワークの Flannel インターフェイスは以下のようになります。

    neutron port-update $port --no-security-groups --port-security-enabled=False
    注記

    Flannel は、ノードのサブネットを設定し、割り当てるために etcd からの情報を収集します。したがって、etcd ホストに割り当てられるセキュリティーグループは、ノードからポート 2379/tcp へのアクセスを許可し、ノードのセキュリティーグループは etcd ホストでのそのポートへの egress 通信を許可する必要があります。

    1. インストールを実行する前に以下の変数を Ansible インベントリーファイルに設定します。

      openshift_use_openshift_sdn=false 1
      openshift_use_flannel=true 2
      flannel_interface=eth0
      1
      openshift_use_openshift_sdnfalse に設定してデフォルトの SDN を無効にします。
      2
      openshift_use_flanneltrue に設定して設定されている flannel を有効にします。
    2. オプションで、flannel_interface 変数を使用してホスト間の通信に使用するインターフェイスを指定することができます。この変数がない場合は、OpenShift Container Platform インストールではデフォルトのインターフェイスが使用されます。

      注記

      Flannel を使用した Pod とサービスのカスタムのネットワーク CIDR は、今後のリリースでサポートされる予定です。BZ#1473858

  3. OpenShift Container Platform をインストールした後、iptables の一連のルールを各 OpenShift Container Platform ノードに追加します。

    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 コマンドは、現在の インメモリー の 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