Lo que necesita saber sobre la política de red de Kubernetes

Con un número cada vez mayor de aplicaciones nativas de la nube que pasan a producción gracias a la adopción de Kubernetes, la seguridad es un punto de control importante que debe tener en cuenta al principio del proceso. Al diseñar una aplicación nativa de la nube, es muy importante incorporar una estrategia de seguridad por adelantado. De lo contrario, surgen problemas de seguridad persistentes que pueden causar retrasos en el proyecto y, en última instancia, costarle estrés y dinero innecesarios.
Durante años, la gente abandonó por fin la seguridad, hasta que su distribución estuvo a punto de entrar en producción. Esta práctica provoca retrasos en los resultados finales porque cada organización tiene estándares de seguridad que cumplir, los cuales son ignorados o no seguidos con muchos riesgos aceptados para lograr los resultados finales.
Comprender Kubernetes NetworkPolicy puede ser abrumador para las personas que recién comienzan a aprender los pormenores de la implementación de Kubernetes. Pero este es uno de los requisitos fundamentales que debe aprender antes de implementar una aplicación en su clúster de Kubernetes. Cuando aprenda Kubernetes y las plantillas de aplicaciones nativas de la nube, cree su eslogan "¡No deje atrás la seguridad!"
El concepto de política de red.
Política de red reemplaza los dispositivos de firewall en el contexto del centro de datos que conoce, como pods para instancias informáticas, complementos de red para enrutadores y conmutadores, y volúmenes para la red de área de almacenamiento (SAN).
De forma predeterminada, Kubernetes NetworkPolicy permite esto vainas para recibir tráfico desde cualquier lugar. Si no está preocupado por la seguridad de sus pods, entonces podría estar bien. Pero si está ejecutando una carga de trabajo crítica, necesita proteger sus pods. La forma de controlar el flujo de tráfico dentro del clúster (incluido el tráfico entrante y saliente) es a través de NetworkPolicies.
Para habilitar NetworkPolicy, un complementos de red que admite NetworkPolicy. De lo contrario, las reglas que ha aplicado se vuelven inútiles.
Hay varios complementos de red. listado en Kubernetes.io:
- Complemento CNI: únete al Interfaz de red de contenedores (CNI), diseñado para la interoperabilidad.
- Kubernetes sigue el v0.4.0 publicación de la especificación CNI.
- Complemento de Kubernetes: base de implementación
cbr0
utilizando elbridge
Yhost-local
Complemento CNI.
Aplicar una política de red
Para aplicar una política de red, necesita un clúster de Kubernetes en funcionamiento con un complemento de red que admita NetworkPolicy.
Pero primero debe comprender cómo usar NetworkPolicy en el contexto de Kubernetes. La política de red de Kubernetes permite esto vainas para recibir tráfico desde cualquier lugar. Esto no es ideal. Para proteger los pods, debe comprender los puntos finales que los pods pueden comunicar dentro de la construcción de Kubernetes.
- Uso de la comunicación de pod a pod
podSelector
.- namespaceSelector:
matchLabels:
project: myproject - Usar comunicación de espacio de nombres a espacio de nombres y comunicación de espacio de nombres a pod
namespaceSelector
y/o una combinación depodSelector
YnamespaceSelector
.- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend - IP bloquea la comunicación para usar pods
ipBlock
para definir cualIP CIDR
los bloques determinan el origen y el destino.- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
Tenga en cuenta la diferencia entre los pods, el espacio de nombres y las políticas basadas en IP. Para NetworkPolicy basado en pod y espacio de nombres, utiliza selector
para controlar el tráfico, mientras que para NetworkPolicy basado en IP, los controles se definen usando IP blocks
(Rangos CIDR).
En conjunto, una NetworkPolicy debería verse así:
apiVersion: Redes.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 192.168.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
Refiriéndose a NetworkPolicy arriba, tenga en cuenta la spec
sección. En esta sección, podSelector
con etiqueta aplicación = servidor es el objetivo de nuestra NetworkPolicy. En resumen, NetworkPolicy protege la aplicación llamada back-end dentro de un espacio de nombres dado.
Esta sección también tiene policyTypes
definición. Este campo indica si la política especificada se aplica o no al tráfico que ingresa al pod seleccionado, al tráfico que sale de los pods seleccionados o a ambos.
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
- Egress
Ahora, mira el ingress
Y egress
sección. Esta definición determina el control de NetworkPolicy.
Primero, mira en el ingress from
sección.
NetworkPolicy en este caso permite la conexión del pod desde:
ipBlock
- Permitir 172.17.0.0/16
- Niega 192.168.1.0 / 24
namespaceSelector
myproject
: permitir todos los pods de este espacio de nombres y con las mismas etiquetas proyecto = mi proyecto.
podSelector
frontend
: permitir pods que coincidan con la etiqueta rol = interfaz
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 192.168.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
Ahora, examina el egress to
sección. Esto hace que el pod se conecte a:
ipBlock
- 10.0.0.0/24: Se permite la conexión a este CIDR
- Puertos: Permitir conexión vía TCP y puerto 5978
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
Limitaciones de NetworkPolicy
NetworkPolicy por sí solo no puede proteger completamente sus clústeres de Kubernetes. Los componentes del sistema operativo o las tecnologías de capa 7 se pueden utilizar para superar las limitaciones conocidas. Recuerde que NetworkPolicy solo puede abordar la seguridad para la dirección IP y la capa de puerto: capa 3 o 4 de interconexión de sistemas abiertos (OSI).
Para cumplir con los requisitos de seguridad que NetworkPolicy no puede manejar, se deben usar otras soluciones de seguridad. Aquí están algunas casos de uso que necesita saber dónde NetworkPolicy necesita ser impulsado por otras tecnologías.
Resumen
Comprender Kubernetes NetworkPolicy es importante porque es una forma de cumplir (pero no anular) la función de firewall que normalmente usa en la configuración de un centro de datos, pero para Kubernetes. Piense en esto como el primer nivel de seguridad para su contenedor, sabiendo que NetworkPolicy por sí solo no es una solución de seguridad total.
NetworkPolicy aplica seguridad al pod y al espacio de nombres mediante selectores y etiquetas. Además, NetworkPolicy también puede aplicar la seguridad a través de rangos de IP.
Tener una comprensión sólida de NetworkPolicy es una habilidad importante para la adopción segura de la contenedorización en el contexto de Kubernetes.
Artículos de interés