1. Introduction
GCP est compatible depuis longtemps avec plusieurs interfaces au niveau d'une instance de VM. Avec plusieurs interfaces, une VM peut connecter jusqu'à sept nouvelles interfaces (par défaut + sept interfaces) à différents VPC. La mise en réseau GKE étend désormais ce comportement aux pods qui s'exécutent sur les nœuds. Avant cette fonctionnalité, les clusters GKE autorisaient tous les NodePools à n'avoir qu'une seule interface et donc à être mappés sur un seul VPC. Grâce à la fonctionnalité multiréseau sur les pods, un utilisateur peut désormais activer plusieurs interfaces sur les nœuds et les pods d'un cluster GKE.
Objectifs de l'atelier
Dans ce tutoriel, vous allez créer un environnement multinic GKE complet qui illustre les cas d'utilisation présentés dans la figure 1.
- Créez netdevice-l3-pod en utilisant busybox pour :
- Effectuer un PING et un wget -S sur l'instance netdevice-apache dans le réseau netdevice-vpc sur eth2
- Effectuez un PING et un wget -S vers l'instance l3-apache dans le l3-vpc sur eth1.
- Créez un pod L3 utilisant busybox pour effectuer un PING et wget -S vers l'instance l3-apache sur eth1.
Dans les deux cas d'utilisation, l'interface eth0 du pod est connectée au réseau par défaut.
Figure 1

