A CNI (Container Network Interface) é o padrão de plug-in de rede do Kubernetes. Uma cadeia CNI conecta vários plug-ins CNI em sequência: cada plug-in lida com tarefas específicas, como alocação de IP ou roteamento, e transmite a saída para o próximo plug-in até concluir todas as tarefas. Este tópico explica como configurar uma cadeia CNI personalizada em um cluster ACK Terway.
Pré-requisitos
Um cluster gerenciado do ACK criado com o plug-in de rede Terway.
Terway v1.5.6 ou posterior. O cluster não usa o modo de rede ENI exclusivo.
O ACK não garante a compatibilidade entre plug-ins CNI. Configurar uma cadeia CNI personalizada é uma operação de alto risco. Entenda a função de cada plug-in antes de prosseguir para evitar interrupções nos negócios.
Configure uma cadeia CNI personalizada
Adicione os plug-ins CNI ao arquivo de configuração do Terway.
-
Edite o ConfigMap
eni-config:kubectl edit cm -nkube-system eni-configParâmetro
Descrição
10-terway.conf
A configuração CNI do Terway. Não a modifique.
ImportanteNão modifique este arquivo.
10-terway.conflist
A configuração da cadeia CNI personalizada.
A primeira entrada em
pluginsdeve corresponder a10-terway.conf.ImportanteEsta é uma configuração de exemplo. Não a use diretamente.
O bloco de configuração deve estar em formato JSON.
Arquivo de configuração
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} } -
Execute
kubectl rollout restart -n kube-system daemonset.apps/terway-eniippara recriar os pods do Terway.Após configurar corretamente, verifique a configuração do plug-in personalizado em
etc/cni/net.d/10-terway.conflistno nó.
Casos de uso
Configure um portmap
O plug-in portmap mapeia as portas dos pods às portas do host para permitir o acesso externo.
Para acesso à rede pública, configure as regras de entrada do grupo de segurança para permitir o tráfego nas portas necessárias.
Essas regras podem entrar em conflito com as políticas de rede do Kubernetes. Teste-as exaustivamente antes de implantá-las em produção.
Exemplo de configuração
-
Acesse usando o endereço IP privado e a porta de um nó:
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} } -
Acesse usando o endereço IP público e a porta:
O acesso à rede pública exige a seguinte configuração.
Parâmetro
Non-Datapath V2
Datapath V2
masqAll
Não obrigatório
Obrigatório
symmetric_routing
Obrigatório
Obrigatório
masqAll: parâmetro do plug-in portmap. Requer o portmap v1.7.1 ou posterior.
symmetric_routing: parâmetro do plug-in Terway. Requer o Terway v1.15.0 ou posterior.
Clusters Datapath V2 com substituição de kube-proxy não exigem o plug-in portmap.
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "name": "terway-chain", "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "symmetric_routing": true, "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "masqAll": false } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }
Desative endereços link-local IPv6 para contêineres
Mesmo sem o recurso de pilha dupla IPv6, os contêineres recebem automaticamente um endereço link-local IPv6 na sub-rede fe80::/64. Esse comportamento padrão do kernel geralmente é inofensivo.
Se um aplicativo lidar incorretamente com endereços de rede, ele poderá usar endereços link-local IPv6 para comunicação entre redes. Como os endereços link-local funcionam apenas no mesmo link, ocorrerão falhas. Reporte esse tipo de problema ao fornecedor do aplicativo antes de tomar qualquer ação.
Para desativar endereços link-local IPv6 nos contêineres, configure o plug-in tuning.
Exemplo de configuração
kind: ConfigMap
apiVersion: v1
metadata:
name: eni-config
namespace: kube-system
data:
10-terway.conflist: |
{
"plugins": [
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
},
{
"type": "tuning",
"sysctl": {
"net.ipv6.conf.all.disable_ipv6": "1",
"net.ipv6.conf.default.disable_ipv6": "1",
"net.ipv6.conf.lo.disable_ipv6": "1"
}
}
]
}
10-terway.conf: |
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
}