Uma semi-solução para problemas de rede docker causados por mudanças de estado do firewall centos

um

Quando o sistema centos executa o docker, verifica-se que quando o status do firewall muda, a comunicação de rede entre os dockers será afetada. O motivo da busca de informações na Internet é: ao configurar o NAT (docker run -p) do contêiner na máquina host, Docker As regras NAT do firewall do host serão configuradas automaticamente, mas essas regras não serão persistidas no arquivo de configuração do firewall. Após reiniciar o firewall, essas regras desaparecerão, resultando diretamente em acesso inválido aos contêineres em execução.

a solução mais fácil

É reiniciar o docker e permitir que as regras do docker sejam carregadas novamente.

No entanto, obviamente não é aconselhável reiniciar o docker com frequência no ambiente de produção, então como resolver esse problema? Encontre informações na Internet e encontre algumas soluções.

uma forma de pensar

1) Não use o parâmetro docker run -p para configurar o NAT, mas configure manualmente as regras NAT do firewall.

2) Use o parâmetro docker run -p para configurar o NAT e use iptables-save (centos) para sincronizar as regras do firewall com o arquivo de configuração do firewall após o início do contêiner

Aqui estão 2 opções:

1.iptables -nL -t nat — Verifique se a regra NAT do docker existe

img

2.iptables-save Verifica se a tabela IPTable atual está vazia

3. Se a tabela IPtable não estiver vazia. Faça backup da tabela IPtable primeiro

cp /etc/sysconfig/iptables /etc/sysconfig/iptables_bak20180705

4.iptables-save > /etc/sysconfig/iptables salva todas as regras IPtable novamente

Neste momento, reiniciar o firewall não afetará o uso do contêiner.

Se precisar restaurar a configuração de proteção contra incêndio, você pode usar o comando: cp iptables_bak20180705 iptables

dois pensamentos

Várias configurações de iptables são definidas no arquivo /etc/sysconfig/iptables-config, como segue

# Load additional iptables modules (nat helpers)
#   Default: -none-
# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
IPTABLES_MODULES=""

# Unload modules on restart and stop
#   Value: yes|no,  default: yes
# This option has to be 'yes' to get to a sane state for a firewall
# restart or stop. Only set to 'no' if there are problems unloading netfilter
# modules.
IPTABLES_MODULES_UNLOAD="yes"

# Load additional iptables modules (nat helpers)
#   Default: -none-
# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
IPTABLES_MODULES=""

# Unload modules on restart and stop
#   Value: yes|no,  default: yes
# This option has to be 'yes' to get to a sane state for a firewall
# restart or stop. Only set to 'no' if there are problems unloading netfilter
# modules.
IPTABLES_MODULES_UNLOAD="yes"

# Save current firewall rules on stop.
#   Value: yes|no,  default: yes
# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets stopped
# (e.g. on system shutdown).
IPTABLES_SAVE_ON_STOP="no"

# Save current firewall rules on restart.
#   Value: yes|no,  default: yes
# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets
# restarted.
IPTABLES_SAVE_ON_RESTART="no"

# Save (and restore) rule and chain counter.
#   Value: yes|no,  default: no
# Save counters for rules and chains to /etc/sysconfig/iptables if
# 'service iptables save' is called or on stop or restart if SAVE_ON_STOP or
# SAVE_ON_RESTART is enabled.
IPTABLES_SAVE_COUNTER="no"

# Numeric status output
#   Value: yes|no,  default: yes
# Print IP addresses and port numbers in numeric format in the status output.
IPTABLES_STATUS_NUMERIC="yes"

# Verbose status output
#   Value: yes|no,  default: yes
# Print info about the number of packets and bytes plus the "input-" and
# "outputdevice" in the status output.
IPTABLES_STATUS_VERBOSE="no"

# Status output with numbered lines
#   Value: yes|no,  default: yes
# Print a counter/number for every rule in the status output.
IPTABLES_STATUS_LINENUMBERS="yes"