Points abordés
- Créer un sous-réseau de type L3
- Créer un sous-réseau de type netdevice
- Établir un pool de nœuds GKE à plusieurs cartes d'interface réseau
- Créer un pod avec des fonctionnalités netdevice et L3
- Créer un pod avec des fonctionnalités de couche 3
- Créer et valider le réseau d'objets GKE
- Valider la connectivité aux serveurs Apache distants à l'aide de PING, wget et des journaux de pare-feu
Prérequis
- Projet Google Cloud
2. Terminologie et concepts
VPC principal : le VPC principal est un VPC préconfiguré fourni avec un ensemble de paramètres et de ressources par défaut. Le cluster GKE est créé dans ce VPC.
Sous-réseau : dans Google Cloud, un sous-réseau permet de créer un bloc CIDR (Classless Inter-Domain Routing) avec des masques de réseau dans un VPC. Un sous-réseau possède une seule plage d'adresses IP principale attribuée aux nœuds. Il peut disposer de plusieurs plages secondaires pouvant appartenir à des pods et à des services.
Réseau de nœuds : le réseau de nœuds fait référence à une combinaison dédiée d'une paire VPC/sous-réseau. Dans ce réseau de nœuds, les nœuds appartenant au pool de nœuds se voient attribuer des adresses IP de la plage principale.
Plage secondaire : une plage secondaire Google Cloud est un bloc CIDR et un masque de réseau appartenant à une région dans un VPC. GKE l'utilise comme réseau de pods de couche 3. Un VPC peut comporter plusieurs plages secondaires, et un pod peut se connecter à plusieurs réseaux de pods.
Réseau (L3 ou appareil) : objet réseau qui sert de point de connexion pour les pods. Dans le tutoriel, les réseaux sont l3-network et netdevice-network, où l'appareil peut être netdevice ou dpdk. Le réseau par défaut est obligatoire et est créé lors de la création du cluster en fonction du sous-réseau du pool de nœuds par défaut.
Les réseaux de couche 3 correspondent à une plage secondaire d'un sous-réseau, représentée comme suit :
VPC -> Nom du sous-réseau -> Nom de la plage secondaire
Le réseau de l'appareil correspond à un sous-réseau d'un VPC, représenté comme suit :
VPC -> Nom du sous-réseau
Réseau de pods par défaut : Google Cloud crée un réseau de pods par défaut lors de la création d'un cluster. Le réseau de pods par défaut utilise le VPC principal comme réseau de nœuds. Le réseau de pods par défaut est disponible sur l'ensemble des nœuds et des pods d'un cluster par défaut.
Pods avec plusieurs interfaces : les pods avec plusieurs interfaces dans GKE ne peuvent pas se connecter au même réseau de pods, car chaque interface du pod doit être connectée à un réseau unique.
Mettre à jour le projet pour qu'il soit compatible avec l'atelier de programmation
Cet atelier de programmation utilise des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.
Dans Cloud Shell, procédez comme suit :
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Configurer le VPC principal
Créer le VPC principal
Dans Cloud Shell, procédez comme suit :
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
Créer le nœud et les sous-réseaux secondaires
Dans Cloud Shell, procédez comme suit :
gcloud compute networks subnets create primary-node-subnet --project=$projectid --range=192.168.0.0/24 --network=primary-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-primay-vpc=10.0.0.0/21
4. Création d'un cluster GKE
Créez le cluster GKE privé en spécifiant les sous-réseaux VPC principaux pour créer le pool de nœuds par défaut avec les indicateurs requis : "–enable-multi-networking" et "–enable-dataplane-v2" pour prendre en charge les pools de nœuds multi-NIC.
Dans Cloud Shell, créez le cluster GKE :
gcloud container clusters create multinic-gke \
--zone "us-central1-a" \
--enable-dataplane-v2 \
--enable-ip-alias \
--enable-multi-networking \
--network "primary-vpc" --subnetwork "primary-node-subnet" \
--num-nodes=2 \
--max-pods-per-node=32 \
--cluster-secondary-range-name=sec-range-primay-vpc \
--no-enable-master-authorized-networks \
--release-channel "regular" \
--enable-private-nodes --master-ipv4-cidr "100.100.10.0/28" \
--enable-ip-alias
Valider le cluster multinic-gke
Dans Cloud Shell, authentifiez-vous auprès du cluster :
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
Dans Cloud Shell, vérifiez que deux nœuds sont générés à partir du pool par défaut :
kubectl get nodes
Exemple :
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 2m4s v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 2m4s v1.27.3-gke.100
5. Configuration de netdevice-vpc
Créer le réseau netdevice-vpc
Dans Cloud Shell, procédez comme suit :
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
Créer les sous-réseaux netdevice-vpc
Dans Cloud Shell, créez le sous-réseau utilisé pour le réseau de l'interface réseau multinic :
gcloud compute networks subnets create netdevice-subnet --project=$projectid --range=192.168.10.0/24 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
Dans Cloud Shell, créez un sous-réseau pour l'instance netdevice-apache :
gcloud compute networks subnets create netdevice-apache --project=$projectid --range=172.16.10.0/28 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
Configuration de Cloud Router et de NAT
Cloud NAT est utilisé dans le tutoriel pour l'installation de packages logiciels, car l'instance de VM ne possède pas d'adresse IP externe.
Dans Cloud Shell, créez le routeur cloud.
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
Dans Cloud Shell, créez la passerelle NAT.
gcloud compute routers nats create cloud-nat-netdevice --router=netdevice-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Créer l'instance netdevice-apache
Dans la section suivante, vous allez créer l'instance netdevice-apache.
Dans Cloud Shell, créez l'instance :
gcloud compute instances create netdevice-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=netdevice-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the netdevice-apache instance !!' | tee /var/www/html/index.html
EOF"
6. Configuration l3-vpc
Créer le réseau l3-vpc
Dans Cloud Shell, procédez comme suit :
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
Créer les sous-réseaux l3-vpc
Dans Cloud Shell, créez un sous-réseau avec une plage principale et une plage secondaire. La plage secondaire(sec-range-l3-subnet) est utilisée pour le réseau L3 multinic :
gcloud compute networks subnets create l3-subnet --project=$projectid --range=192.168.20.0/24 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-l3-subnet=10.0.8.0/21
Dans Cloud Shell, créez un sous-réseau pour l'instance l3-apache :
gcloud compute networks subnets create l3-apache --project=$projectid --range=172.16.20.0/28 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access
Configuration de Cloud Router et de NAT
Cloud NAT est utilisé dans le tutoriel pour l'installation de packages logiciels, car l'instance de VM ne possède pas d'adresse IP externe.
Dans Cloud Shell, créez le routeur cloud.
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
Dans Cloud Shell, créez la passerelle NAT.
gcloud compute routers nats create cloud-nat-l3 --router=l3-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Créer l'instance l3-apache
Dans la section suivante, vous allez créer l'instance l3-apache.
Dans Cloud Shell, créez l'instance :
gcloud compute instances create l3-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=l3-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the l3-apache instance !!' | tee /var/www/html/index.html
EOF"
7. Créer le pool de nœuds multinic
Dans la section suivante, vous allez créer un pool de nœuds multinic composé des indicateurs suivants :
--additional-node-network (obligatoire pour les interfaces de type appareil)
Exemple :
--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet
–additional-node-network & –additional-pod-network ( obligatoire pour les interfaces de type L3)
Exemple :
--additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8
Type de machine : lors du déploiement du pool de nœuds, tenez compte de la dépendance du type de machine. Par exemple, un type de machine "e2-standard-4" avec quatre processeurs virtuels peut accepter jusqu'à quatre VPC au total. Par exemple, netdevice-l3-pod aura un total de trois interfaces (par défaut, netdevice et l3). Le type de machine utilisé dans le tutoriel est donc e2-standard-4.
Dans Cloud Shell, créez le pool de nœuds composé d'un périphérique de type et d'un L3 :
gcloud container --project "$projectid" node-pools create "multinic-node-pool" --cluster "multinic-gke" --zone "us-central1-a" --additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet --additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8 --machine-type "e2-standard-4"
8. Valider le pool de nœuds multnic
Dans Cloud Shell, vérifiez que trois nœuds sont générés à partir du pool de nœuds multinic :
kubectl get nodes
Exemple :
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-0tfx Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-86gz Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-t66p Ready <none> 3m51s v1.27.3-gke.100
9. Créer le réseau netdevice
Dans les étapes suivantes, vous allez générer un objet Kubernetes Network et GKENetworkParamSet pour créer le réseau netdevice qui sera utilisé pour associer des pods lors des étapes ultérieures.
Créer l'objet netdevice-network
Dans Cloud Shell, créez l'objet réseau YAML netdevice-network.yaml à l'aide de l'éditeur VI ou de nano. Notez que "routes to" correspond au sous-réseau 172.16.10.0/28 (netdevice-apache) dans netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: netdevice-network
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: "netdevice"
routes:
- to: "172.16.10.0/28"
Dans Cloud Shell, appliquez netdevice-network.yaml :
kubectl apply -f netdevice-network.yaml
Dans Cloud Shell, vérifiez que le type d'état netdevice-network est "Ready" (Prêt).
kubectl describe networks netdevice-network
Exemple :
user@$ kubectl describe networks netdevice-network
Name: netdevice-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:37:38Z
Generation: 1
Resource Version: 1578594
UID: 46d75374-9fcc-42be-baeb-48e074747052
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: netdevice
Routes:
To: 172.16.10.0/28
Type: Device
Status:
Conditions:
Last Transition Time: 2023-07-30T22:37:38Z
Message: GKENetworkParamSet resource was deleted: netdevice
Reason: GNPDeleted
Status: False
Type: ParamsReady
Last Transition Time: 2023-07-30T22:37:38Z
Message: Resource referenced by params is not ready
Reason: ParamsNotReady
Status: False
Type: Ready
Events: <none>
Créer le GKENetworkParamSet
Dans Cloud Shell, créez l'objet réseau YAML netdevice-network-parm.yaml à l'aide de l'éditeur VI ou nano. La spécification correspond au déploiement du sous-réseau netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "netdevice"
spec:
vpc: "netdevice-vpc"
vpcSubnet: "netdevice-subnet"
deviceMode: "NetDevice"
Dans Cloud Shell, appliquez netdevice-network-parm.yaml.
kubectl apply -f netdevice-network-parm.yaml
Dans Cloud Shell, validez l'état netdevice-network "GNPParmsReady" et "NetworkReady" :
kubectl describe networks netdevice-network
Exemple :
user@$ kubectl describe networks netdevice-network
Name: netdevice-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:37:38Z
Generation: 1
Resource Version: 1579791
UID: 46d75374-9fcc-42be-baeb-48e074747052
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: netdevice
Routes:
To: 172.16.10.0/28
Type: Device
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:44Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:39:44Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
Dans Cloud Shell, validez le bloc CIDR gkenetworkparamset 192.168.10.0/24 utilisé pour l'interface du ou des pods lors d'une étape ultérieure.
kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Exemple :
user@$ kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Name: netdevice
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:39:43Z
Finalizers:
networking.gke.io/gnp-controller
networking.gke.io/high-perf-finalizer
Generation: 1
Resource Version: 1579919
UID: 6fe36b0c-0091-4b6a-9d28-67596cbce845
Spec:
Device Mode: NetDevice
Vpc: netdevice-vpc
Vpc Subnet: netdevice-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:43Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: netdevice-network
Pod CID Rs:
Cidr Blocks:
192.168.10.0/24
Events: <none>
10. Créer les réseaux de couche 3
Dans les étapes suivantes, vous allez générer un objet Kubernetes Network et GKENetworkParamSet pour créer le réseau de couche 3 qui sera utilisé pour associer des pods lors des étapes ultérieures.
Créer l'objet réseau de couche 3
Dans Cloud Shell, créez l'objet réseau YAML l3-network.yaml à l'aide de l'éditeur VI ou nano. Notez que "routes to" correspond au sous-réseau 172.16.20.0/28 (l3-apache) dans l3-vpc.
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: l3-network
spec:
type: "L3"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: "l3-network"
routes:
- to: "172.16.20.0/28"
Dans Cloud Shell, appliquez l3-network.yaml :
kubectl apply -f l3-network.yaml
Dans Cloud Shell, vérifiez que le type d'état du réseau de couche 3 est "Prêt".
kubectl describe networks l3-network
Exemple :
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1582307
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
to: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:43:54Z
Message: GKENetworkParamSet resource was deleted: l3-network
Reason: GNPDeleted
Status: False
Type: ParamsReady
Last Transition Time: 2023-07-30T22:43:54Z
Message: Resource referenced by params is not ready
Reason: ParamsNotReady
Status: False
Type: Ready
Events: <none>
Créer le GKENetworkParamSet
Dans Cloud Shell, créez l'objet réseau YAML l3-network-parm.yaml à l'aide de l'éditeur VI ou nano. Notez que la spécification correspond au déploiement du sous-réseau l3-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "l3-network"
spec:
vpc: "l3-vpc"
vpcSubnet: "l3-subnet"
podIPv4Ranges:
rangeNames:
- "sec-range-l3-subnet"
Dans Cloud Shell, appliquez l3-network-parm.yaml.
kubectl apply -f l3-network-parm.yaml
Dans Cloud Shell, vérifiez que la raison de l'état du réseau de couche 3 est "GNPParmsReady" et "NetworkReady" :
kubectl describe networks l3-network
Exemple :
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1583647
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
To: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
Dans Cloud Shell, validez le paramètre gkenetworkparamset l3-network CIDR 10.0.8.0/21 utilisé pour créer l'interface de pod.
kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Exemple :
user@$ kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:46:14Z
Finalizers:
networking.gke.io/gnp-controller
Generation: 1
Resource Version: 1583656
UID: 4c1f521b-0088-4005-b000-626ca5205326
Spec:
podIPv4Ranges:
Range Names:
sec-range-l3-subnet
Vpc: l3-vpc
Vpc Subnet: l3-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: l3-network
Pod CID Rs:
Cidr Blocks:
10.0.8.0/21
Events: <none>
11. Créer le pod netdevice-l3
Dans la section suivante, vous allez créer le pod netdevice-l3 exécutant busybox, également appelé "couteau suisse", qui prend en charge plus de 300 commandes courantes. Le pod est configuré pour communiquer avec l3-vpc à l'aide d'eth1 et avec netdevice-vpc à l'aide d'eth2.
Dans Cloud Shell, créez le conteneur busybox nommé netdevice-l3-pod.yaml à l'aide de l'éditeur VI ou de nano.
apiVersion: v1
kind: Pod
metadata:
name: netdevice-l3-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"},
{"interfaceName":"eth2","network":"netdevice-network"}
]
spec:
containers:
- name: netdevice-l3-pod
image: busybox
command: ["sleep", "10m"]
ports:
- containerPort: 80
restartPolicy: Always
Dans Cloud Shell, appliquez netdevice-l3-pod.yaml.
kubectl apply -f netdevice-l3-pod.yaml
Valider la création du pod netdevice-l3
Dans Cloud Shell, vérifiez que netdevice-l3-pod est en cours d'exécution :
kubectl get pods netdevice-l3-pod
Exemple :
user@$ kubectl get pods netdevice-l3-pod
NAME READY STATUS RESTARTS AGE
netdevice-l3-pod 1/1 Running 0 74s
Dans Cloud Shell, validez les adresses IP attribuées aux interfaces de pod.
kubectl get pods netdevice-l3-pod -o yaml
Dans l'exemple fourni, le champ networking.gke.io/pod-ips contient les adresses IP associées aux interfaces de pod des réseaux l3-network et netdevice-network. L'adresse IP du réseau par défaut 10.0.1.22 est détaillée sous "podIPs" :
user@$ kubectl get pods netdevice-l3-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"networking.gke.io/default-interface":"eth0","networking.gke.io/interfaces":"[\n{\"interfaceName\":\"eth0\",\"network\":\"default\"},\n{\"interfaceName\":\"eth1\",\"network\":\"l3-network\"},\n{\"interfaceName\":\"eth2\",\"network\":\"netdevice-network\"}\n]\n"},"name":"netdevice-l3-pod","namespace":"default"},"spec":{"containers":[{"command":["sleep","10m"],"image":"busybox","name":"netdevice-l3-pod","ports":[{"containerPort":80}]}],"restartPolicy":"Always"}}
networking.gke.io/default-interface: eth0
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"},
{"interfaceName":"eth2","network":"netdevice-network"}
]
networking.gke.io/pod-ips: '[{"networkName":"l3-network","ip":"10.0.8.4"},{"networkName":"netdevice-network","ip":"192.168.10.2"}]'
creationTimestamp: "2023-07-30T22:49:27Z"
name: netdevice-l3-pod
namespace: default
resourceVersion: "1585567"
uid: d9e43c75-e0d1-4f31-91b0-129bc53bbf64
spec:
containers:
- command:
- sleep
- 10m
image: busybox
imagePullPolicy: Always
name: netdevice-l3-pod
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
networking.gke.io.networks/l3-network.IP: "1"
networking.gke.io.networks/netdevice-network: "1"
networking.gke.io.networks/netdevice-network.IP: "1"
requests:
networking.gke.io.networks/l3-network.IP: "1"
networking.gke.io.networks/netdevice-network: "1"
networking.gke.io.networks/netdevice-network.IP: "1"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-f2wpb
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: gke-multinic-gke-multinic-node-pool-135699a1-86gz
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: networking.gke.io.networks/l3-network.IP
operator: Exists
- effect: NoSchedule
key: networking.gke.io.networks/netdevice-network
operator: Exists
- effect: NoSchedule
key: networking.gke.io.networks/netdevice-network.IP
operator: Exists
volumes:
- name: kube-api-access-f2wpb
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:28Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:33Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:33Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:28Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: containerd://dcd9ead2f69824ccc37c109a47b1f3f5eb7b3e60ce3865e317dd729685b66a5c
image: docker.io/library/busybox:latest
imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
lastState: {}
name: netdevice-l3-pod
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-07-30T22:49:32Z"
hostIP: 192.168.0.4
phase: Running
podIP: 10.0.1.22
podIPs:
- ip: 10.0.1.22
qosClass: BestEffort
startTime: "2023-07-30T22:49:28Z"
Valider les routes netdevice-l3-pod
Dans Cloud Shell, validez les routes vers netdevice-vpc et l3-vpc depuis netdevice-l3-pod :
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
À partir de l'instance, validez les interfaces du pod :
ifconfig
Dans l'exemple, eth0 est connecté au réseau par défaut, eth1 est connecté au réseau l3-network et eth2 est connecté au réseau netdevice-network.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 26:E3:1B:14:6E:0C
inet addr:10.0.1.22 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 92:78:4E:CB:F2:D4
inet addr:10.0.8.4 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
eth2 Link encap:Ethernet HWaddr 42:01:C0:A8:0A:02
inet addr:192.168.10.2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:50581 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26169 (25.5 KiB) TX bytes:2148170 (2.0 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
À partir du pod netdevice-l3, validez les routes vers netdevice-vpc (172.16.10.0/28) et l3-vpc (172.16.20.0/28).
Formez l'instance et validez les routes du pod :
ip route
Exemple :
/ # ip route
default via 10.0.1.1 dev eth0 #primary-vpc
10.0.1.0/24 via 10.0.1.1 dev eth0 src 10.0.1.22
10.0.1.1 dev eth0 scope link src 10.0.1.22
10.0.8.0/21 via 10.0.8.1 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.1 dev eth1 scope link
172.16.10.0/28 via 192.168.10.1 dev eth2 #netdevice-vpc (netdevice-apache subnet)
172.16.20.0/28 via 10.0.8.1 dev eth1 #l3-vpc (l3-apache subnet)
192.168.10.0/24 via 192.168.10.1 dev eth2 #pod interface subnet
192.168.10.1 dev eth2 scope link
Pour revenir à Cloud Shell, quittez le pod depuis l'instance.
exit
12. Créer le pod de niveau 3
Dans la section suivante, vous allez créer le pod l3 exécutant busybox, également appelé "couteau suisse", qui prend en charge plus de 300 commandes courantes. Le pod est configuré pour communiquer avec le VPC de couche 3 en utilisant uniquement eth1.
Dans Cloud Shell, créez le conteneur busybox nommé l3-pod.yaml à l'aide de l'éditeur VI ou de nano.
apiVersion: v1
kind: Pod
metadata:
name: l3-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"}
]
spec:
containers:
- name: l3-pod
image: busybox
command: ["sleep", "10m"]
ports:
- containerPort: 80
restartPolicy: Always
Dans Cloud Shell, appliquez l3-pod.yaml.
kubectl apply -f l3-pod.yaml
Valider la création du pod de niveau 3
Dans Cloud Shell, vérifiez que netdevice-l3-pod est en cours d'exécution :
kubectl get pods l3-pod
Exemple :
user@$ kubectl get pods l3-pod
NAME READY STATUS RESTARTS AGE
l3-pod 1/1 Running 0 52s
Dans Cloud Shell, validez les adresses IP attribuées aux interfaces de pod.
kubectl get pods l3-pod -o yaml
Dans l'exemple fourni, le champ networking.gke.io/pod-ips contient les adresses IP associées aux interfaces de pod du réseau de couche 3. L'adresse IP du réseau par défaut 10.0.2.12 est détaillée sous "podIPs" :
user@$ kubectl get pods l3-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"networking.gke.io/default-interface":"eth0","networking.gke.io/interfaces":"[\n{\"interfaceName\":\"eth0\",\"network\":\"default\"},\n{\"interfaceName\":\"eth1\",\"network\":\"l3-network\"}\n]\n"},"name":"l3-pod","namespace":"default"},"spec":{"containers":[{"command":["sleep","10m"],"image":"busybox","name":"l3-pod","ports":[{"containerPort":80}]}],"restartPolicy":"Always"}}
networking.gke.io/default-interface: eth0
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"}
]
networking.gke.io/pod-ips: '[{"networkName":"l3-network","ip":"10.0.8.22"}]'
creationTimestamp: "2023-07-30T23:22:29Z"
name: l3-pod
namespace: default
resourceVersion: "1604447"
uid: 79a86afd-2a50-433d-9d48-367acb82c1d0
spec:
containers:
- command:
- sleep
- 10m
image: busybox
imagePullPolicy: Always
name: l3-pod
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
networking.gke.io.networks/l3-network.IP: "1"
requests:
networking.gke.io.networks/l3-network.IP: "1"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-w9d24
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: gke-multinic-gke-multinic-node-pool-135699a1-t66p
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: networking.gke.io.networks/l3-network.IP
operator: Exists
volumes:
- name: kube-api-access-w9d24
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:29Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:35Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:35Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:29Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: containerd://1d5fe2854bba0a0d955c157a58bcfd4e34cecf8837edfd7df2760134f869e966
image: docker.io/library/busybox:latest
imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
lastState: {}
name: l3-pod
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-07-30T23:22:35Z"
hostIP: 192.168.0.5
phase: Running
podIP: 10.0.2.12
podIPs:
- ip: 10.0.2.12
qosClass: BestEffort
startTime: "2023-07-30T23:22:29Z"
Valider les routes l3-pod
Dans Cloud Shell, validez les routes vers l3-vpc depuis netdevice-l3-pod :
kubectl exec --stdin --tty l3-pod -- /bin/sh
À partir de l'instance, validez les interfaces du pod :
ifconfig
Dans l'exemple, eth0 est connecté au réseau par défaut et eth1 est connecté au réseau l3-network.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 22:29:30:09:6B:58
inet addr:10.0.2.12 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 6E:6D:FC:C3:FF:AF
inet addr:10.0.8.22 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
À partir du pod l3, validez les routes vers le VPC l3 (172.16.20.0/28).
Formez l'instance et validez les routes du pod :
ip route
Exemple :
/ # ip route
default via 10.0.2.1 dev eth0 #primary-vpc
10.0.2.0/24 via 10.0.2.1 dev eth0 src 10.0.2.12
10.0.2.1 dev eth0 scope link src 10.0.2.12
10.0.8.0/21 via 10.0.8.17 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.17 dev eth1 scope link #pod interface subnet
172.16.20.0/28 via 10.0.8.17 dev eth1 #l3-vpc (l3-apache subnet)
Pour revenir à Cloud Shell, quittez le pod depuis l'instance.
exit
13. Mises à jour du pare-feu
Pour autoriser la connectivité du pool multicnic GKE au netdevice-vpc, des règles de pare-feu d'entrée sont requises pour netdevice-vpc et l3-vpc. Vous allez créer des règles de pare-feu spécifiant la plage source comme sous-réseau du réseau de pods, par exemple netdevice-subnet ou sec-range-l3-subnet.
Par exemple, le conteneur l3-pod récemment créé, l'interface eth2 10.0.8.22 (allouée à partir du sous-réseau sec-range-l3-subnet) est l'adresse IP source lors de la connexion à l'instance l3-apache dans le VPC l3-vpc.
netdevice-vpc: Allow from netdevice-subnet to netdevice-apache
Dans Cloud Shell, créez la règle de pare-feu dans le VPC netdevice-vpc pour autoriser l'accès du sous-réseau netdevice-subnet à l'instance netdevice-apache.
gcloud compute --project=$projectid firewall-rules create allow-ingress-from-netdevice-network-to-all-vpc-instances --direction=INGRESS --priority=1000 --network=netdevice-vpc --action=ALLOW --rules=all --source-ranges=192.168.10.0/24 --enable-logging
l3-vpc : autoriser le trafic de sec-range-l3-subnet vers l3-apache
Dans Cloud Shell, créez la règle de pare-feu dans le VPC l3-vpc, en autorisant l'accès de sec-range-l3-subnet à l'instance l3-apache.
gcloud compute --project=$projectid firewall-rules create allow-ingress-from-l3-network-to-all-vpc-instances --direction=INGRESS --priority=1000 --network=l3-vpc --action=ALLOW --rules=all --source-ranges=10.0.8.0/21 --enable-logging
14. Valider la connectivité des pods
Dans la section suivante, vous allez vérifier la connectivité aux instances Apache à partir des pods netdevice-l3-pod et l3-pod en vous connectant aux pods et en exécutant une commande wget -S qui valide le téléchargement de la page d'accueil des serveurs Apache. Étant donné que le pod netdevice-l3-pod est configuré avec des interfaces des réseaux netdevice-network et l3-network, la connectivité aux serveurs Apache dans netdevice-vpc et l3-vpc est possible.
En revanche, lors de l'exécution d'un wget -S à partir du pod l3, la connectivité au serveur Apache dans netdevice-vpc n'est pas possible, car le pod l3 n'est configuré qu'avec une interface du réseau l3.
Obtenir l'adresse IP du serveur Apache
Dans la console Cloud, obtenez l'adresse IP des serveurs Apache en accédant à Compute Engine → Instances de VM.

