É possível...
- executar um contêiner com podman
- que tem um IP na mesma sub-rede em que o host está
- é acessível de todos os outros hosts na sub-rede
- incluindo o próprio host ?
Tive sucesso parcial usando drivers macvlan e ipvlan - sou capaz de executar um contêiner, fornecer a ele um endereço IP e esse IP pode ser acessado de todos os outros hosts da rede.
No entanto, não consigo acessar de ou para o host que executa o contêiner.
Eu até tentei com as versões mais recentes de podman , netavark , cni-plugins construídos a partir da fonte, que habilitaram o driver ipvlan com o mesmo resultado.
Prefiro um ponteiro a um guia que descreva como fazer isso, embora conselhos para solução de problemas também sejam bem-vindos.
Para fazer isso, eu só tive que adicionar uma interface ipvlan extra no host que me permitisse falar com os contêineres se o podman também usasse ipvlan.
10.0.0.0/16
10.0.99.0/24
. Esta sub-rede deve ser dedicada aos contêineres neste host.10.0.99.1
. Essa é a interface que o host pode usar para conversar com os contêineres.sudo vim /etc/cni/net.d/podnet.conflist
e altere rangeStart de10.0.99.1
para10.0.99.2
.Para criar a interface ipvlan com systemd, tive que
IPVLAN = podnet
à[Network]
seção do arquivo que define minha interface de rede do host, que criará umapodnet
interface de rede conectada ao pai.Com toda a justiça, a mesma abordagem funcionou com macvlan em vez de ipvlan, mas partes da minha rede não conseguiram alcançar o host com a interface MACVlan, então mudei para IPVlan para melhor interoperabilidade.
Outro problema que enfrentei foi devido ao padman do podman ser netavark, e o suporte netavark IPVlan está disponível apenas no podman 4.5+, enquanto eu ainda estava no 4.3. Mudar o back-end de rede para
cni
corrigir esse problema.Não é exatamente o que você perguntou, mas você pode simplesmente compartilhar o mesmo endereço IP do host, leia para ver se é de alguma ajuda para você:
O que você precisa fazer é adicionar ao
podman run
Isso--network=host
significa essencialmente que você compartilha a mesma pilha de rede com a máquina host, então você deve levar em consideração o seguinte: