Configura la seguridad del transporte

En la Anthos Service Mesh 1.5 y versiones posteriores, la TLS mutua (automática mTLS) automática está habilitada de forma predeterminada. Con la mTLS automática, un proxy de sidecar de cliente detecta si el servidor tiene un sidecar de forma automática. El sidecar del cliente envía mTLS a las cargas de trabajo con sidecars y envía el texto sin formato a las cargas de trabajo sin sidecars. Sin embargo, ten en cuenta que los servicios aceptan el texto sin formato y el tráfico mTLS. A medida que inyectes proxies de sidecar a tus Pods, recomendamos que también configures tus servicios para que solo acepten tráfico mTLS.

mTLS mutua

Con Anthos Service Mesh, puedes aplicar un solo archivo YAML a fin de aplicar mTLS fuera del código de tu aplicación. Anthos Service Mesh te brinda la flexibilidad para aplicar una política de autenticación a toda la malla de servicios, a un espacio de nombres o a una carga de trabajo individual.

Aplica la mTLS en toda la malla

Para evitar que todos tus servicios de la malla acepten tráfico de texto sin formato, configura una política PeerAuthentication en toda la malla con el modo mTLS establecido en 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 aplicar 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

Habilita TLS mutua por espacio de nombres

A fin de habilitar mTLS para todas las cargas de trabajo dentro de un espacio de nombres en particular, usa una política de autenticación de todo el espacio de nombres. La especificación de la política es la misma que para una política en toda la malla, pero especificas 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

Habilita TLS mutua por carga de trabajo

Si quieres configurar una política PeerAuthentication para una carga de trabajo específica, debes configurar la sección selector y especificar las etiquetas que coincidan con la carga de trabajo deseada. Sin embargo, Anthos Service Mesh no puede agregar políticas a nivel de las cargas de trabajo para el tráfico mTLS saliente a un servicio. Debes configurar una regla de destino para administrar ese comportamiento.

  1. Aplica una política de autenticación a una carga de trabajo específica en 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
  2. Configura una regla de destino que coincida:

    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

Busca y borra las políticas de PeerAuthentication

Para obtener una lista de todas las políticas de PeerAuthentication en la malla de servicios, haz lo siguiente:

kubectl get peerauthentication --all-namespaces

Si se aplica una política PeerAuthentication de forma forzosa, puedes borrarla con kubectl delete:

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

¿Qué sigue?