1. Introduction
GCP accepte depuis longtemps 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 permettaient à tous les pools de nœuds de ne comporter qu'une seule interface et donc d'être mappés à 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 pour les pods d'un cluster GKE.
Objectifs de l'atelier
Dans ce tutoriel, vous allez créer un environnement multicloud complet GKE qui illustre le ou les cas d'utilisation illustrés dans la figure 1.
- Créez netdevice-l3-pod à l'aide d'une boîte à bulles en service pour:
- Réaliser un PING et wget -S vers l'instance netdevice-apache dans le VPC netdevice-vpc via eth2
- Réaliser un PING et wget -S vers l'instance l3-apache dans le VPC l3-vpc sur eth1
- Créez un l3-pod à l'aide d'une boîte à bulles en train d'exécuter une commande PING. wget -S vers une instance l3-apache via 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 avec plusieurs cartes d'interface réseau
- Créer un pod avec des fonctionnalités netdevice et l3
- Créer un pod avec des capacités l3
- Créer et valider un réseau d'objets GKE
- Comment valider la connectivité à des serveurs Apache distants à l'aide de PING, wget et de 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 ressources et de paramètres 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 routage 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 qui est attribuée aux nœuds et peut avoir plusieurs plages secondaires pouvant appartenir à des pods et à des services.
Node-network (réseau de nœuds) : le réseau de nœuds fait référence à la combinaison dédiée d'un VPC et d'une paire de sous-réseaux. Au sein de ce réseau de nœuds, les nœuds appartenant au pool de nœuds reçoivent des adresses IP à partir de la plage d'adresses IP principale.
Plage secondaire: une plage secondaire Google Cloud est un 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 avoir plusieurs plages secondaires, et un pod peut se connecter à plusieurs réseaux de pods.
Réseau (L3 ou appareil): objet réseau servant de point de connexion aux pods. Dans ce tutoriel, les réseaux sont l3-network et netdevice-network, où l'appareil peut être soit netdevice, soit dpdk. Le réseau par défaut est obligatoire. Il 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é comme suit:
VPC -> Nom du sous-réseau -> Nom de la plage secondaire
Le réseau de l'appareil correspond à un sous-réseau sur 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 du 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 tous les nœuds et pods du cluster, par défaut.
Pods avec plusieurs interfaces: dans GKE, les pods dotés de plusieurs interfaces 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 $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.
Dans Cloud Shell, effectuez les opérations suivantes:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Configuration du VPC principal
Créer le VPC principal
Dans Cloud Shell, effectuez les opérations suivantes:
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, effectuez les opérations suivantes:
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 "primary-vpc" afin de créer le pool de nœuds par défaut avec les options requises "-enable-multi-networking" et "-enable-dataplane-v2" pour la compatibilité avec les pools de nœuds avec plusieurs cartes d'interface réseau.
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 default-pool:
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, effectuez les opérations suivantes:
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 multinic netdevice-network:
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 Cloud Router et 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 de l3-vpc
Créer le réseau l3-vpc
Dans Cloud Shell, effectuez les opérations suivantes:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
Créer les sous-réseaux l3-vpc
Dans Cloud Shell, créez des sous-réseaux de plage principale et secondaire. La plage secondaire(sec-range-l3-subnet) est utilisée pour le réseau multinic l3-network:
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 Cloud Router et 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 doté de plusieurs cartes d'interface réseau
Dans la section suivante, vous allez créer un pool de nœuds doté de plusieurs cartes d'interface réseau comprenant les options suivantes:
–additional-node-network (obligatoire pour les interfaces de type d'appareil)
Exemple :
--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet
– network-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 tel que "e2-standard-4" comportant quatre vCPU peuvent accepter jusqu'à quatre VPC au total. Par exemple, netdevice-l3-pod aura un total de trois interfaces (par défaut, netdevice et l3). Par conséquent, le type de machine utilisé dans le tutoriel est e2-standard-4.
Dans Cloud Shell, créez le pool de nœuds composé d'un appareil de type et d'un niveau 3:
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 multiples
Dans Cloud Shell, validez que trois nœuds sont générés à partir du pool multinic-node-pool:
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-network
Dans les étapes suivantes, vous allez générer un objet Kubernetes Network et GKENetworkParamSet pour créer le réseau netdevice-network qui sera utilisé pour associer les pods dans les étapes suivantes.
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 l'itinéraire vers correspond au sous-réseau 172.16.10.0/28 (netdevice-apache) dans le VPC 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 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 VI Editor ou de 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 le motif d'é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, vous validerez le bloc CIDR 192.168.10.0/24 gkenetworkparamset 192.168.10.0/24 que vous utiliserez pour l'interface du ou des pods lors d'une prochaine étape.
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 niveau 3
Dans les étapes suivantes, vous allez générer un objet Kubernetes Network et GKENetworkParamSet pour créer le réseau l3 qui sera utilisé pour associer les pods dans les étapes suivantes.
Créer l'objet réseau l3
Dans Cloud Shell, créez l'objet réseau YAML l3-network.yaml à l'aide de VI Editor ou de nano. Notez l'itinéraire vers est le sous-réseau 172.16.20.0/28 (l3-apache) du réseau 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 l3-network 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 VI Editor ou de nano. Notez que cette 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 le motif d'état l3-network 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 CIDR 10.0.8.0/21 gkenetworkparamset l3-network 10.0.8.0/21 utilisé pour créer l'interface du 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 netdevice-l3-pod
Dans la section suivante, vous allez créer l'instance netdevice-l3-pod qui s'exécute sur la boîte, appelée "couteau suisse" qui prend en charge plus de 300 commandes courantes. Le pod est configuré pour communiquer avec l3-vpc via eth1 et netdevice-vpc via eth2.
Dans Cloud Shell, créez le conteneur de zone occupée nommé netdevice-l3-pod.yaml à l'aide de VI Editor 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 de netdevice-l3-pod
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 des pods.
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 de l3-network et netdevice-network. L'adresse IP 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
Créez l'instance, validez les interfaces du pod:
ifconfig
Dans cet 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)
Validez les routes vers netdevice-vpc (172.16.10.0/28) et l3-vpc (172.16.20.0/28) depuis netdevice-l3-pod.
Depuis l'instance, 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 de l'instance.
exit
12. Créer le pod l3-pod
Dans la section suivante, vous allez créer l'instance l3-pod numérotés, appelée "couteau suisse" qui prend en charge plus de 300 commandes courantes. Le pod est configuré pour communiquer avec le VPC l3-vpc uniquement via eth1.
Dans Cloud Shell, créez le conteneur de zone occupée nommé l3-pod.yaml à l'aide de VI Editor 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 de l3-pod
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 des pods.
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 l3-network. L'adresse IP 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
Créez l'instance, validez les interfaces du pod:
ifconfig
Dans cet exemple, eth0 est connecté au réseau par défaut, 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-pod, validez les routes vers le VPC l3-vpc (172.16.20.0/28).
Depuis l'instance, 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 de l'instance.
exit
13. Mises à jour du pare-feu
Pour autoriser la connectivité entre le pool multicnic-GKE et les règles de pare-feu d'entrée netdevice-vpc et l3-vpc, Vous allez créer des règles de pare-feu spécifiant la plage source en tant que sous-réseau du réseau de pods. Par exemple, netdevice-subnet et sec-range-l3-subnet.
Par exemple, le conteneur l3-pod, interface eth2 récemment créé (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: autoriser le sous-réseau netdevice-subnet vers netdevice-apache
Dans Cloud Shell, créez la règle de pare-feu dans le VPC "netdevice-vpc" qui autorise le sous-réseau netdevice-subnet à accéder à 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 sous-réseau sec-range-l3-subnet vers l3-apache
Dans Cloud Shell, créez la règle de pare-feu dans le VPC l3-vpc, autorisant sec-range-l3-subnet à accéder à 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 de netdevice-l3-pod et l3-pod en vous connectant aux pods et en exécutant la commande wget -S qui valide le téléchargement de la page d'accueil des serveurs Apache. Comme le pod netdevice-l3-pod est configuré avec des interfaces provenant de 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 de la commande wget -S à partir du pod l3-pod, la connectivité au serveur Apache dans netdevice-vpc n'est pas possible, car le l3-pod n'est configuré qu'avec une interface de l3-network.
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 vers 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 la commande wget -S sur l'instance netdevice-apache en vous basant sur l'adresse IP obtenue à l'étape précédente. 200 OK indique que la page Web a bien été téléchargée.
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é de netdevice-l3-pod vers l3-apache
Dans Cloud Shell, envoyez un ping à 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 instance wget -S vers l3-apache en vous basant sur l'adresse IP obtenue à l'étape précédente. 200 OK indique un téléchargement réussi de la page Web.
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 de l'instance.
exit
Test de connectivité de l3-pod vers netdevice-apache
Dans Cloud Shell, connectez-vous à 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 l3-pod n'a pas d'interface 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 la commande wget -S sur une instance netdevice-apache en vous basant sur l'adresse IP obtenue à l'étape précédente, qui va expirer.
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é l3-pod vers l3-apache
Dans Cloud Shell, envoyez un ping à 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 instance wget -S vers l3-apache en vous basant sur l'adresse IP obtenue à l'étape précédente. 200 OK indique que la page Web a bien été téléchargée.
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 ce tutoriel, vous avez activé la journalisation de pare-feu lors de la création des règles de pare-feu d'entrée. Examinons les informations obtenues dans les journaux.
Dans la console Cloud, accédez à Logging → Explorateur de journaux.
Insérez la requête ci-dessous conformément à la capture d'écran et sélectionnez Exécuter la requête jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")
Examiner de plus près une capture fournit des éléments d'information aux administrateurs de la sécurité : comme 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 bien configuré et validé la création d'un pool de nœuds multinic et la création de pods exécutant la boîte de dialogue Istio pour valider la connectivité de type L3 et type d'appareil avec les 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 trouve les tutoriels géniaux !