# Reload sysctl settings on start and restart
#   Default: -none-
# Space separated list of sysctl items which are to be reloaded on start.

IPTABLES_MODULES="ip_conntrack_netbios_ns"

Quando o firewall estiver ativado, especifique um conjunto de espaço independente para carregar adicionalmente o módulo iptables, o sistema iniciará, carregará o módulo firewall e imprimirá: Carregando módulos iptables adicionais: ip_conntrack_netbios_ns[ OK ]

IPTABLES_MODULES_UNLOAD="sim"

Se deve descarregar este módulo ao reiniciar e parar o módulo iptables.

IPTABLES_SAVE_ON_STOP="não"

Quando o firewall estiver parado, salve as regras atuais do firewall no arquivo iptables, não: (valor padrão) não salve as regras atuais no arquivo iptables.

IPTABLES_SAVE_ON_RESTART="não"

Quando o firewall reiniciar: service iptables restart, salve as regras atuais do firewall no arquivo iptables, não: (valor padrão) não salve as regras atuais no arquivo iptables.

IPTABLES_SAVE_COUNTER="não"

Salve e restaure os contadores de pacotes e bytes em todas as cadeias e regras, sim: salve o valor do contador, não: (padrão) não salve o valor do contador.

IPTABLES_STATUS_NUMERIC="sim"

O endereço IP de saída está na forma de números em vez de nomes de domínio e nomes de host, sim: (padrão) inclui apenas endereços IP na saída de status, não: retorna nomes de domínio ou nomes de host na saída de status.

IPTABLES_STATUS_VERBOSE="não"

Se deve incluir dispositivos de entrada e saída ao exibir o status do iptables, sim: incluir, não: (valor padrão) não inclui.

IPTABLES_STATUS_LINENUMBERS="sim"

Ao exibir o status do iptables, se o número correspondente de cada regra deve ser exibido ao mesmo tempo, sim: (valor padrão) saída, não: nenhuma saída.

De acordo com a descrição, altere IPTABLES_SAVE_ON_STOP="no" e IPTABLES_SAVE_ON_RESTART="no" para yes

Após a modificação, reinicie o firewall para entrar em vigor

Operação real

De acordo com o plano um: cp /etc/sysconfig/iptables /etc/sysconfig/iptables_bak20180705. O sistema informa que /etc/sysconfig/iptables não existe.

solução. Execute primeiro a próxima etapa: iptables-save > /etc/sysconfig/iptables para criar o arquivo correspondente.

Para evitar acidentes, na operação real, usei os dois esquemas. O resultado é que, quando o firewall é ativado, (

Ambos systemctl restart firewalld ou systemctl stop firewalld+systemctl start firewalld operation) a comunicação de rede entre dockers não será afetada.

Esse resultado garante que, quando o firewall estiver ativado, a configuração relacionada ao docker não será perdida nas regras do firewall.

Quando o firewall é fechado, a configuração do docker é perdida e a comunicação não é possível.

Portanto, este método é adequado para o ambiente de produção onde o firewall está sempre aberto.

pequeno legado

Pode-se ver que, embora o centos use o comando firewalld. Ainda atingimos nossas necessidades modificando a configuração subjacente do iptables.

Mas só percebemos que a comunicação é normal no estado aberto. E quando eu testo no ubantu, que também usa iptables, esteja ele ligado ou desligado. As regras do docker estão todas paradas na configuração do iptables, o que mostra que essa situação é alcançável. Limita-se apenas a uma compreensão insuficiente desse aspecto e pode atender apenas temporariamente às necessidades de produção e não pode ser otimizada. Espero ter a oportunidade de estudar mais no futuro

Documentos de referência:

https://www.cnblogs.com/JesseSong/articles/9269408.html

http://www.what21.com/sys/view/liunx_centos_1476930018956.html

Acho que você gosta

Origin blog.csdn.net/qq_42750537/article/details/101449965
Recomendado
Clasificación