Contrôle du trafic à l'aide de règles de réseau
Grappes classiques
Ces informations de stratégie de réseau sont spécifiques aux clusters classiques. Pour les clusters VPC, voir Comprendre la mise en réseau Secure by Default des clusters VPC.
Chaque cluster IBM Cloud® Kubernetes Service est fourni avec le plug-in de réseau appelé Calico. Les règles réseau par défaut sécurise l'interface réseau public de chaque nœud worker du cluster.
Vous pouvez utiliser Calico et Kubernetes pour créer des règles réseau pour un cluster. Avec les règles réseau Kubernetes, vous pouvez spécifier le trafic réseau que vous désirez autoriser ou bloquer vers et depuis un pod au sein d'un cluster. Pour définir des règles réseau plus avancées, par exemple le blocage de trafic entrant (ingress) vers les services d'équilibreur de charge de réseau (NLB), utilisez des règles réseau Calico.
- Règles réseau Kubernetes
- Kubernetes Les politiques réseau définissent la manière dont les pods peuvent communiquer entre eux et avec des points de
terminaison externes. Le trafic réseau entrant et sortant est autorisé ou bloqué en fonction du protocole, du port et des adresses IP source ou cible. Le trafic peut également être filtré en fonction des libellés de pod et d'espace de noms.
Vous pouvez appliquer les politiques réseau d' Kubernetes à l'aide de commandes
kubectlou des API d' Kubernetes. - Règles réseau Calico
- Les règles réseauCalico sont un ensemble de règles réseau Kubernetes. Vous pouvez appliquer les politiques d' Calico à l'aide
de la ligne de commande
calicoctl. Les règles Calico ajoutent les fonctions suivantes :- Autorisation ou blocage du trafic réseau sur des interfaces réseau spécifiques, sans tenir compte de la source de pod Kubernetes, de l'adresse IP de destination ou du routage CIDR.
- Autorisation ou blocage du trafic réseau pour les pods entre les espaces de noms.
- Blocage de trafic entrant vers les services LoadBalancer ou NodePort de Kubernetes.
Calico applique ces règles, y compris les règles de réseau Kubernetes, en définissant les règles Iptables comme un pare-feu pour le noeud worker afin de définir les caractéristiques que le trafic réseau doit respecter pour être transmis à la ressource ciblée.
Règles réseau Calico et Kubernetes par défaut
Lorsqu'un cluster avec un réseau local virtuel (VLAN) public est créé, une ressource HostEndpoint avec le libellé ibm.role: worker_public est générée automatiquement pour chaque noeud worker et l'interface réseau publique
associée. CetteHostEndpoint entraîne la suppression de tout le trafic vers ou depuis l'interface de réseau public, sauf si elle est spécifiquement autorisée par une règle Calico qui sélectionne le labelibm.role: worker_public.
Une ressource HostEndpoint avec le libellé ibm.role: worker_private est également automatiquement créée pour chaque noeud worker et l'interface réseau privée associée. Une règle allow-all-private-defaultpar
défaut est créée de sorte que tout le trafic soit autorisé à partir de l'interface de réseau privé. Cette HostEndpointpermet aux utilisateurs de cluster de restreindre davantage le trafic réseau privé en créant des règles Calico
qui sélectionnentibm.role: worker_private et dont le numéro de commande est inférieur àallow-all-private-default. "
Ces règles d'hôte Calico par défaut permettent à l'ensemble du trafic réseau public sortant et autorisent le trafic entrant public à des composants de cluster spécifiques, tels que les services Kubernetes NodePort, LoadBalancer et Ingress. Tout
le trafic privé est autorisé par défaut par la règle allow-all-private-default. Tout autre trafic de réseau entrant à partir d'Internet vers vos nœuds worker qui n'est pas spécifié dans les règles par défaut est bloqué. Les règles
par défaut n'affectent pas le trafic entre les pods.
Ne supprimez pas les politiques par défaut de votre cluster, car elles seront recréées lors de la prochaine actualisation ou mise à jour du maître du cluster. Si vous souhaitez restreindre davantage le trafic, appliquez des règles Calico d'ordre inférieur pour bloquer le trafic. Assurez-vous de bien comprendre ce que vous bloquez et que les composants du cluster n'ont pas besoin du trafic que vous souhaitez bloquer.
Consultez les règles d'hôte Calico par défaut suivantes qui sont automatiquement appliquées à votre cluster.
| Règle Calico | Description |
|---|---|
allow-all-outbound |
Autorise tout le trafic sortant sur le réseau public. |
allow-all-private-default |
Autorise l'ensemble du trafic entrant et sortant sur le réseau privé. |
allow-bigfix-port |
Autorise le trafic entrant sur le port 52311 vers l'application BigFix à accepter les mises à jour de noeud worker nécessaires. |
allow-icmp |
Autorise tous les paquets ICMP entrants (pings). |
allow-node-port-dnat |
Autorise le trafic entrant des services NLB (équilibreur de charge de réseau), ALB (équilibreur de charge d'application) Ingress et NodePort sur les pods exposés par ces services. Remarque : vous n'avez pas besoin d'indiquer les ports exposés car Kubernetes utilise la conversion d'adresse réseau de destination (DNAT) pour transférer les demandes de service aux pods appropriés. Ce réacheminement intervient avant l'application des règles de noeud final d'hôte dans des Iptables. |
allow-sys-mgmt |
Autorise les connexions entrantes pour des systèmes d'infrastructure IBM Cloud spécifiques utilisés pour gérer les noeuds worker. |
allow-vrrp |
Autorise les paquets VRRP, qui surveillent et déplacent les adresses IP virtuelles entre les nœuds worker. |
Des règles Kubernetes par défaut limitant l'accès au tableau de bord Kubernetes sont également créées. Les règles Kubernetes ne s'appliquent pas au noeud final d'hôte, mais au niveau du pod et à tous les clusters classiques et VPC.
| Règle Kubernetes | Description |
|---|---|
dashboard-metrics-scraper |
Kubernetes version 1.20 ou ultérieure : fourni dans l'espace de noms kube-system : bloque l'accès de tous les pods au tableau de bord Kubernetes pour metrics-scraper. Cette règle n'empêche pas le tableau de
bord Kubernetes d'accéder aux mesures qu'il contient. En outre, cette politique n'a aucune incidence sur l'accès aux mesures de tableau de bord à partir de la console IBM Cloud ou à l'aide de kubectl proxy. Si un pod requiert
l'accès au tableau de bord pour metrics-scraper, déployez-le dans un espace de noms possédant le libellé dashboard-metrics-scraper-policy: allow. |
kubernetes-dashboard |
Fournie dans l'espace de noms kube-system : bloque l'accès de tous les pods au tableau de bord Kubernetes. Cette politique n'a aucune incidence sur l'accès au tableau de bord à partir de la console IBM Cloud ou à l'aide de
kubectl proxy. Si un pod nécessite l'accès au tableau de bord, déployez-le dans un espace de noms ayant le libellé kubernetes-dashboard-policy: allow. |
Installation et configuration de l'Interface de ligne de commande Calico
Pour afficher, gérer et ajouter des règles Calico, installez et configurez l'interface de ligne de commande de Calico.
-
Définissez le contexte de votre cluster pour exécuter des commandes Calico.
-
Kubernetes version 1.19 ou ultérieure :
- Téléchargez le fichier de configuration
kubeconfigde votre cluster.ibmcloud ks cluster config --cluster CLUSTER_NAME_OR_ID - Définissez la variable d'environnement
DATASTORE_TYPEsurkubernetes.export DATASTORE_TYPE=kubernetes
- Téléchargez le fichier de configuration
-
-
Si les règles réseau d'entreprise utilisent des proxys ou des pare-feux pour empêcher l'accès depuis votre système local à des noeuds finaux publics, autorisez l'accès TCP pour les commandes Calico.
-
Suivez la procédure d'installation de l'outil de ligne de commande
calicoctl.-
Linux et OS X
-
Téléchargez la version de l'interface CLI d' Calico adaptée à votre système d'exploitation. Sous OS X, vous devrez peut-être autoriser manuellement l'ouverture et l'exécution du fichier téléchargé en accédant à Préférences Système > Sécurité et confidentialité > Général.
-
Déplacez le fichier vers le répertoire
/usr/local/bin.mv <filepath>/<filename> /usr/local/bin/calicoctl -
Rendez le fichier exécutable.
chmod +x /usr/local/bin/calicoctl -
Vérifiez qu'il n'existe pas d'ancien fichier de configuration Calico
calicoctl.cfgdans le répertoire/etc/calico. Si le fichier/etc/calico/calicoctl.cfgexiste, supprimez-le.
-
-
Windows
-
Téléchargez l'interface de ligne de commande Calico. Lorsque vous sauvegardez le fichier, renommez-le
calicoctl.exeet placez-le dans le même répertoire que l'interface de ligne de commande d'IBM Cloud. Cette configuration vous évite diverses modifications de chemin de fichier lorsque vous exécutez des commandes par la suite. -
Définissez la variable d'environnement sur le fichier de configuration de votre cluster.
export KUBECONFIG=./.bluemix/plugins/container-service/clusters/<cluster_name>-<hash>/kube-config.yaml
-
-
-
Vérifiez que la configuration Calico fonctionne correctement.
calicoctl get nodesExemple de sortie
NAME 10.176.48.106 10.176.48.107 10.184.58.23 10.184.58.42 ...
La modification du plug-in, des composants ou des paramètres Calico par défaut n'est pas prise en charge. Par exemple, ne déployez pas de nouvelle version de plug-in Calico ou modifiez les ensembles de démons ou les déploiements pour les composants
Calico, les ressources IPPool par défaut ou les nœuds Calico. A la place, vous pouvez suivre la documentation pour modifier la MTU Calico ou pour désactiver le plug-in de mappage de port pour l'interface CNI Calico si nécessaire.
Affichage des règles réseau
Affichez les détails des règles réseau par défaut ou ayant été ajoutées qui sont appliquées à votre cluster.
Avant de commencer, installez et configurez l'interface de ligne de commande Calico et définissez le contexte de votre cluster pour exécuter des commandes Calico.
-
Examinez le noeud final d'hôte Calico.
calicoctl get hostendpoint -o yaml -
Affichez toutes les règles de réseau Calico qui ont été créées pour le cluster. Cette liste inclut des règles qui ne s'appliquent pas encore aux pods ou aux hôtes. Pour qu'une règle Calico soit appliquée, un pod Kubernetes ou Calico
HostEndpointdoit exister et correspondre au sélecteur qui se trouve dans la stratégie de réseau Calico.Les politiques réseau s'appliquent à des espaces de noms spécifiques :
calicoctl get NetworkPolicy --all-namespaces -o wideLes politiques de réseau globales ne s'appliquent pas à des espaces de noms spécifiques :
calicoctl get GlobalNetworkPolicy -o wide -
Affichez les informations détaillées d'une règle réseau.
calicoctl get NetworkPolicy -o yaml <policy_name> --namespace <policy_namespace> -
Affichez les informations détaillées de toutes les règles réseau globales pour le cluster.
calicoctl get GlobalNetworkPolicy -o yaml
Ajout de règles réseau
Généralement, les règles par défaut ne nécessitent pas de modifications. Seuls les scénarios avancés peuvent nécessiter des modifications. Si vous constatez que vous devez apporter des modifications, vous pouvez créer vos propres règles réseau.
Pour créer des politiques réseau d Kubernetes, consultez la documentation relative aux politiques réseau d' Kubernetes.
Pour créer des règles Calico, procédez comme indiqué ci-après. Avant de commencer, installez et configurez l'interface de ligne de commande Calico et définissez le contexte de votre cluster pour exécuter des commandes Calico.
-
Définissez votre politique de réseauCalico ou votre politique de réseau globale en créant un script de configuration (
.yaml) utilisant la syntaxe de la politique Calico v3. Ces fichiers de configuration incluent les sélecteurs qui décrivent les pods, les espaces de noms ou les hôtes, auxquels s'appliquent ces règles.Pour les nouveaux clusters créés à partir de la version 1.29 ou ultérieure, les noms abrégés «
globalnetworkpolicies.crd.projectcalico.org» (gnp) et «hostendpoints.crd.projectcalico.org» (hep) ne sont pas pris en charge. Toutefois, si vous mettez à niveau un cluster vers la version 1.29 ou une version ultérieure, les noms abrégés restent pris en charge. -
Appliquez les règles au cluster. Si vous disposez d'un système Windows, incluez l'option
--config=<filepath>/calicoctl.cfg.calicoctl apply -f policy.yaml [--config=<filepath>/calicoctl.cfg]
Notez que les règles de réseau Calico et Kubernetes bloquent uniquement les nouvelles connexions, mais qu'elles n'interrompent pas les connexions qui existaient avant l'application de la règle. Ainsi, après avoir appliqué une politique nouvelle ou modifiée, pour vérifier qu'elle fonctionne et ne bloque pas qu'elle ne le devrait, procédez comme suit :
-
Redémarrez les pods susceptibles d'être affectées par la règle. Mieux encore, redémarrez tous les pods, au cas où votre sélecteur ne serait pas correct et que cela ait plus d'impact que vous ne le pensez.
-
Exécutez
ibmcloud ks cluster master refresh -c CLUSTER-IDpour redémarrer vos pods maître de cluster. Cela va interrompre les connexions existantes du kubelet et d'autres composants vers le maître et les forcer à se reconnecter. Cela vous montrera si les nouvelles règles et les règles modifiées bloquent toutes les connexions nécessaires à vos composants maîtres. -
Essayez de vous connecter au tableau de bord d' Kubernetes s pour vous assurer que les modifications apportées aux règles ne bloquent pas les connexions requises par ces composants.
Contrôle du trafic entrant vers les services d'équilibreur de charge de réseau ou NodePort
Les services par défaut, Kubernetes NodePort et l'équilibreur de charge rendent votre application disponible sur toutes les interfaces de cluster publiques et privées. Vous pouvez toutefois utiliser des règles Calico pour bloquer le trafic entrant vers vos services en fonction de l'origine ou de la destination du trafic.
Les règles Kubernetes et Calico par défaut sont difficiles à appliquer pour protéger les services de Kubernetes NodePort et LoadBalancer en raison des règles DNAT Iptables générées pour ces services. Cependant, les règles pré-DNAT empêchent le trafic spécifié d'atteindre vos applications car elles génèrent et appliquent des règles Iptables avant que Kubernetes utilise la fonction DNAT standard pour transférer le trafic vers les pods.
Quelques utilisations classiques des règles réseau pré-DNAT Calico :
- Blocage du trafic vers les ports de noeud publics d'un service d'équilibreur de charge de réseau privé (NLB) : un service d'équilibreur de charge de réseau rend votre application accessible via l'adresse IP et le port de l'équilibreur de charge de réseau et la rend également accessible via les ports de noeud du service. Les ports de noeud sont accessibles sur toutes les adresses IP (publiques et privées) pour tous les noeuds figurant dans le cluster.
- Blocage du trafic vers les ports de noeud publics sur les clusters qui exécutent des noeuds worker de périphérie : le blocage des ports de noeud garantit que les noeuds worker de périphérie sont les seuls noeuds worker qui traitent le trafic entrant.
- Blocage du trafic en provenance de certaines adresses IP source ou routages CIDR
- Autorisation du trafic provenant uniquement de certaines adresses IP source ou de certains routages CIDR et blocage de tout autre trafic
Pour voir comment autoriser ou bloquer des adresses IP source, essayez le tutoriel sur l'utilisation des règles réseau Calico pour bloquer le trafic.
Exemple de règles Calico pour restreindre le trafic réseau public ou privé
Nous fournissons un ensemble d'exemples de règles de réseau public Calico qui restreignent davantage le trafic réseau public / privé sur les noeuds worker de cluster. Ces politiques autorisent le trafic nécessaire au déploiement du cluster et bloquent certains autres types de trafic.
Ces politiques ne sont pas destinées à tout bloquer, et ne satisfassent pas nécessairement les exigences de conformité. Elles sont conçues comme un point de départ et doivent être modifiées pour répondre à vos cas d'utilisation particulières. Pour plus d'informations, voir le fichier README.
A chaque fois que de nouveaux emplacements pour IBM Cloud Kubernetes Service et d'autres IBM Cloud sont activés, les sous-réseaux pour ces emplacements sont ajoutés aux stratégies Calico. N'oubliez pas de consulter le dépôt « GitHub » pour prendre connaissance des éventuelles mises à jour de ces politiques.
Veuillez noter que nous ne recommandons plus d'utiliser les exemples de politiques allow-egress-pods-public, allow-public-services-pods, allow-egress-pods-private ou allow-private-services-pods figurant dans les sections Application des politiques de réseau public et Application des politiques de réseau privé. Ces politiques contrôlent les sorties de tous les pods du cluster. Si vous souhaitez contrôler le trafic vers/depuis les pods, vous devez utiliser Kubernetes NetworkPolicy et cibler des espaces de noms et des pods spécifiques, plutôt que d’utiliser ces politiques générales qui traitent chaque pod de la même manière.
Application des règles de réseau public
Avant de commencer, installez et configurez l'interface de ligne de commande Calico et définissez le contexte de votre cluster pour exécuter des commandes Calico.
-
Clonez le référentiel
IBM-Cloud/kube-samples.git clone https://github.com/IBM-Cloud/kube-samples.git -
Accédez au répertoire de règles publiques de la région dans laquelle se trouve votre cluster. Exemple de commande pour un cluster dans la région du sud des Etats-Unis :
cd <filepath>/IBM-Cloud/kube-samples/calico-policies/public-network-isolation/us-south -
Passez en revue chaque règle afin de rechercher les modifications éventuellement nécessaires. Par exemple, la stratégie
allow-ibm-ports-public.yamlpeut devoir être modifiée pour spécifier le sous-réseau du pod du cluster, en remplacement du sous-réseau par défaut172.30.0.0/16. Vérifiez également ces règles pour toutes les connexions que vous ne souhaitez pas autoriser. -
Appliquez les règles publiques ou privées que vous souhaitez utiliser.
calicoctl apply -f allow-ibm-ports-public.yaml calicoctl apply -f allow-public-service-endpoint.yaml calicoctl apply -f deny-all-outbound-public.yaml calicoctl apply -f allow-konnectivity.yaml calicoctl apply -f allow-k8s-master-to-dashboard.yaml -
Facultatif : pour permettre à vos nœuds de travail d'accéder à d'autres services d' IBM Cloud s via le réseau public, appliquez la politique
allow-public-services.yaml. Cette politique autorise l'accès aux adresses IP suivantes : IBM Cloud Container Registry, ainsi que, si les services sont disponibles dans la région, IBM Cloud Logs et IBM Cloud Monitoring. Pour accéder à d'autres services IBM Cloud, vous devez ajouter manuellement à cette règle les sous-réseaux pour ces services.calicoctl apply -f allow-public-services.yaml -
Vérifiez que les politiques réseau sont bien appliquées.
calicoctl get NetworkPolicies -o yaml -A -
Vérifiez que les politiques réseau globales sont appliquées.
calicoctl get GlobalNetworkPolicies -o yaml -
Facultatif : Si vous utilisez des politiques qui s'appliquent aux pods dans le cluster, testez-les bien pour vous assurer que toutes les fonctionnalités de votre cluster continuent à fonctionner. Par exemple, si vous utilisez des webhooks en cluster, assurez-vous que vos politiques permettent à ces webhooks d'établir les connexions nécessaires avec les pods qui implémentent les webhooks. Vous devez également autoriser le trafic vers tous les services non locaux qui étendent l'API Kubernetes. Pour rechercher ces services, exécutez la commande
kubectl get apiservices.
Application de stratégies de réseau privé
Nous fournissons un ensemble d'exemples de règles de réseau privé Calico qui restreignent davantage le trafic réseau public / privé sur les noeuds worker du cluster. Ces politiques autorisent le trafic nécessaire au déploiement du cluster et bloquent certains autres types de trafic.
Ces politiques ne sont pas destinées à tout bloquer, et ne satisfassent pas nécessairement les exigences de conformité. Elles sont conçues comme un point de départ et doivent être modifiées pour répondre à vos cas d'utilisation particulières. Pour plus d'informations, voir le fichier README.
A chaque fois que de nouveaux emplacements pour IBM Cloud Kubernetes Service et d'autres IBM Cloud sont activés, les sous-réseaux pour ces emplacements sont ajoutés aux stratégies Calico. N'oubliez pas de consulter le dépôt « GitHub » pour prendre connaissance des éventuelles mises à jour de ces politiques.
Avant de commencer, installez et configurez l'interface de ligne de commande Calico et définissez le contexte de votre cluster pour exécuter des commandes Calico.
-
Clonez le référentiel
IBM-Cloud/kube-samples.git clone https://github.com/IBM-Cloud/kube-samples.git -
Accédez au répertoire de règles privées de la région dans laquelle se trouve votre cluster. Exemple de commande pour un cluster dans la région du sud des Etats-Unis :
cd <filepath>/IBM-Cloud/kube-samples/calico-policies/private-network-isolation/us-south -
Passez en revue chaque règle afin de rechercher les modifications éventuellement nécessaires. Par exemple, si vous avez spécifié un sous-réseau personnalisé lors de la création de votre cluster pour fournir les adresses IP privées pour vos pods, vous devez spécifier ce routage CIDR à la place du routage CIDR
172.30.0.0/16dans la règleallow-all-workers-private.yaml. -
Appliquez les règles.
calicoctl apply -f allow-all-workers-private.yaml calicoctl apply -f allow-ibm-ports-private.yaml calicoctl apply -f allow-icmp-private.yaml calicoctl apply -f allow-private-service-endpoint.yaml calicoctl apply -f allow-sys-mgmt-private.yaml calicoctl apply -f deny-all-private-default.yaml -
Facultatif : Pour permettre à vos employés d'accéder à IBM Cloud Container Registry sur le réseau privé, appliquez la politique
allow-private-services.yaml. Pour accéder à d'autres services IBM Cloud qui prennent en charge les noeuds finaux de service de cloud privé, vous devez ajouter manuellement à cette règle les sous-réseaux pour ces services.calicoctl apply -f allow-private-services.yaml -
Facultatif : pour exposer vos applications avec des équilibreurs de charge de réseau (NLB) privé ou des équilibreurs de charge d'application (ALB) Ingress, vous devez ouvrir le protocole VRRP en appliquant la règle
allow-vrrp-private.calicoctl apply -f allow-vrrp-private.yamlVous pouvez renforcer le contrôle de l'accès aux services de réseau en créant des règles Pre-DNAT Calico. Dans la règle Pre-DNAT, prenez soin d'utiliser
selector: ibm.role=='worker_private'pour appliquer la règle aux noeuds finaux d'hôte privé des noeuds worker. -
Vérifiez que les règles sont appliquées.
calicoctl get GlobalNetworkPolicies -o yaml -
Facultatif : Si vous utilisez des politiques qui s'appliquent aux pods dans le cluster, testez-les bien pour vous assurer que toutes les fonctionnalités de votre cluster continuent à fonctionner. Par exemple, si vous utilisez des webhooks en cluster, assurez-vous que vos politiques permettent à ces webhooks d'établir les connexions nécessaires avec les pods qui implémentent les webhooks. Vous devez également autoriser le trafic vers tous les services non locaux qui étendent l'API Kubernetes. Pour rechercher ces services, exécutez la commande
kubectl get apiservices.
Contrôle du trafic entre les pods
Les règles Kubernetes protègent les pods du trafic réseau interne. Vous pouvez créer des règles de réseau de Kubernetes simple pour isoler les micro-services d'application l'un de l'autre dans un espace de nom ou dans des espaces de nom.
Par défaut, un pod, quel qu'il soit, a accès à n'importe quel autre pod présent dans le cluster. En outre, un pod, quel qu'il soit, a accès à n'importe quel service qui est exposé par le réseau de pods, par exemple, un service de métriques, le DNS de cluster, le serveur d'API ou les services que vous créez manuellement dans votre cluster.
Journalisation du trafic refusé
Pour consigner les demandes de trafic refusé sur certains pods de votre cluster, vous pouvez créer une règle réseau de journalisation Calico.
Lorsque vous configurez des règles réseau pour limiter le trafic sur les pods d'application, les demandes de trafic qui ne sont pas autorisées par ces règles sont refusées et supprimées. Dans certains cas, vous souhaiterez obtenir plus d'informations sur les demandes de trafic refusé. Par exemple, vous pouvez éventuellement détecter un trafic inhabituel qui est systématiquement refusé par l'une de vos règles réseau. Pour surveiller cette menace de sécurité potentielle, vous pouvez configurer la journalisation de sorte à enregistrer toutes les fois qu'une règle refuse une action intentée sur les pods d'application indiqués.
Cette section vous montre comment consigner du trafic qui est rejeté par une règle de réseau Kubernetes. Pour consigner du trafic rejeté par une règle réseau Calico, voir la leçon 5 du tutoriel sur les règles réseau Calico.
Avant de commencer, installez et configurez l'interface de ligne de commande Calico et définissez le contexte de votre cluster pour exécuter des commandes Calico.
-
Créez ou utilisez une règle de réseau Kubernetes existante pour bloquer ou limiter le trafic entrant.
- Créez une règle de réseau Kubernetes. Par exemple, pour contrôler le trafic entre les pods, vous pouvez utiliser l'exemple de règle Kubernetes nommée
access-nginxqui limite l'accès à une application NGINX. Le trafic entrant dans les pods avec le libellé "run=nginx" est autorisé uniquement en provenance des pods avec le libellé "run=access". Tout autre trafic entrant vers les pods d'application "run=nginx" est bloqué.
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: run: access ``` 2. Appliquez la politique. ```sh {: pre} kubectl apply -f <policy_name>.yaml ``` - Créez une règle de réseau Kubernetes. Par exemple, pour contrôler le trafic entre les pods, vous pouvez utiliser l'exemple de règle Kubernetes nommée
-
Pour consigner tout le trafic refusé par la règle que vous avez créée précédemment, créez une règle réseau Calico nommée
log-denied-packets. La politique suivante Calico utilise le même sélecteur de pod que la politique d'exemple Kubernetesaccess-nginxdécrite à l'étape 1, mais la syntaxe est légèrement différente puisqu'il s'agit d'un Calico NetworkPolicy au lieu d'un Kubernetes NetworkPolicy. De plus, comme toutes les NetworkPolicy Kubernetes sont évaluées par Calico en tant que commande1000, le numéro de commande3000est ajouté pour s'assurer qu'il est évalué après la NetworkPolicy Kubernetes. Avec ces deux politiques en place, voici le résultat :- Les nouvelles connexions entrant dans le pod nginx sont d'abord évaluées par rapport à la stratégie NetworkPolicy de Kubernetes (ordre
1000). Les connexions provenant d'un pod avec la baliserun=accessseront immédiatement acceptées, ce qui signifie qu'aucune autre politique n'est évaluée. - Si la connexion provient d’un pod ne portant pas le label
run=access(ou de tout autre élément qui n’est pas un pod), la commande Kubernetes NetworkPolicy n’aura aucun effet et la commande Calico évaluera ensuite la politiquelog-denied-packets. Cette règle consigne le paquet dans syslog sur le noeud worker sur le pod nginx. - Calico vérifie ensuite que d'autres règles s'appliquent à la connexion et, comme il n'en trouve aucune, le paquet est alors supprimé. En effet, tout trafic vers une pod avec une règle qui n'est pas explicitement autorisée est supprimé.
apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata: name: log-denied-packets spec: types: - Ingress ingress: - action: Log destination: {} source: {} selector: projectcalico.org/orchestrator == 'k8s' && run == 'nginx' order: 3000 ``` - Les nouvelles connexions entrant dans le pod nginx sont d'abord évaluées par rapport à la stratégie NetworkPolicy de Kubernetes (ordre
types- Cette règle
Ingresss'applique à toute les demandes de trafic entrant. La valeurIngressest un terme général pour tout trafic entrant, et ne fait pas référence au trafic uniquement à partir de l'ALB entrant IBM. |ingress:action: L'actionLogécrit une entrée de journal pour toutes les demandes qui correspondent à cette règle sur le chemin/var/log/syslogsur le nœud wrker :destination: Aucune destination n'est spécifiée carselectorapplique cette règle à tous les pods avec un certain libellé. :source: Cette règle s'applique aux demandes provenant de n'importe quelle source. selector- Le sélecteur doit cibler le même trafic que l'accès original-nginx Kubernetes NetworkPolicy. Comme il s'agit d'une politique de type Calico, vous devez inclure
projectcalico.org/orchestrator == 'k8s'pour indiquer qu'elle s'applique à tous les pods de l'espace de noms de la politique, en plus de l'originalrun == 'nginx'. order- Les règles Calico ont un ordre qui détermine à quel moment elles sont appliquées aux paquets de demandes entrantes. Les règles avec les ordres les moins élevés, par exemple
1000, sont appliquées en premier. Les règles avec les ordres les plus élevés sont appliquées après les règles dont les ordres sont plus faibles. Par exemple, une politique de très haut niveau, telle que3000, est effectivement appliquée en dernier, une fois que toutes les politiques de niveau inférieur ont été appliquées. Les paquets de demandes entrantes passent par la chaîne de règles Iptables et tentent d'abord de correspondre aux règles d'ordre moins élevé. Si un paquet correspond à une règle, le paquet est accepté. Toutefois, si un paquet ne correspond à aucune règle, il arrive à la dernière règle de la chaîne de règles Iptables avec l'ordre le plus élevé. Pour garantir qu'il s'agit de la dernière règle dans la chaîne, utilisez un ordre beaucoup plus élevé, par exemple3000, par rapport à celui de la règle que vous avez créée à l'étape 1. Notez que les Kubernetes NetworkPolicy sont appliquées dans l'ordre indiqué1000.
-
Appliquez la politique. Si vous utilisez un ordinateur sous Windows, incluez l'option
--config=<filepath>/calicoctl.cfg.calicoctl apply -f log-denied-packets.yaml [--config=<filepath>/calicoctl.cfg] -
Générez des entrées de journal en envoyant des demandes qui ne sont pas autorisées par la règle que vous avez créée à l'étape 1. Par exemple, essayez d'exécuter une commande PING sur le pod protégé par la stratégie de réseau à partir d'une adresse IP ou d'une adresse IP non autorisée.
-
Recherchez les entrées de journal qui sont écrites dans le chemin
/var/log/syslog. Les adresses IP DST (destination) ou SRC (source) dans l'entrée de journal peuvent être différentes de celles prévues en raison des proxy, de la conversion d'adresses réseau et d'autres processus réseau. L'entrée de journal se présente comme suit :Sep 5 14:34:40 <worker_hostname> kernel: [158271.044316] calico-packet: IN=eth1 OUT= MAC=08:00:27:d5:4e:57:0a:00:27:00:00:00:08:00 SRC=192.XXX.XX.X DST=192.XXX.XX.XX LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=52866 DF PROTO=TCP SPT=42962 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0 -
Facultatif : acheminez les journaux depuis
/var/log/syslogvers IBM Cloud Logs ou vers un serveur syslog externe.