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 非常有用。

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 主机上该端口的出口通信。

    1. 在运行安装前,在 Ansible 清单文件中设置以下变量:

      openshift_use_openshift_sdn=false 1
      openshift_use_flannel=true 2
      flannel_interface=eth0
      1
      openshift_use_openshift_sdn 设置为 false 以禁用默认的 SDN。
      2
      openshift_use_flannel 设置为 true 以启用 flannel
    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 命令保存在 内存 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