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
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