1. Введение
GCP уже давно поддерживает несколько интерфейсов на уровне экземпляра виртуальной машины. Благодаря нескольким интерфейсам виртуальная машина может подключить до 7 новых интерфейсов (по умолчанию + 7 интерфейсов) к различным VPC. GKE Networking теперь распространяет это поведение на модули, работающие на узлах. До появления этой функции кластеры GKE позволяли всем NodePools иметь только один интерфейс и, следовательно, сопоставляться с одним VPC. Благодаря функции «Мультисеть на модулях» пользователь теперь может включить более одного интерфейса на узлах и для модулей в кластере GKE.
Что ты построишь
В этом руководстве вы собираетесь создать комплексную многопользовательскую среду GKE, которая иллюстрирует варианты использования, показанные на рисунке 1.
- Создайте netdevice-l3-pod, используя busybox, чтобы:
- Выполните PING & wget -S для экземпляра netdevice-apache в netdevice-vpc через eth2.
- Выполните PING & wget -S для экземпляра l3-apache в l3-vpc через eth1.
- Создайте l3-pod, используя busybox для выполнения PING & wget -S для экземпляра l3-apache через eth1.
В обоих случаях интерфейс модуля eth0 подключен к сети по умолчанию.
Рисунок 1
Что вы узнаете
- Как создать подсеть типа l3
- Как создать подсеть типа netdevice
- Как создать многопроцессорный пул узлов GKE
- Как создать модуль с возможностями netdevice и l3
- Как создать под с возможностями l3
- Как создать и проверить сеть объектов GKE
- Как проверить подключение к удаленным серверам Apache с помощью журналов PING, wget и брандмауэра
Что вам понадобится
- Облачный проект Google
2. Терминология и понятия
Первичный VPC. Первичный VPC — это предварительно настроенный VPC, который поставляется с набором настроек и ресурсов по умолчанию. В этом VPC создается кластер GKE.
Подсеть. В Google Cloud подсеть — это способ создания бесклассовой междоменной маршрутизации (CIDR) с сетевыми масками в VPC. Подсеть имеет один основной диапазон IP-адресов, который назначается узлам, и может иметь несколько вторичных диапазонов, которые могут принадлежать модулям и службам.
Сеть узла: Сеть узла представляет собой выделенную комбинацию пары VPC и подсети. В этой сети узлов узлам, принадлежащим к пулу узлов, назначаются IP-адреса из основного диапазона IP-адресов.
Вторичный диапазон. Вторичный диапазон Google Cloud — это CIDR и сетевая маска, принадлежащие региону в VPC. GKE использует это как сеть Pod уровня 3. VPC может иметь несколько дополнительных диапазонов, а модуль Pod может подключаться к нескольким сетям Pod.
Сеть (L3 или устройство): сетевой объект, который служит точкой подключения для модулей. В руководстве используются сети l3-network и netdevice-network, где устройством может быть либо netdevice, либо dpdk. Сеть по умолчанию является обязательной и создается при создании кластера на основе подсети default-nodepool.
Сети уровня 3 соответствуют вторичному диапазону в подсети, представленному как:
VPC -> Имя подсети -> Имя вторичного диапазона
Сеть устройств соответствует подсети в VPC, представленной как:
VPC -> Имя подсети
Сеть подов по умолчанию: Google Cloud создает сеть подов по умолчанию во время создания кластера. Сеть Pod по умолчанию использует основной VPC в качестве сети узлов. Сеть подов по умолчанию доступна на всех узлах кластера и подах по умолчанию.
Поды с несколькими интерфейсами. Поды с несколькими интерфейсами в GKE не могут подключаться к одной и той же сети подов, поскольку каждый интерфейс пода должен быть подключен к уникальной сети.
Обновите проект для поддержки лаборатории кода.
В этом Codelab используются переменные $variables для облегчения реализации конфигурации gcloud в Cloud Shell.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Первичная настройка VPC
Создайте основной VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
Создайте узел и дополнительные подсети.
Внутри Cloud Shell выполните следующие действия:
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
Создайте частный кластер GKE, указав подсети первичного vpc, чтобы создать пул узлов по умолчанию с необходимыми флагами –enable-multi-networking и –enable-dataplane-v2 для поддержки пулов узлов с несколькими компьютерами.
Внутри Cloud Shell создайте кластер 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
Проверка кластера multinic-gke
Внутри Cloud Shell выполните аутентификацию в кластере:
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
Внутри Cloud Shell убедитесь, что из пула по умолчанию созданы два узла:
kubectl get nodes
Пример:
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. настройка netdevice-vpc
Создайте сеть netdevice-vpc.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
Создайте подсети netdevice-vpc.
Внутри Cloud Shell создайте подсеть, используемую для 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
Внутри Cloud Shell создайте подсеть для экземпляра 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
Облачный маршрутизатор и конфигурация NAT
Cloud NAT используется в руководстве для установки пакета программного обеспечения, поскольку экземпляр виртуальной машины не имеет внешнего IP-адреса.
Внутри Cloud Shell создайте облачный маршрутизатор.
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
Внутри Cloud Shell создайте шлюз 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
Создайте экземпляр netdevice-apache.
В следующем разделе вы создадите экземпляр netdevice-apache.
Внутри 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
Создайте сеть l3-vpc.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
Создайте подсети l3-vpc.
В Cloud Shell создайте подсеть основного и дополнительного диапазона. Вторичный диапазон (sec-range-l3-subnet) используется для многопользовательской сети l3:
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
Внутри Cloud Shell создайте подсеть для экземпляра 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
Облачный маршрутизатор и конфигурация NAT
Cloud NAT используется в руководстве для установки пакета программного обеспечения, поскольку экземпляр виртуальной машины не имеет внешнего IP-адреса.
Внутри Cloud Shell создайте облачный маршрутизатор.
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
Внутри Cloud Shell создайте шлюз 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
Создайте экземпляр l3-apache.
В следующем разделе вы создадите экземпляр l3-apache.
Внутри 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. Создайте многопользовательский пул узлов.
В следующем разделе вы создадите многопользовательский пул узлов, состоящий из следующих флагов:
–additional-node-network (требуется для интерфейсов типа устройства)
Пример:
--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet
–additional-node-network & –additional-pod-network (требуется для интерфейсов типа L3)
Пример:
--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
Тип машины. При развертывании пула узлов учитывайте зависимость от типа машины. Например, такой тип машины, как «e2-standard-4» с 4 виртуальными ЦП, может поддерживать всего до 4 VPC. Например, netdevice-l3-pod будет иметь всего 3 интерфейса (по умолчанию, netdevice и l3), поэтому в руководстве используется тип машины e2-standard-4.
Внутри Cloud Shell создайте пул узлов, состоящий из устройства типа и уровня 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. Проверка многоузлового пула
В Cloud Shell проверьте, что из пула с несколькими узлами создаются три узла:
kubectl get nodes
Пример:
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.
На следующих шагах вы создадите объект Kubernetes Network и GKENetworkParamSet для создания сети netdevice-network, которая будет использоваться для связывания модулей Pod на последующих этапах.
Создайте объект netdevice-network.
Внутри Cloud Shell создайте сетевой объект YAML netdevice-network.yaml с помощью редактора VI или nano. Обратите внимание, что «маршруты до» — это подсеть 172.16.10.0/28 (netdevice-apache) в файле 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"
Внутри Cloud Shell примените netdevice-network.yaml:
kubectl apply -f netdevice-network.yaml
В Cloud Shell убедитесь, что тип состояния netdevice-network готов.
kubectl describe networks netdevice-network
Пример:
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.
Внутри Cloud Shell создайте сетевой объект YAML netdevice-network-parm.yaml с помощью редактора VI или nano. Спецификация соответствует развертыванию подсети netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "netdevice"
spec:
vpc: "netdevice-vpc"
vpcSubnet: "netdevice-subnet"
deviceMode: "NetDevice"
Внутри Cloud Shell примените netdevice-network-parm.yaml.
kubectl apply -f netdevice-network-parm.yaml
В Cloud Shell проверьте причину состояния netdevice-network GNPParmsReady и NetworkReady:
kubectl describe networks netdevice-network
Пример:
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>
На следующем этапе внутри Cloud Shell проверьте блок CIDR gkenetworkparamset 192.168.10.0/24, используемый для интерфейса модулей.
kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Пример:
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.
На следующих шагах вы создадите объект Kubernetes Network и GKENetworkParamSet для создания сети l3, которая будет использоваться для связывания модулей на последующих шагах.
Создайте сетевой объект l3.
Внутри Cloud Shell создайте сетевой объект YAML l3-network.yaml с помощью редактора VI или nano. Обратите внимание, что «маршруты до» — это подсеть 172.16.20.0/28 (l3-apache) в 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"
Внутри Cloud Shell примените l3-network.yaml:
kubectl apply -f l3-network.yaml
В Cloud Shell убедитесь, что тип состояния сети l3 — «Готов».
kubectl describe networks l3-network
Пример:
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.
Внутри Cloud Shell создайте сетевой объект YAML l3-network-parm.yaml с помощью редактора VI или nano. Обратите внимание, что спецификации соответствуют развертыванию подсети 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"
Внутри Cloud Shell примените l3-network-parm.yaml.
kubectl apply -f l3-network-parm.yaml
В Cloud Shell проверьте, что причина состояния сети l3 — GNPParmsReady и NetworkReady:
kubectl describe networks l3-network
Пример:
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>
В Cloud Shell проверьте gkenetworkparamset l3-network CIDR 10.0.8.0/21, используемый для создания интерфейса модуля.
kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Пример:
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.
В следующем разделе вы создадите под управлением netdevice-l3-pod, известный как «швейцарский армейский нож», который поддерживает более 300 распространенных команд. Модуль настроен для связи с l3-vpc, используя eth1, и netdevice-vpc, используя eth2.
Внутри Cloud Shell создайте контейнер занятого поля с именем netdevice-l3-pod.yaml с помощью редактора VI или 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
Внутри Cloud Shell примените netdevice-l3-pod.yaml.
kubectl apply -f netdevice-l3-pod.yaml
Проверка создания netdevice-l3-pod
В Cloud Shell убедитесь, что netdevice-l3-pod запущен:
kubectl get pods netdevice-l3-pod
Пример:
user@$ kubectl get pods netdevice-l3-pod
NAME READY STATUS RESTARTS AGE
netdevice-l3-pod 1/1 Running 0 74s
В Cloud Shell проверьте IP-адреса, назначенные интерфейсам модулей.
kubectl get pods netdevice-l3-pod -o yaml
В приведенном примере поле networking.gke.io/pod-ips содержит IP-адреса, связанные с интерфейсами модулей из сетей l3 и netdevice-network. Сетевой IP-адрес по умолчанию 10.0.1.22 подробно описан в разделе 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"
Проверка маршрутов netdevice-l3-pod
В Cloud Shell проверьте маршруты к netdevice-vpc и l3-vpc из netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
Сформируем экземпляр, проверим интерфейсы пода:
ifconfig
В этом примере eth0 подключен к сети по умолчанию, eth1 подключен к сети l3, а eth2 подключен к сети netdevice.
/ # 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)
На netdevice-l3-pod проверьте маршруты к netdevice-vpc (172.16.10.0/28) и l3-vpc (172.16.20.0/28).
Сформируйте экземпляр, проверьте маршруты пода:
ip route
Пример:
/ # 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
Чтобы вернуться в облачную оболочку, выйдите из модуля из экземпляра.
exit
12. Создайте l3-под
В следующем разделе вы создадите модуль l3, работающий с busybox, известный как «швейцарский армейский нож», который поддерживает более 300 распространенных команд. Модуль настроен для связи с l3-vpc только с использованием eth1.
Внутри Cloud Shell создайте контейнер занятого поля с именем l3-pod.yaml с помощью редактора VI или 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
Внутри Cloud Shell примените l3-pod.yaml.
kubectl apply -f l3-pod.yaml
Проверка создания l3-pod
В Cloud Shell убедитесь, что netdevice-l3-pod запущен:
kubectl get pods l3-pod
Пример:
user@$ kubectl get pods l3-pod
NAME READY STATUS RESTARTS AGE
l3-pod 1/1 Running 0 52s
В Cloud Shell проверьте IP-адреса, назначенные интерфейсам модулей.
kubectl get pods l3-pod -o yaml
В приведенном примере поле networking.gke.io/pod-ips содержит IP-адреса, связанные с интерфейсами модулей из сети l3. Сетевой IP-адрес по умолчанию 10.0.2.12 подробно описан в разделе 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"
Проверка маршрутов l3-pod
Внутри Cloud Shell проверьте маршруты к l3-vpc от netdevice-l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
Сформируем экземпляр, проверим интерфейсы пода:
ifconfig
В примере eth0 подключен к сети по умолчанию, eth1 подключен к l3-сети.
/ # 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)
Из модуля l3 проверьте маршруты к l3-vpc (172.16.20.0/28).
Сформируйте экземпляр, проверьте маршруты пода:
ip route
Пример:
/ # 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)
Чтобы вернуться в облачную оболочку, выйдите из модуля из экземпляра.
exit
13. Обновления брандмауэра
Чтобы разрешить подключение из мультиcnic-пула GKE к netdevice-vpc и l3-vpc, необходимы правила входящего брандмауэра. Вы создадите правила брандмауэра, указав исходный диапазон в качестве подсети сети модуля, например netdevice-subnet, sec-range-l3-subnet.
Например, недавно созданный контейнер l3-pod, интерфейс eth2 10.0.8.22 (выделенный из подсети sec-range-l3-subnet) является исходным IP-адресом при подключении к экземпляру l3-apache в l3-vpc.
netdevice-vpc: разрешить переход из подсети netdevice в netdevice-apache
В Cloud Shell создайте правило брандмауэра в файле netdevice-vpc, разрешающее доступ netdevice-subnet к экземпляру 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: разрешить переход из подсети sec-range-l3 в l3-apache
Внутри Cloud Shell создайте правило брандмауэра в l3-vpc, разрешающее доступ подсети sec-range-l3-subnet к экземпляру 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. Проверка подключения модуля
В следующем разделе вы проверите подключение к экземплярам Apache из netdevice-l3-pod и l3-pod, войдя в модули и запустив wget -S, который проверяет загрузку домашней страницы серверов Apache. Поскольку netdevice-l3-pod настроен с использованием интерфейсов netdevice-network и l3-network, возможно подключение к серверам Apache в netdevice-vpc и l3-vpc.
Напротив, при выполнении wget -S из модуля l3 подключение к серверу Apache в netdevice-vpc невозможно, поскольку модуль l3 настроен только на интерфейс из сети l3.
Получить IP-адрес сервера Apache
В Cloud Console получите IP-адрес серверов Apache, перейдя в раздел Compute Engine → Экземпляры виртуальных машин.
тест подключения netdevice-l3-pod к netdevice-apache
Внутри Cloud Shell войдите в netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
Из контейнера выполните проверку связи с экземпляром netdevice-apache на основе IP-адреса, полученного на предыдущем шаге.
ping <insert-your-ip> -c 4
Пример:
/ # 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
/ #
Внутри Cloud Shell выполните wget -S для экземпляра netdevice-apache на основе IP-адреса, полученного на предыдущем шаге. 200 OK указывает на успешную загрузку веб-страницы.
wget -S <insert-your-ip>
Пример:
/ # 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
/ #
тест подключения netdevice-l3-pod к l3-apache
Внутри Cloud Shell выполните проверку связи с экземпляром l3-apache на основе IP-адреса, полученного на предыдущем шаге.
ping <insert-your-ip> -c 4
Пример:
/ # 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
/ #
В Cloud Shell удалите предыдущий файл index.html и выполните экземпляр wget -S для l3-apache на основе IP-адреса, полученного на предыдущем шаге. 200 OK указывает на успешную загрузку веб-страницы.
rm index.html
wget -S <insert-your-ip>
Пример:
/ # 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
Чтобы вернуться в облачную оболочку, выйдите из модуля из экземпляра.
exit
тест подключения l3-pod к netdevice-apache
Внутри Cloud Shell войдите в l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
Из контейнера выполните проверку связи с экземпляром netdevice-apache на основе IP-адреса, полученного на предыдущем шаге. Поскольку у l3-pod нет интерфейса, связанного с сетью netdevice, пинг не удастся.
ping <insert-your-ip> -c 4
Пример:
/ # 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
Необязательно: внутри Cloud Shell выполните wget -S для экземпляра netdevice-apache на основе IP-адреса, полученного на предыдущем шаге, время ожидания которого истекает.
wget -S <insert-your-ip>
Пример:
/ # 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
тест подключения l3-pod к l3-apache
Внутри Cloud Shell выполните проверку связи с экземпляром l3-apache на основе IP-адреса, полученного на предыдущем шаге.
ping <insert-your-ip> -c 4
Пример:
/ # 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
/ #
Внутри Cloud Shell выполните экземпляр wget -S для l3-apache на основе IP-адреса, полученного на предыдущем шаге. 200 OK указывает на успешную загрузку веб-страницы.
wget -S <insert-your-ip>
Пример:
/ # 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. Журналы брандмауэра
Ведение журнала правил брандмауэра позволяет выполнять аудит, проверку и анализ воздействия правил брандмауэра. Например, вы можете определить, работает ли правило брандмауэра, предназначенное для запрета трафика, должным образом. Ведение журнала правил брандмауэра также полезно, если вам нужно определить, на сколько соединений влияет определенное правило брандмауэра.
В этом руководстве вы включили ведение журнала брандмауэра при создании правил входящего брандмауэра. Давайте посмотрим на информацию, полученную из логов.
В Cloud Console перейдите в «Журналирование» → «Обозреватель журналов».
Вставьте запрос ниже, как показано на снимке экрана, и выберите «Выполнить запрос jsonPayload.rule_details.reference:(»network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances»)
Более пристальный взгляд на захват предоставляет администраторам безопасности элементы информации; начиная от IP-адреса источника и назначения, порта, протокола и имени пула узлов.
Чтобы просмотреть дополнительные журналы брандмауэра, перейдите в «Сеть VPC» → «Брандмауэр» → «разрешить вход из сети-устройства-сети-ко-всем-экземплярам-vpc», затем выберите «Просмотр» в обозревателе журналов.
16. Очистка
Из Cloud Shell удалите компоненты учебника.
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. Поздравления
Поздравляем, вы успешно настроили и подтвердили создание многопользовательского пула узлов и создание модулей под управлением busybox для проверки подключения L3 и типа устройства к серверам Apache с помощью PING и wget.
Вы также узнали, как использовать журналы брандмауэра для проверки исходных и целевых пакетов между контейнерами Pod и серверами Apache.
Cosmopup считает, что уроки потрясающие!!