1. Einführung
Die GCP unterstützt schon lange mehrere Schnittstellen auf VM-Instanzebene. Mit mehreren Schnittstellen kann eine VM bis zu 7 neue Schnittstellen (Standard + 7 Schnittstellen) mit verschiedenen VPCs verbinden. Im GKE-Netzwerk wird dieses Verhalten jetzt auf die Pods ausgeweitet, die auf den Knoten ausgeführt werden. Vor dieser Funktion konnten GKE-Cluster allen Knotenpools nur eine einzige Schnittstelle ermöglichen und daher einer einzelnen VPC zuordnen. Mit der Funktion für mehrere Netzwerke auf Pods können Nutzer jetzt mehr als eine Schnittstelle auf Knoten und für Pods in einem GKE-Cluster aktivieren.
Inhalt
In dieser Anleitung erstellen Sie eine umfassende GKE-Multinic-Umgebung, die die in Abbildung 1 dargestellten Anwendungsfälle veranschaulicht.
- Erstellen Sie den Pod netdevice-l3-pod mit der Nutzung von „ownedbox“, um:
- Führe ein PING durch und wget -S zur Instanz "netdevice-apache" in "netdevice-vpc" über "eth2"
- Führe ein PING durch und wget -S zu l3-apache-Instanz im l3-vpc über eth1
- Erstellen Sie einen l3-Pod, der mit der Betätigung der Betätigungsbox einen PING durchführt und wget -S zu l3-apache-Instanz über eth1
In beiden Fällen ist die eth0-Schnittstelle des Pods mit dem Standardnetzwerk verbunden.
Abbildung 1
Aufgaben in diesem Lab
- L3-Subnetz erstellen
- So erstellen Sie ein Subnetz vom Typ Netdevice
- GKE-Knotenpool mit mehreren NICs einrichten
- Pod mit netdevice- und l3-Funktionen erstellen
- Pod mit L3-Funktionen erstellen
- GKE-Objektnetzwerk erstellen und validieren
- Konnektivität zu Apache Remote-Servern mithilfe von PING-, Wget- und Firewall-Logs validieren
Voraussetzungen
- Google Cloud-Projekt
2. Terminologie und Konzepte
Primäre VPC: Die primäre VPC ist eine vorkonfigurierte VPC mit einer Reihe von Standardeinstellungen und -ressourcen. Der GKE-Cluster wird in dieser VPC erstellt.
Subnetz: In Google Cloud ist ein Subnetz die Möglichkeit, ein Classless Inter-Domain Routing (CIDR) mit Netzmasken in einer VPC zu erstellen. Ein Subnetz hat einen einzigen primären IP-Adressbereich, der den Knoten zugewiesen ist und mehrere sekundäre Bereiche haben kann, die zu Pods und Diensten gehören können.
Knotennetzwerk: Das Knotennetzwerk bezieht sich auf eine dedizierte Kombination aus einem VPC- und Subnetzpaar. Innerhalb dieses Knotennetzwerks werden den Knoten, die zum Knotenpool gehören, IP-Adressen aus dem primären IP-Adressbereich zugewiesen.
Sekundärer Bereich: Ein sekundärer Google Cloud-Bereich ist ein CIDR und eine Netzmaske, die zu einer Region in einer VPC gehören. GKE verwendet dies als Layer 3-Pod-Netzwerk. Eine VPC kann mehrere sekundäre Bereiche haben und ein Pod kann eine Verbindung zu mehreren Pod-Netzwerken herstellen.
Netzwerk (L3 oder Gerät): Ein Netzwerkobjekt, das als Verbindungspunkt für Pods dient. In dieser Anleitung sind die Netzwerke „l3-network“ und „netdevice-network“, wobei das Gerät entweder „netdevice“ oder „dpdk“ sein kann. Das Standardnetzwerk ist obligatorisch und wird bei der Clustererstellung basierend auf dem Subnetz des Standardknotenpools erstellt.
Ebene-3-Netzwerke entsprechen einem sekundären Bereich in einem Subnetz, dargestellt als:
VPC -> Subnetzname -> Name des sekundären Bereichs
Das Gerätenetzwerk entspricht einem Subnetz in einer VPC, dargestellt als:
VPC -> Subnetzname
Standard-Pod-Netzwerk: Google Cloud erstellt während der Clustererstellung ein Standard-Pod-Netzwerk. Das Standard-Pod-Netzwerk verwendet die primäre VPC als Knotennetzwerk. Das standardmäßige Pod-Netzwerk ist standardmäßig auf allen Clusterknoten und Pods verfügbar.
Pods mit mehreren Schnittstellen: Pods mit mehreren Schnittstellen in GKE können keine Verbindung zum selben Pod-Netzwerk herstellen, da jede Schnittstelle des Pods mit einem eindeutigen Netzwerk verbunden sein muss.
Projekt zur Unterstützung des Codelab aktualisieren
In diesem Codelab wird $variables verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu unterstützen.
Führen Sie in Cloud Shell die folgenden Schritte aus:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Einrichtung der primären VPC
Primäre VPC erstellen
Führen Sie in Cloud Shell die folgenden Schritte aus:
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
Knoten und sekundäre Subnetze erstellen
Führen Sie in Cloud Shell die folgenden Schritte aus:
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. GKE-Cluster erstellen
Erstellen Sie den privaten GKE-Cluster, indem Sie die primären VPC-Subnetze angeben, um den Standardknotenpool mit den erforderlichen Flags –enable-multi-networking und –enable-dataplane-v2 zur Unterstützung von Multi-NIC-Knotenpools zu erstellen.
Erstellen Sie in Cloud Shell den GKE-Cluster:
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
Multinic-gke-Cluster validieren
Authentifizieren Sie sich in Cloud Shell beim Cluster:
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
Prüfen Sie in Cloud Shell, ob zwei Knoten aus dem Standardpool generiert werden:
kubectl get nodes
Beispiel:
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. Einrichtung von netdevice-vpc
Netzwerk "netdevice-vpc" erstellen
Führen Sie in Cloud Shell die folgenden Schritte aus:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
Subnetze "netdevice-vpc" erstellen
Erstellen Sie in Cloud Shell das Subnetz, das für das multinic-Netzwerk netdevice-network verwendet wird:
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
Erstellen Sie in Cloud Shell ein Subnetz für die Instanz "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
Cloud Router und NAT-Konfiguration
In der Anleitung wird Cloud NAT für die Installation von Softwarepaketen verwendet, da die VM-Instanz keine externe IP-Adresse hat.
Erstellen Sie den Cloud Router in Cloud Shell.
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
Erstellen Sie das NAT-Gateway in Cloud Shell.
gcloud compute routers nats create cloud-nat-netdevice --router=netdevice-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Instanz "netdevice-apache" erstellen
Im folgenden Abschnitt erstellen Sie die Instanz "netdevice-apache".
Erstellen Sie die Instanz in Cloud Shell:
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. L3-VPC-Einrichtung
l3-vpc-Netzwerk erstellen
Führen Sie in Cloud Shell die folgenden Schritte aus:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
l3-vpc-Subnetze erstellen
Erstellen Sie in Cloud Shell ein Subnetz des primären und sekundären Bereichs. Der sekundäre Bereich(sec-range-l3-subnet) wird für das multinic-l3-Netzwerk verwendet:
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
Erstellen Sie in Cloud Shell ein Subnetz für die l3-Apache-Instanz:
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
Cloud Router und NAT-Konfiguration
In der Anleitung wird Cloud NAT für die Installation von Softwarepaketen verwendet, da die VM-Instanz keine externe IP-Adresse hat.
Erstellen Sie den Cloud Router in Cloud Shell.
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
Erstellen Sie das NAT-Gateway in Cloud Shell.
gcloud compute routers nats create cloud-nat-l3 --router=l3-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
l3-apache-Instanz erstellen
Im folgenden Abschnitt erstellen Sie die l3-Apache-Instanz.
Erstellen Sie die Instanz in Cloud Shell:
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. Multinic-Knotenpool erstellen
Im folgenden Abschnitt erstellen Sie einen Multinic-Knotenpool, der aus den folgenden Flags besteht:
–additional-node-network (erforderlich für Schnittstellen für Gerätetypen)
Beispiel:
--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet
–additional-node-network & –additional-pod-network ( Erforderlich für L3-Schnittstellen)
Beispiel:
--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
Maschinentyp: Berücksichtigen Sie beim Bereitstellen des Knotenpools die Maschinentypabhängigkeit. Beispiel: Ein Maschinentyp wie „e2-standard-4“ mit 4 vCPUs unterstützen insgesamt bis zu 4 VPCs. Beispiel: „netdevice-l3-pod“ hat insgesamt drei Schnittstellen (Standard, netdevice und l3). Der in dieser Anleitung verwendete Maschinentyp ist also „e2-standard-4“.
Erstellen Sie in Cloud Shell den Knotenpool mit einem Gerätetyp und 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. multnic-node-pool validieren
Prüfen Sie in Cloud Shell, ob drei Knoten aus dem multinic-node-pool generiert werden:
kubectl get nodes
Beispiel:
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. netdevice-network erstellen
In den folgenden Schritten generieren Sie ein Kubernetes-Objekt vom Typ „Network“ und „GKENetworkParamSet“, um das Netzwerk „netdevice-network“ zu erstellen, das in späteren Schritten zum Verknüpfen von Pods verwendet wird.
Objekt „netdevice-network“ erstellen
Erstellen Sie in Cloud Shell das Netzwerkobjekt-YAML netdevice-network.yaml mit dem VI-Editor oder Nano. Auf der Route nach ist das Subnetz 172.16.10.0/28 (netdevice-apache) im 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"
Wenden Sie in Cloud Shell die Datei netdevice-network.yaml an:
kubectl apply -f netdevice-network.yaml
Prüfen Sie in Cloud Shell, ob der Statustyp „netdevice-network“ auf „Bereit“ gesetzt ist.
kubectl describe networks netdevice-network
Beispiel:
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>
GKENetworkParamSet erstellen
Erstellen Sie in Cloud Shell die Netzwerkobjekt-YAML-Datei netdevice-network-parm.yaml mit dem VI-Editor oder mit Nano. Die Spezifikation ist der Subnetzbereitstellung „netdevice-vpc“ zugeordnet.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "netdevice"
spec:
vpc: "netdevice-vpc"
vpcSubnet: "netdevice-subnet"
deviceMode: "NetDevice"
Wenden Sie in Cloud Shell netdevice-network-parm.yaml an.
kubectl apply -f netdevice-network-parm.yaml
Prüfen Sie in Cloud Shell den Statusgrund für netdevice-network „GNPParmsReady“ und „NetworkReady“:
kubectl describe networks netdevice-network
Beispiel:
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>
Prüfen Sie in Cloud Shell den CIDR-Block gkenetworkparamset 192.168.10.0/24, der in einem späteren Schritt für die Pod(s)-Schnittstelle verwendet wird.
kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Beispiel:
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. L3-Netzwerke erstellen
In den folgenden Schritten generieren Sie ein Kubernetes-Objekt vom Typ „Network“ und „GKENetworkParamSet“, um das l3-Netzwerk zu erstellen, das in späteren Schritten zum Verknüpfen von Pods verwendet wird.
L3-Netzwerkobjekt erstellen
Erstellen Sie in Cloud Shell die Netzwerkobjekt-YAML-Datei „l3-network.yaml“ mit dem VI-Editor oder mit Nano. Auf der Route nach ist das Subnetz 172.16.20.0/28 (l3-apache) im 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"
Wenden Sie in Cloud Shell die Datei l3-network.yaml an:
kubectl apply -f l3-network.yaml
Prüfen Sie in Cloud Shell, ob der Statustyp „l3-network“ „Bereit“ lautet.
kubectl describe networks l3-network
Beispiel:
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>
GKENetworkParamSet erstellen
Erstellen Sie in Cloud Shell die Netzwerkobjekt-YAML-Datei l3-network-parm.yaml mit dem VI-Editor oder mit Nano. Die Spezifikation ist der l3-vpc-Subnetzbereitstellung zugeordnet.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "l3-network"
spec:
vpc: "l3-vpc"
vpcSubnet: "l3-subnet"
podIPv4Ranges:
rangeNames:
- "sec-range-l3-subnet"
Wenden Sie in Cloud Shell die Datei l3-network-parm.yaml an.
kubectl apply -f l3-network-parm.yaml
Prüfen Sie in Cloud Shell, ob der Statusgrund des l3-Netzwerks „GNPParmsReady“ und „NetworkReady“ lautet:
kubectl describe networks l3-network
Beispiel:
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>
Prüfen Sie in Cloud Shell den CIDR 10.0.8.0/21 des gkenetworkparamset-l3-Netzwerks, der zum Erstellen der Pod-Schnittstelle verwendet wurde.
kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Beispiel:
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. netdevice-l3-pod erstellen
Im folgenden Abschnitt erstellen Sie die netdevice-l3-pod Runningstavebox, die als "Schweizer Armeemesser" bezeichnet wird. die mehr als 300 häufige Befehle unterstützt. Der Pod ist so konfiguriert, dass er über eth1 mit dem l3-vpc und über eth2 mit netdevice-vpc kommuniziert.
Erstellen Sie in Cloud Shell den ausgelasteten Box-Container mit dem Namen netdevice-l3-pod.yaml mithilfe des VI-Editors oder 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
Wenden Sie in Cloud Shell netdevice-l3-pod.yaml an.
kubectl apply -f netdevice-l3-pod.yaml
Erstellung des netdevice-l3-Pods validieren
Prüfen Sie in Cloud Shell, ob der netdevice-l3-pod ausgeführt wird:
kubectl get pods netdevice-l3-pod
Beispiel:
user@$ kubectl get pods netdevice-l3-pod
NAME READY STATUS RESTARTS AGE
netdevice-l3-pod 1/1 Running 0 74s
Prüfen Sie in Cloud Shell die IP-Adressen, die den Pod-Schnittstellen zugewiesen sind.
kubectl get pods netdevice-l3-pod -o yaml
Im vorliegenden Beispiel enthält das Feld networking.gke.io/pod-ips die IP-Adressen, die den Pod-Schnittstellen aus „l3-network“ und „netdevice-network“ zugeordnet sind. Die Standard-Netzwerk-IP-Adresse 10.0.1.22 wird unter podIPs angegeben:
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"
netdevice-l3-pod-Routen validieren
Validieren Sie in Cloud Shell die Routen zu netdevice-vpc und l3-vpc von netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
Erstellen Sie die Instanz und validieren Sie die Pod-Schnittstellen:
ifconfig
Im Beispiel ist eth0 mit dem Standardnetzwerk verbunden, eth1 mit dem l3-network und eth2 mit dem 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)
Validieren Sie im Pod "netdevice-l3-pod" die Routen zu "netdevice-vpc" (172.16.10.0/28) und "l3-vpc" (172.16.20.0/28).
Erstellen Sie die Instanz und validieren Sie die Pod-Routen:
ip route
Beispiel:
/ # 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
Beenden Sie den Pod aus der Instanz, um zu Cloud Shell zurückzukehren.
exit
12. l3-Pod erstellen
Im folgenden Abschnitt erstellen Sie das „L3-Pod-Laufgerät“ mit dem Namen „Schweizer Armeemesser“. die mehr als 300 häufige Befehle unterstützt. Der Pod ist so konfiguriert, dass er nur über eth1 mit dem l3-vpc kommuniziert.
Erstellen Sie in Cloud Shell den ausgelasteten Box-Container mit dem Namen l3-pod.yaml mithilfe des VI-Editors oder 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
Wenden Sie in Cloud Shell l3-pod.yaml an.
kubectl apply -f l3-pod.yaml
Erstellung von l3-Pods validieren
Prüfen Sie in Cloud Shell, ob der netdevice-l3-pod ausgeführt wird:
kubectl get pods l3-pod
Beispiel:
user@$ kubectl get pods l3-pod
NAME READY STATUS RESTARTS AGE
l3-pod 1/1 Running 0 52s
Prüfen Sie in Cloud Shell die IP-Adressen, die den Pod-Schnittstellen zugewiesen sind.
kubectl get pods l3-pod -o yaml
Im vorliegenden Beispiel enthält das Feld networking.gke.io/pod-ips die IP-Adressen, die den Pod-Schnittstellen aus dem L3-Netzwerk zugeordnet sind. Die Standard-Netzwerk-IP-Adresse 10.0.2.12 wird unter podIPs angegeben:
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"
l3-Pod-Routen validieren
Validieren Sie in Cloud Shell die Routen zum l3-vpc von netdevice-l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
Erstellen Sie die Instanz und validieren Sie die Pod-Schnittstellen:
ifconfig
Im Beispiel ist „eth0“ mit dem Standardnetzwerk und „eth1“ mit dem „l3-network“ verbunden.
/ # 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)
Validieren Sie die Routen zum L3-Pod vom l3-Pod (172.16.20.0/28).
Erstellen Sie die Instanz und validieren Sie die Pod-Routen:
ip route
Beispiel:
/ # 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)
Beenden Sie den Pod aus der Instanz, um zu Cloud Shell zurückzukehren.
exit
13. Firewall-Updates
Um Verbindungen vom GKE-Multicnic-Pool zu den Firewallregeln „netdevice-vpc“ und „l3-vpc“ für eingehenden Traffic zuzulassen, sind erforderlich. Sie erstellen Firewallregeln, die den Quellbereich als Pod-Netzwerksubnetz angeben, z.B. netdevice-subnet, sec-range-l3-subnet.
Beispiel: Der kürzlich erstellte Container „l3-pod“ und die eth2-Schnittstelle 10.0.8.22 (zugewiesen aus dem sec-range-l3-subnet) ist die Quell-IP-Adresse, wenn eine Verbindung zur l3-apache-Instanz im l3-vpc hergestellt wird.
netdevice-vpc: Von netdevice-subnet an netdevice-apache zulassen
Erstellen Sie in Cloud Shell die Firewallregel im netdevice-vpc, die dem netdevice-subnet-Zugriff auf die netdevice-apache-Instanz ermöglicht.
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: Zulassen von sec-range-l3-subnet zu l3-apache
Erstellen Sie in Cloud Shell die Firewallregel im l3-vpc, die dem sec-range-l3-subnet den Zugriff auf die l3-Apache-Instanz ermöglicht.
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. Pod-Konnektivität validieren
Im folgenden Abschnitt überprüfen Sie die Verbindung zu den Apache-Instanzen vom netdevice-l3-pod und l3-pod aus. Melden Sie sich dazu bei den Pods an und führen Sie wget -S aus, um einen Download der Apache-Server-Startseite zu validieren. Da der Pod "netdevice-l3-pod" mit Schnittstellen aus "netdevice-network" und "l3-network" konfiguriert ist, ist eine Verbindung zu den Apache-Servern in "netdevice-vpc" und "l3-vpc" möglich.
Beim Ausführen von „wget -S“ vom l3-Pod ist dagegen keine Verbindung zum Apache-Server in „netdevice-vpc“ möglich, da der l3-Pod nur mit einer Schnittstelle aus dem l3-Netzwerk konfiguriert ist.
Apache Server-IP-Adresse abrufen
Rufen Sie in der Cloud Console die IP-Adresse der Apache-Server ab. Gehen Sie dazu zu „Compute Engine“ → „VM-Instanzen“.
Konnektivitätstest von netdevice-l3-pod zu netdevice-apache
Melden Sie sich in Cloud Shell bei netdevice-l3-pod an:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
Führen Sie vom Container aus einen Ping an die Instanz von netdevice-apache basierend auf der IP-Adresse aus, die Sie im vorherigen Schritt erhalten haben.
ping <insert-your-ip> -c 4
Beispiel:
/ # 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
/ #
Führen Sie in Cloud Shell den Befehl „wget -S“ für die netdevice-apache-Instanz aus, basierend auf der IP-Adresse, die Sie im vorherigen Schritt erhalten haben. „200 OK“ zeigt an, dass die Webseite erfolgreich heruntergeladen wurde.
wget -S <insert-your-ip>
Beispiel:
/ # 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
/ #
Konnektivitätstest von netdevice-l3-pod zu l3-apache
Führen Sie in Cloud Shell einen Ping an die l3-Apache-Instanz basierend auf der IP-Adresse aus, die Sie im vorherigen Schritt erhalten haben.
ping <insert-your-ip> -c 4
Beispiel:
/ # 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
/ #
Löschen Sie in Cloud Shell die vorherige Datei „index.html“ und führen Sie die Instanz „wget -S to l3-apache“ anhand der IP-Adresse aus, die Sie im vorherigen Schritt erhalten haben. „200 OK“ zeigt an, dass die Webseite erfolgreich heruntergeladen wurde.
rm index.html
wget -S <insert-your-ip>
Beispiel:
/ # 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
Beenden Sie den Pod aus der Instanz, um zu Cloud Shell zurückzukehren.
exit
Konnektivitätstest von l3-pod zu netdevice-apache
Melden Sie sich in Cloud Shell bei l3-pod an:
kubectl exec --stdin --tty l3-pod -- /bin/sh
Führen Sie vom Container aus einen Ping an die Instanz von netdevice-apache basierend auf der IP-Adresse aus, die Sie im vorherigen Schritt erhalten haben. Da der l3-Pod keine Schnittstelle hat, die mit „netdevice-network“ verknüpft ist, schlägt der Ping fehl.
ping <insert-your-ip> -c 4
Beispiel:
/ # 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
Optional: Führen Sie in Cloud Shell den Befehl „wget -S“ für die Instanz „netdevice-apache“ aus, basierend auf der IP-Adresse, die Sie im vorherigen Schritt erhalten haben, wodurch das Zeitlimit überschritten wird.
wget -S <insert-your-ip>
Beispiel:
/ # 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
Konnektivitätstest vom l3-pod zu l3-apache
Führen Sie in Cloud Shell einen Ping an die l3-Apache-Instanz basierend auf der IP-Adresse aus, die Sie im vorherigen Schritt erhalten haben.
ping <insert-your-ip> -c 4
Beispiel:
/ # 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
/ #
Führen Sie in Cloud Shell den Befehl „wget -S“ für die l3-Apache-Instanz anhand der IP-Adresse aus, die Sie im vorherigen Schritt erhalten haben. „200 OK“ zeigt an, dass die Webseite erfolgreich heruntergeladen wurde.
wget -S <insert-your-ip>
Beispiel:
/ # 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. Firewalllogs
Durch das Logging der Firewallregeln können Sie die Auswirkungen Ihrer Firewallregeln überwachen, überprüfen und analysieren. Sie können beispielsweise feststellen, ob eine Firewallregel zum Ablehnen von Traffic wie vorgesehen funktioniert. Das Logging von Firewallregeln ist auch nützlich, wenn Sie ermitteln müssen, wie viele Verbindungen von einer bestimmten Firewallregel betroffen sind.
In dieser Anleitung haben Sie das Firewall-Logging beim Erstellen der Firewallregeln für eingehenden Traffic aktiviert. Werfen wir einen Blick auf die Informationen aus den Logs.
Gehen Sie in der Cloud Console zu „Logging“ → „Log-Explorer“.
Fügen Sie die Abfrage unten wie im Screenshot ein und wählen Sie „Abfrage ausführen“ jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") aus.
Bei genauerer Betrachtung einer Aufnahme erhalten Sicherheitsadministratoren Informationselemente. einschließlich Quell- und Ziel-IP-Adresse, Port, Protokoll und Knotenpoolname.
Wenn Sie sich weitere Firewalllogs ansehen möchten, gehen Sie zu „VPC-Netzwerk → Firewall“ → „allow-ingress-from-netdevice-network-to-all-vpc-instances“ und wählen Sie dann „Ansicht“ im Log-Explorer aus.
16. Bereinigen
Löschen Sie in Cloud Shell die Komponenten der Anleitung.
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. Glückwunsch
Herzlichen Glückwunsch! Sie haben das Erstellen eines Multinic-Knotenpools und das Erstellen von Pods, die mit dem Befehl "ownedbox" ausgeführt werden, erfolgreich konfiguriert und validiert, um die L3- und Gerätetypkonnektivität zu Apache-Servern mithilfe von PING und wget zu validieren.
Außerdem haben Sie gelernt, wie Sie mit Firewalllogs Quell- und Zielpakete zwischen den Pod-Containern und Apache-Servern prüfen.
Cosmopup findet die Anleitungen super!