CNI (Container Network Interface) es el estándar de plugin de red para Kubernetes. Una cadena CNI vincula varios plugins CNI en secuencia: cada plugin se encarga de tareas específicas, como la asignación de IP o el enrutamiento, y pasa su salida al siguiente hasta completar todas las tareas. Este tema explica cómo configurar una cadena CNI personalizada en un clúster ACK con Terway.
Requisitos previos
Se creó un ACK managed cluster con el plugin de red Terway.
Terway v1.5.6 o posterior. El clúster no utiliza el modo de red ENI exclusiva.
ACK no garantiza la compatibilidad entre plugins CNI. Configurar una cadena CNI personalizada es una operación de alto riesgo. Asegúrese de comprender cada plugin antes de continuar para evitar interrupciones en el servicio.
Configure una cadena CNI personalizada
Agregue los plugins CNI al archivo de configuración de Terway.
-
Edite el ConfigMap
eni-config:kubectl edit cm -nkube-system eni-configParámetro
Descripción
10-terway.conf
La configuración CNI de Terway. No la modifique.
ImportanteNo modifique este archivo.
10-terway.conflist
La configuración de la cadena CNI personalizada.
La primera entrada en
pluginsdebe coincidir con10-terway.conf.ImportanteEsta es una configuración de ejemplo. No la utilice directamente.
El bloque de configuración debe estar en formato JSON.
Archivo de configuració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} } -
Ejecute
kubectl rollout restart -n kube-system daemonset.apps/terway-eniippara reconstruir los pods de Terway.Si la configuración es correcta, compruebe la configuración del plugin personalizado en
etc/cni/net.d/10-terway.conflisten el nodo.
Casos de uso
Configure portmap
El plugin portmap asigna puertos de pods a puertos del host para permitir el acceso externo.
Para acceder desde la red pública, configure reglas de entrada en el security group que permitan el tráfico en los puertos necesarios.
Estas reglas pueden entrar en conflicto con las políticas de red de Kubernetes. Realice pruebas exhaustivas antes de desplegar en producción.
Ejemplo de configuración
-
Acceso mediante la dirección IP privada y el puerto de un nodo:
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} } -
Acceso mediante la dirección IP pública y el puerto:
El acceso desde la red pública requiere la siguiente configuración.
Parámetro
Non-Datapath V2
Datapath V2
masqAll
No obligatorio
Obligatorio
symmetric_routing
Obligatorio
Obligatorio
masqAll: parámetro del plugin portmap. Requiere portmap v1.7.1 o posterior.
symmetric_routing: parámetro del plugin Terway. Requiere Terway v1.15.0 o posterior.
Los clústeres Datapath V2 con reemplazo de kube-proxy no requieren el plugin 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} }
Deshabilite direcciones link-local IPv6 para contenedores
Incluso sin la función de pila dual IPv6, los contenedores reciben automáticamente una dirección link-local IPv6 en la subred fe80::/64. Este comportamiento predeterminado del kernel suele ser inofensivo.
Si una aplicación gestiona incorrectamente las direcciones de red, podría usar direcciones link-local IPv6 para la comunicación entre redes. Dado que las direcciones link-local solo funcionan dentro del mismo enlace, esto provoca fallos. Reporte primero estos problemas al proveedor de la aplicación.
Para deshabilitar las direcciones link-local IPv6 en los contenedores, configure el plugin tuning.
Ejemplo de configuració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": "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}
}