Aller au contenu principal

Chiffrement du trafic

Pour certains cas d'usage, vous pouvez vouloir activer le chiffrement du trafic entre les pods afin de renforcer la sécurité dans votre namespace Kubernetes.

La meilleure approche est d'utiliser un Service Mesh qui gérera automatiquement le mTLS pour tout le trafic TCP entre les pods. Dans ce guide, nous parcourrons les deux plus connus, Istio et LinkerD.

Prérequis

Istio et LinkerD reposent tous deux sur le concept de conteneurs sidecar pour chiffrer le trafic. Pour que l'application GitGuardian fonctionne correctement, nous avons besoin de conteneurs sidecar.

  1. La fonctionnalité de conteneur sidecar « native » (c.-à-d. incluse nativement dans Kubernetes) est disponible à partir de Kubernetes 1.29. Il est obligatoire d'avoir cette version minimale pour que notre mesh fonctionne correctement.
  2. Vous devez avoir Istio ou LinkerD installé.
info

Il n'est pas recommandé d'utiliser un Mesh avec les bases de données. Comme nous appliquerons le Mesh à l'ensemble du namespace GitGuardian, si vos bases (PostgreSQL et Redis) sont embedded dans le même namespace, vous devrez ajouter des annotations pour les exclure du Mesh.

Istio

Cet exemple suppose que vous utilisez Istio en mode Sidecar (le mode « par défaut »).

  1. Étiquetez votre namespace GitGuardian pour indiquer à Istio que nous voulons activer le Mesh :
kubectl label namespace <namespace> istio-injection=enabled
  1. Si une base se trouve dans le même namespace, utilisez l'annotation sidecar.istio.io/inject: "false" dans le pod concerné pour l'exclure du Mesh

  2. Ajoutez ce qui suit à votre fichier de values Helm pour activer les sidecars natifs Kubernetes dans Istio :

migration:
podAnnotations:
sidecar.istio.io/nativeSidecar: "true"
info

Cela utilisera les sidecars natifs uniquement pour les Jobs, ce qui est suffisant pour faire fonctionner l'application GitGuardian. Vous pouvez ajouter ces annotations à n'importe quel pod du namespace.

  1. Créez un objet PeerAuthentication pour forcer le mTLS sur le namespace :
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: <namespace>
spec:
mtls:
mode: STRICT
  1. Si vous avez déjà installé l'application GitGuardian, vous devrez redémarrer tous les pods pour injecter le sidecar :
kubectl rollout restart deployment -n <namespace>
  1. Vous devriez maintenant voir tous les pods porter au moins 2 conteneurs : un pour l'application elle-même, un pour le sidecar Istio.

LinkerD

  1. Annotez votre namespace GitGuardian pour indiquer à LinkerD que nous voulons activer le Mesh et utiliser le mode sidecars natifs :
kubectl annotate namespace <namespace> linkerd.io/inject=enabled
kubectl annotate namespace <namespace> config.alpha.linkerd.io/proxy-enable-native-sidecar=true
  1. Si une base se trouve dans le même namespace, utilisez l'annotation linkerd.io/inject: "disabled" dans le pod concerné pour l'exclure du Mesh

  2. Si vous avez déjà installé l'application GitGuardian, vous devrez redémarrer tous les pods pour injecter le sidecar :

kubectl rollout restart deployment -n <namespace>
  1. Vous devriez maintenant voir tous les pods porter au moins 2 conteneurs : un pour l'application elle-même, un pour le sidecar LinkerD.