Configurer la fonctionnalité de filtrage FQDN pour la Sécurité du réseau de conteneurs dans les services avancés de mise en réseau de conteneurs
Cet article explique comment configurer les services avancés de mise en réseau de conteneurs avec la fonctionnalité de sécurité réseau de conteneurs dans les clusters AKS.
Prérequis
- Compte Azure avec un abonnement actif. Si vous n’en avez pas, créez un compte gratuit avant de commencer.
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
La version minimale d’Azure CLI requise pour les étapes de cet article est la version 2.56.0. Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Installer l’extension Azure CLI aks-preview
Installez ou mettez à jour l’extension Azure CLI en préversion à l’aide de la commande az extension add
ou az extension update
.
# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview
Activer les services avancés de mise en réseau de conteneurs
Pour continuer, vous devez disposer d’un cluster AKS avec Advanced Container Networking Services activé.
La commande az aks create
avec l'indicateur Advanced Container Azure Networking Services, --enable-acns
, crée un nouveau cluster AKS avec toutes les fonctionnalités Advanced Container Networking Services. Ces fonctionnalités comprennent :
Observabilité du réseau de conteneurs : fournit des informations sur votre trafic réseau. Pour en savoir plus, visitez Observabilité du réseau de conteneurs.
Sécurité du réseau de conteneurs : offre des fonctionnalités de sécurité telles que le filtrage FQDN. Pour en savoir plus, consultez Sécurité du réseau de conteneurs.
Remarque
Les clusters avec le plan de données Cilium prennent en charge l'observabilité du réseau de conteneurs et la sécurité du réseau de conteneurs à partir de la version 1.29 de Kubernetes.
# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"
# Create an AKS cluster
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--generate-ssh-keys \
--location eastus \
--max-pods 250 \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--node-count 2 \
--pod-cidr 192.168.0.0/16 \
--kubernetes-version 1.29 \
--enable-acns
Les services avancés de mise en réseau de conteneurs sur un cluster existant
La commande az aks update
avec l'indicateur Services avancés de mise en réseau de conteneurs, --enable-acns
, met à jour un cluster AKS existant avec toutes les fonctionnalités des services avancés de mise en réseau de conteneurs, qui incluent Observabilité du réseau de conteneurs et Sécurité du réseau de conteneurs.
Remarque
Seuls les clusters avec le plan de données Cilium prennent en charge les fonctionnalités Sécurité du réseau de conteneurs des services avancés de mise en réseau de conteneurs.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns
Obtenir les informations d’identification du cluster
Obtenez les informations d’identification du cluster à l’aide de la commande az aks get-credentials
.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Tester la connectivité avec une stratégie
Cette section montre comment observer une stratégie appliquée via l’agent Cilium. Une requête DNS est envoyée à un nom de domaine complet autorisé et à un autre cas où il est bloqué.
Créez un fichier nommé demo-policy.yaml
et collez le manifeste YAML suivant :
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "allow-bing-fqdn"
spec:
endpointSelector:
matchLabels:
app: demo-container
egress:
- toEndpoints:
- matchLabels:
"k8s:io.kubernetes.pod.namespace": kube-system
"k8s:k8s-app": kube-dns
toPorts:
- ports:
- port: "53"
protocol: ANY
rules:
dns:
- matchPattern: "*.bing.com"
- toFQDNs:
- matchPattern: "*.bing.com"
Spécifiez le nom de votre manifeste YAML et appliquez-le à l’aide de [kubectl apply][kubectl-apply] :
kubectl apply –f demo-policy.yaml -n demo
Créer un pod de démonstration
Créez un pod client
exécutant Bash :
kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.43 --labels="app=demo-container" --command -- bash
Un interpréteur de commandes avec utilitaires pour tester le nom de domaine complet doit s’ouvrir avec la sortie suivante :
If you don't see a command prompt, try pressing enter.
bash-5.0#
Dans une fenêtre distincte, exécutez la commande suivante pour obtenir le nœud du pod en cours d’exécution.
kubectl get po -n demo --sort-by="{spec.nodeName}" -o wide
La sortie doit être semblable à l’exemple suivant :
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
client 1/1 Running 0 5m50s 192.168.0.139 aks-nodepool1-22058664-vmss000001 <none> <none>
Le pod s’exécute sur un nœud nommé aks-nodepool1-22058664-vmss000001
. Obtenez l’instance de l’agent Cilium s’exécutant sur ce nœud :
k get po -n kube-system -o wide --field-selector spec.nodeName="aks-nodepool1-22058664-vmss000001" | grep "cilium"
Le cilium-s4x24
attendu doit se trouver dans la sortie.
cilium-s4x24 1/1 Running 0 47m 10.224.0.4 aks-nodepool1-22058664-vmss000001 <none> <none>
Inspecter un agent Cilium
Utilisez l’interface CLI cilium
pour surveiller le trafic bloqué.
kubectl exec -it -n kube-system cilium-s4x24 -- sh
Defaulted container "cilium-agent" out of: cilium-agent, install-cni-binaries (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), block-wireserver (init)
#
À l’intérieur de cet interpréteur de commandes, exécutez cilium monitor -t drop
:
Listening for events on 2 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit
time="2024-10-08T17:48:27Z" level=info msg="Initializing dissection cache..." subsys=monitor
Vérifier la stratégie
À partir du premier interpréteur de commandes, créez une requête au nom de domaine complet autorisé, *.bing.com
, comme spécifié par la stratégie. Cela doit réussir et être autorisé par l’agent.
bash-5.0# ./agnhost connect www.bing.com:80
Ensuite, créez une autre requête auprès d’un nom de domaine complet attendu pour être bloqué :
bash-5.0# ./agnhost connect www.example.com:80
Cilium Agent a bloqué la requête avec la sortie :
xx drop (Policy denied) flow 0xfddd76f6 to endpoint 0, ifindex 29, file bpf_lxc.c:1274, , identity 48447->world: 192.168.0.149:45830 -> 93.184.215.14:80 tcp SYN
Nettoyer les ressources
Si vous ne prévoyez pas d’utiliser cette application, supprimez les autres ressources que vous avez créées dans cet article à l’aide de la commande az group delete
.
az group delete --name $RESOURCE_GROUP
Étapes suivantes
Dans cet article pratique, vous avez appris à installer et à activer des fonctionnalités de sécurité avec les services avancés de mise en réseau de conteneurs pour votre cluster AKS.
- Pour plus d’informations sur les services avancés de mise en réseau de conteneurs pour Azure Kubernetes Service (AKS), consultez Que sont les services avancés de mise en réseau de conteneurs pour Azure Kubernetes Service (AKS) ?.
Azure Kubernetes Service