Gostaria de executar um teste de rede de alto desempenho em um contêiner de docker e não quero a sobrecarga da ponte (para que os pipeworks não funcionem no AFAIK). Gostaria de atribuir (além do dispositivo docker normal veth) uma interface de rede física de 40GbE do host para um contêiner docker, como no modo lxc "phys". Isso deve fazer com que a interface física fique invisível para o host.
networking
docker
NeilenMarais
fonte
fonte
Na minha pesquisa, me deparei com soluções antigas que invocavam a passagem de parâmetros lxc-config para o docker, mas as versões mais recentes do docker não usam mais as ferramentas lxc, de modo que não podem funcionar.
Seguindo a sugestão aqui: https://groups.google.com/d/msg/docker-user/pL8wlmiuAEU/QfcoFcKI3kgJ, uma solução foi encontrada. Eu não procurei modificar o script de tubagem conforme mencionado acima, em vez de usar diretamente os comandos necessários. Consulte também a postagem subsequente do blog: http://jason.digitalinertia.net/exposing-docker-containers-with-sr-iov/ .
Os seguintes comandos da ferramenta de espaço para nome de rede de baixo nível (isto é, não específico do docker) podem ser usados para transferir uma interface do host para um contêiner do docker:
Uma pequena ressalva na interface, que indica se o seu host possui muitos dispositivos ethX (o meu tinha eth0 -> eth5). Por exemplo, digamos que você mova eth3 para o contêiner como eth1 no espaço para nome dos contêineres. Quando você para o contêiner, o kernel tenta mover o dispositivo eth1 do contêiner de volta para o host, mas observe que já existe um dispositivo eth1. Ele irá renomear a interface para algo arbitrário; Levei um tempo para encontrá-lo novamente. Por esse motivo, editei o /etc/udev/rules.d/70-persistent-net.rules (acho que esse nome de arquivo é comum às distribuições Linux mais populares; estou usando o Debian) para dar à interface em questão um nome único e inconfundível e use isso no contêiner e no host.
Como não estamos usando o docker para fazer essa configuração, as ferramentas padrão do ciclo de vida do docker (por exemplo, docker run --restart = on-fail: 10 ...) não podem ser usadas. A máquina host em questão executa o Debian Wheezy, então escrevi o seguinte script init:
Ligeiramente hacky, mas funciona :)
fonte
eth
? O Debian não faz nomes de dispositivos de rede consistentes?/var/run/netns/$PID
é necessário: Você precisa dele para que osip netns exec $PID ...
comandos funcionem.Eu escrevo um plug-in de rede docker para fazer isso.
https://github.com/yunify/docker-plugin-hostnic
fonte