Configurar la seguridad de transporte
En Cloud Service Mesh 1.5 y versiones posteriores, la TLS mutua automática (mTLS automática) está habilitada de forma predeterminada. Con mTLS automático, un proxy sidecar del cliente detecta automáticamente si el servidor tiene un sidecar. El sidecar del cliente envía mTLS a las cargas de trabajo con sidecars y texto sin formato a las cargas de trabajo sin sidecars. Sin embargo, los servicios aceptan tráfico tanto de texto sin formato como de mTLS. A medida que inyectas proxies sidecar en tus pods, te recomendamos que también configures tus servicios para que solo acepten tráfico mTLS.
Con Cloud Service Mesh, puedes configurar tus servicios para que solo acepten mTLS aplicando una política PeerAuthentication
. Cloud Service Mesh te ofrece la flexibilidad de aplicar la política a toda la malla de servicios, a un espacio de nombres o a una carga de trabajo concreta. Cuando asignas una política a una carga de trabajo concreta, esta política tiene prioridad. Por ejemplo, la política de una carga de trabajo específica tiene prioridad sobre otra política específica para un espacio de nombres. Si no se asigna ninguna política a la carga de trabajo, heredará la política del espacio de nombres o de la malla.
Habilitar TLS mutuo por espacio de nombres
Para habilitar mTLS en todas las cargas de trabajo de un espacio de nombres concreto, usa una política de autenticación de todo el espacio de nombres. Especifica el espacio de nombres al que se aplica
en metadata
.
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "NAMESPACE"
spec:
mtls:
mode: STRICT
EOF
Resultado esperado:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Habilitar TLS mutuo por carga de trabajo
Para definir una política de PeerAuthentication
en una carga de trabajo específica, debe configurar la sección selector
y especificar las etiquetas que coincidan con la carga de trabajo deseada.
Sin embargo, Cloud Service Mesh no puede agregar políticas a nivel de carga de trabajo para el tráfico mTLS saliente a un servicio. Para gestionar este comportamiento, debe configurar una regla de destino.
Aplica una política de autenticación a una carga de trabajo específica de tu espacio de nombres:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "AUTH_POLICY_NAME" namespace: "NAMESPACE" spec: selector: matchLabels: app: WORKLOAD mtls: mode: STRICT EOF
Resultado esperado:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Configura una regla de destino coincidente:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "DEST_RULE_NAME" spec: host: "WORKLOAD.NAMESPACE.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL EOF
Resultado esperado:
destinationrule.networking.istio.io/WORKLOAD created
Implementar mTLS en toda la malla
Para evitar que todos tus servicios de la malla acepten tráfico de texto sin cifrar, define una política PeerAuthentication
en toda la malla con el modo mTLS definido como STRICT
(el valor predeterminado es PERMISSIVE
). La política PeerAuthentication
de toda la malla no debe tener un selector y debe aplicarse en el espacio de nombres raíz, istio-system
. Cuando
implementas la política, el plano de control aprovisiona automáticamente certificados TLS
para que las cargas de trabajo puedan autenticarse entre sí.
Para implementar mTLS en toda la malla, sigue estos pasos:
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
EOF
Resultado esperado:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
Buscar y eliminar políticas de PeerAuthentication
Para ver una lista de todas las políticas de PeerAuthentication
en la malla de servicios, haz lo siguiente:
kubectl get peerauthentication --all-namespaces
Si hay una política de PeerAuthentication
vigente, puedes eliminarla con kubectl delete
:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME