Restreignez le trafic des pods à l'aide de politiques réseau et chiffrez les données en transit pour sécuriser les clusters ACK.
Politiques réseau et groupes de sécurité
Les politiques réseau et les groupes de sécurité opèrent à différents niveaux. Combinez-les pour mettre en place une défense en profondeur.
| Mécanisme | Portée | Cas d'utilisation idéal |
|---|---|---|
| Politiques réseau | Trafic inter-pods (trafic est-ouest) et trafic entre les pods et les services externes | Restreindre la communication entre les microservices, les namespaces ou des pods spécifiques |
| Groupes de sécurité | Trafic au niveau des nœuds et du VPC entre les nœuds, les autres ressources VPC et les adresses IP externes | Contrôler l'accès au cluster et depuis le cluster au niveau de l'infrastructure |
Utilisez les groupes de sécurité pour restreindre l'accès au niveau de l'infrastructure et les politiques réseau pour appliquer une isolation fine au niveau des pods au sein du cluster.
Restreindre le trafic inter-pods avec des politiques réseau
Par défaut, tous les pods d'un cluster Kubernetes peuvent communiquer librement, ce qui présente des risques de sécurité. Les politiques réseau restreignent le trafic entre les pods (trafic est-ouest) ainsi que le trafic entre les pods et les services externes.
Les politiques réseau utilisent des sélecteurs de pods et des libellés pour identifier les pods sources et destinations. Chaque politique peut filtrer par adresse IP, port, protocole ou toute combinaison de ces éléments.
Avec le plug-in réseau Terway, utilisez des politiques réseau pour contrôler le trafic au niveau de l'adresse IP ou du port. Consultez également les recettes de politiques réseau Kubernetes.
Seuls les clusters Terway prennent en charge les politiques réseau Kubernetes. Pour les clusters comptant plus de 100 nœuds, le proxy de politique peut augmenter la charge sur le plan de contrôle. Consultez la rubrique Améliorer les performances de la fonctionnalité NetworkPolicy pour un grand cluster ACK en mode Terway.
Approche recommandée : refus par défaut, puis autorisation
Appliquez le principe du moindre privilège : refusez tout le trafic par défaut, puis ajoutez des règles pour n'autoriser que le trafic nécessaire à chaque charge de travail.
Créez une politique de refus par défaut -- Bloquez tout le trafic entrant et sortant dans le namespace.
Autorisez les requêtes DNS -- Les pods ont besoin de la résolution DNS pour fonctionner.
Autorisez le trafic spécifique -- N'ouvrez que les chemins requis par chaque charge de travail.
Étape 1 : Créer une politique de refus par défaut
Créez une politique réseau pour refuser tout le trafic entrant et sortant dans un namespace, ou utilisez Calico pour une politique globale.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
Étape 2 : Autoriser les requêtes DNS
Avec une politique de refus par défaut, les pods ne peuvent pas résoudre les noms DNS. Créez une politique pour autoriser les requêtes DNS vers CoreDNS.
-
Ajoutez un libellé au namespace
kube-system:kubectl label namespace kube-system name=kube-system -
Créez une politique réseau pour autoriser le trafic sortant vers CoreDNS sur le port UDP 53 :
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53
Consultez la documentation sur les politiques réseau.
Étape 3 : Autoriser le trafic provenant de pods spécifiques
Une fois les politiques de refus et DNS en place, n'autorisez le trafic qu'en provenance des pods autorisés. Cas d'utilisation courants :
Autoriser uniquement certains microservices à accéder à une application.
Autoriser uniquement certaines applications à accéder à une base de données.
Cet exemple crée un pod et restreint le trafic entrant aux pods portant le libellé app: bookstore.
-
Créez un pod avec les libellés
app=bookstoreetrole=api:kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80 -
Appliquez une politique réseau qui n'autorise le trafic entrant qu'en provenance des pods portant le libellé
app: bookstore:kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: api-allow spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstore -
Vérifiez que les pods ne portant pas le libellé
app=bookstorese voient refuser l'accès :kubectl run test-$RANDOM --rm -i -t --image=alpine -- sh/ # wget -qO- --timeout=2 http://apiserver wget: download timed out -
Vérifiez que les pods portant le libellé
app=bookstorepeuvent accéder au serveur :kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- sh/ # wget -qO- --timeout=2 http://apiserver <!DOCTYPE html> <html><head>
Ajouter des règles personnalisées entre les pods d'un namespace
Après avoir autorisé la communication entre les pods au sein d'un namespace, utilisez les recettes de politiques réseau Kubernetes pour ajouter des règles personnalisées offrant un contrôle plus granulaire.
Contrôler le trafic au niveau des nœuds avec des groupes de sécurité
ACK utilise des groupes de sécurité pour gérer le trafic entre les nœuds maîtres et les nœuds de travail, ainsi qu'entre les nœuds de travail, les autres ressources VPC et les adresses IP externes.
ACK crée automatiquement un groupe de sécurité pour la communication entre les nœuds lors de la création d'un cluster. Pour appliquer le principe du moindre privilège, ajoutez les règles entrantes et sortantes recommandées.
Consultez les rubriques Configurer des groupes de sécurité dans différents scénarios et Configurer un groupe de sécurité.
Surveiller et analyser le trafic avec les journaux de flux
Les journaux de flux VPC enregistrent le trafic entrant et sortant des interfaces réseau élastiques (ENI). Utilisez les journaux de flux pour :
Vérifier les règles de liste de contrôle d'accès (ACL)
Surveiller le trafic réseau
Dépanner les problèmes réseau
Identifier le trafic anormal entre les ressources (y compris les pods) dans un VPC
Consultez la rubrique Présentation des journaux de flux.
Chiffrer les données en transit
-
Service Mesh (ASM)
Service Mesh (ASM) chiffre les données entre les services. ASM prend en charge :
L'authentification Mutual Transport Layer Security (mTLS) entre les services
Le service Envoy Secret Discovery Service (SDS) pour HTTPS et le chargement dynamique des certificats sur les passerelles de service
La gestion du trafic pour les applications dans les instances ASM, intégrée au Application High Availability Service (AHAS)
Le suivi distribué intégré à Tracing Analysis pour le mappage des traces, le comptage des appels, la topologie et l'analyse des dépendances
-
TLS for Ingress
Activez HTTPS pour les services exposés via Ingress. Utilisez un Secret pour configurer TLS.