Test de connectivité de netdevice-l3-pod à netdevice-apache
Dans Cloud Shell, connectez-vous à netdevice-l3-pod :
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
À partir du conteneur, effectuez un ping vers l'instance netdevice-apache en fonction de l'adresse IP obtenue à l'étape précédente.
ping <insert-your-ip> -c 4
Exemple :
/ # ping 172.16.10.2 -c 4
PING 172.16.10.2 (172.16.10.2): 56 data bytes
64 bytes from 172.16.10.2: seq=0 ttl=64 time=1.952 ms
64 bytes from 172.16.10.2: seq=1 ttl=64 time=0.471 ms
64 bytes from 172.16.10.2: seq=2 ttl=64 time=0.446 ms
64 bytes from 172.16.10.2: seq=3 ttl=64 time=0.505 ms
--- 172.16.10.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.446/0.843/1.952 ms
/ #
Dans Cloud Shell, exécutez une commande wget -S sur l'instance netdevice-apache en fonction de l'adresse IP obtenue à l'étape précédente. Si le téléchargement de la page Web a réussi, le code de réponse 200 OK s'affiche.
wget -S <insert-your-ip>
Exemple :
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:12:58 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Sat, 29 Jul 2023 00:32:44 GMT
ETag: "2c-6019555f54266"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |********************************| 44 0:00:00 ETA
'index.html' saved
/ #
Test de connectivité entre netdevice-l3-pod et l3-apache
Dans Cloud Shell, effectuez un ping sur l'instance l3-apache en fonction de l'adresse IP obtenue à l'étape précédente.
ping <insert-your-ip> -c 4
Exemple :
/ # ping 172.16.20.3 -c 4
PING 172.16.20.3 (172.16.20.3): 56 data bytes
64 bytes from 172.16.20.3: seq=0 ttl=63 time=2.059 ms
64 bytes from 172.16.20.3: seq=1 ttl=63 time=0.533 ms
64 bytes from 172.16.20.3: seq=2 ttl=63 time=0.485 ms
64 bytes from 172.16.20.3: seq=3 ttl=63 time=0.462 ms
--- 172.16.20.3 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.462/0.884/2.059 ms
/ #
Dans Cloud Shell, supprimez le fichier index.html précédent et exécutez une commande wget -S sur l'instance l3-apache en fonction de l'adresse IP obtenue à l'étape précédente. Si le code 200 OK s'affiche, cela signifie que la page Web a été téléchargée avec succès.
rm index.html
wget -S <insert-your-ip>
Exemple :
/ # rm index.html
/ # wget -S 172.16.20.3
Connecting to 172.16.20.3 (172.16.20.3:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:41:32 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Mon, 31 Jul 2023 03:24:21 GMT
ETag: "25-601bff76f04b7"
Accept-Ranges: bytes
Content-Length: 37
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |*******************************************************************************************************| 37 0:00:00 ETA
'index.html' saved
Pour revenir à Cloud Shell, quittez le pod depuis l'instance.
exit
Test de connectivité l3-pod à netdevice-apache
Dans Cloud Shell, connectez-vous à l'instance l3-pod :
kubectl exec --stdin --tty l3-pod -- /bin/sh
À partir du conteneur, effectuez un ping vers l'instance netdevice-apache en fonction de l'adresse IP obtenue à l'étape précédente. Comme l'interface l3-pod n'est pas associée à netdevice-network, le ping échouera.
ping <insert-your-ip> -c 4
Exemple :
/ # ping 172.16.10.2 -c 4
PING 172.16.10.2 (172.16.10.2): 56 data bytes
--- 172.16.10.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss
Facultatif : Dans Cloud Shell, exécutez une commande wget -S sur l'instance netdevice-apache en fonction de l'adresse IP obtenue à l'étape précédente, qui expirera.
wget -S <insert-your-ip>
Exemple :
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
wget: can't connect to remote host (172.16.10.2): Connection timed out
Test de connectivité entre l3-pod et l3-apache
Dans Cloud Shell, effectuez un ping sur l'instance l3-apache en fonction de l'adresse IP obtenue à l'étape précédente.
ping <insert-your-ip> -c 4
Exemple :
/ # ping 172.16.20.3 -c 4
PING 172.16.20.3 (172.16.20.3): 56 data bytes
64 bytes from 172.16.20.3: seq=0 ttl=63 time=1.824 ms
64 bytes from 172.16.20.3: seq=1 ttl=63 time=0.513 ms
64 bytes from 172.16.20.3: seq=2 ttl=63 time=0.482 ms
64 bytes from 172.16.20.3: seq=3 ttl=63 time=0.532 ms
--- 172.16.20.3 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.482/0.837/1.824 ms
/ #
Dans Cloud Shell, exécutez une commande wget -S sur l'instance l3-apache en fonction de l'adresse IP obtenue à l'étape précédente. Un code 200 OK indique que la page Web a été téléchargée avec succès.
wget -S <insert-your-ip>
Exemple :
/ # wget -S 172.16.20.3
Connecting to 172.16.20.3 (172.16.20.3:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:52:08 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Mon, 31 Jul 2023 03:24:21 GMT
ETag: "25-601bff76f04b7"
Accept-Ranges: bytes
Content-Length: 37
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |*******************************************************************************************************| 37 0:00:00 ETA
'index.html' saved
/ #
15. Journaux de pare-feu
La journalisation des règles de pare-feu vous permet de réaliser des audits, des vérifications et des analyses sur les effets de ces règles. Par exemple, vous pouvez déterminer si une règle de pare-feu conçue pour refuser le trafic fonctionne comme prévu. La journalisation des règles de pare-feu est également utile si vous devez déterminer le nombre de connexions affectées par une règle de pare-feu donnée.
Dans le tutoriel, vous avez activé la journalisation du pare-feu lorsque vous avez créé les règles de pare-feu d'entrée. Examinons les informations obtenues à partir des journaux.
Dans la console Cloud, accédez à Logging → Explorateur de journaux.
Insérez la requête ci-dessous, comme indiqué sur la capture d'écran, puis sélectionnez "Exécuter la requête". jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

En examinant de plus près une capture, les administrateurs de sécurité peuvent obtenir des informations sur l'adresse IP source et de destination, le port, le protocole et le nom du pool de nœuds.

Pour explorer d'autres journaux de pare-feu, accédez à Réseau VPC → Pare-feu → allow-ingress-from-netdevice-network-to-all-vpc-instances, puis sélectionnez "Afficher dans l'explorateur de journaux".
16. Effectuer un nettoyage
Dans Cloud Shell, supprimez les composants du tutoriel.
gcloud compute instances delete l3-apache netdevice-apache --zone=us-central1-a --quiet
gcloud compute routers delete l3-cr netdevice-cr --region=us-central1 --quiet
gcloud container clusters delete multinic-gke --zone=us-central1-a --quiet
gcloud compute firewall-rules delete allow-ingress-from-l3-network-to-all-vpc-instances allow-ingress-from-netdevice-network-to-all-vpc-instances --quiet
gcloud compute networks subnets delete l3-apache l3-subnet netdevice-apache netdevice-subnet primary-node-subnet --region=us-central1 --quiet
gcloud compute networks delete l3-vpc netdevice-vpc primary-vpc --quiet
17. Félicitations
Félicitations ! Vous avez configuré et validé la création d'un pool de nœuds multinic et de pods exécutant busybox pour valider la connectivité de type L3 et de périphérique aux serveurs Apache à l'aide de PING et wget.
Vous avez également appris à exploiter les journaux de pare-feu pour inspecter les paquets source et de destination entre les conteneurs de pods et les serveurs Apache.
Cosmopup pense que les tutoriels sont géniaux !!
