Implante e valide várias redes do GKE NFO e Interface de alto desempenho

1. Introdução

Há muito tempo, o GCP é compatível com várias interfaces no nível da instância de VM. Com várias interfaces, uma VM pode conectar até sete novas interfaces (padrão + sete interfaces) a diferentes VPCs. A rede do GKE agora amplia esse comportamento para os pods em execução nos nós. Antes desse recurso, os clusters do GKE permitiam que todos os NodePools tivessem apenas uma interface e, portanto, fossem mapeados para uma única VPC. Com o recurso de várias redes em pods, um usuário agora pode ativar mais de uma interface em nós e para pods em um cluster do GKE.

O que você vai criar

Neste tutorial, você vai criar um ambiente multinic do GKE abrangente que ilustra os casos de uso ilustrados na Figura 1.

  1. Crie o netdevice-l3-pod usando o Speakeasybox para:
  2. Executar uma PING e wget -S para a instância netdevice-apache no netdevice-vpc sobre eth2
  3. Executar uma PING e Instância de wget -S para l3-apache em l3-vpc sobre eth1
  4. Crie um L3-pod usando o Memcached para executar uma PING e wget -S para instância l3-apache sobre eth1

Em ambos os casos de uso, a interface eth0 do pod está conectada à rede padrão.

Figura 1.

9d93019ee608587f.png

O que você vai aprender

  • Como criar uma sub-rede do tipo l3
  • Como criar uma sub-rede do tipo netdevice
  • Como estabelecer um pool de nós do GKE com várias NICs
  • Como criar um pod com os recursos netdevice e l3
  • Como criar um pod com recursos l3
  • Como criar e validar uma rede de objetos do GKE
  • Como validar a conectividade com servidores Apache remotos usando registros de PING, wget e Firewall

O que é necessário

  • Projeto do Google Cloud

2. Terminologia e conceitos

VPC primária: a VPC primária é uma VPC pré-configurada com um conjunto de configurações e recursos padrão. O cluster do GKE é criado nessa VPC.

Sub-rede: no Google Cloud, uma sub-rede é a maneira de criar o roteamento entre domínios sem classe (CIDR) com máscaras de rede em uma VPC. Uma sub-rede tem um único intervalo de endereços IP primários que é atribuído aos nós e pode ter vários intervalos secundários que podem pertencer a pods e serviços.

Rede do nó: a rede do nó se refere a uma combinação dedicada de um par de VPC e sub-rede. Dentro dessa rede de nós, os nós que pertencem ao pool recebem endereços IP do intervalo de endereços IP principal.

Intervalo secundário: um intervalo secundário do Google Cloud é um CIDR e uma máscara de rede pertencentes a uma região em uma VPC. O GKE usa isso como uma rede de pod de camada 3. Uma VPC pode ter vários intervalos secundários e um pod pode se conectar a várias redes de pods.

Rede (L3 ou dispositivo): um objeto de rede que serve como ponto de conexão para pods. Neste tutorial, as redes são l3-network e netdevice-network, em que o dispositivo pode ser netdevice ou dpdk. A rede padrão é obrigatória e criada na criação do cluster com base na sub-rede default-nodepool.

As redes da camada 3 correspondem a um intervalo secundário em uma sub-rede, representado como:

VPC -> Nome da sub-rede -> Nome do intervalo secundário

A rede de dispositivos corresponde a uma sub-rede em uma VPC, representada como:

VPC -> Nome da sub-rede

Pod-network padrão: o Google Cloud cria uma rede de pods padrão durante a criação do cluster. A rede de pods padrão usa a VPC primária como a rede do nó. A rede de pods padrão está disponível por padrão em todos os nós e pods do cluster.

Pods com várias interfaces: pods com várias interfaces no GKE não podem se conectar à mesma rede de pods porque cada interface do pod precisa estar conectada a uma rede exclusiva.

Atualizar o projeto para oferecer suporte ao codelab

Este codelab usa $variables para ajudar na implementação da configuração da gcloud no Cloud Shell.

No Cloud Shell, faça o seguinte:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. Configuração da VPC principal

Crie a VPC primária

No Cloud Shell, faça o seguinte:

gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom

Crie o nó e as sub-redes secundárias

No Cloud Shell, faça o seguinte:

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. Criação de cluster do GKE

Criar o cluster particular do GKE especificando as sub-redes primary-vpc para criar o pool de nós padrão com as flags necessárias –enable-multi-networking e –enable-dataplane-v2 para dar suporte a pools de nós multi-nic.

No Cloud Shell, crie o cluster do 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

Validar o cluster multinic-gke

No Cloud Shell, autentique com o cluster:

gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid

No Cloud Shell, confirme se dois nós foram gerados a partir do pool padrão:

kubectl get nodes

Exemplo:

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. Configuração do netdevice-vpc

Criar a rede netdevice-vpc

No Cloud Shell, faça o seguinte:

gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom

Crie as sub-redes netdevice-vpc

No Cloud Shell, crie a sub-rede usada para a rede 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

No Cloud Shell, crie uma sub-rede para a instância 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

Configuração do Cloud Router e NAT

O Cloud NAT é usado no tutorial de instalação do pacote de software porque a instância de VM não tem um endereço IP externo.

No Cloud Shell, crie o roteador de nuvem.

gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1

No Cloud Shell, crie o gateway 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

Criar a instância netdevice-apache

Na seção a seguir, você vai criar a instância netdevice-apache.

No Cloud Shell, crie a instância:

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. Configuração de l3-vpc

Criar a rede l3-vpc

No Cloud Shell, faça o seguinte:

gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom

Crie as sub-redes l3-vpc

No Cloud Shell, crie uma sub-rede de intervalo primário e de intervalo secundário. O secundário-range(sec-range-l3-subnet) é usado para a rede multinic 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

No Cloud Shell, crie uma sub-rede para a instância 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

Configuração do Cloud Router e NAT

O Cloud NAT é usado no tutorial de instalação do pacote de software porque a instância de VM não tem um endereço IP externo.

No Cloud Shell, crie o roteador de nuvem.

gcloud compute routers create l3-cr --network l3-vpc --region us-central1

No Cloud Shell, crie o gateway 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

Crie a instância l3-apache

Na seção a seguir, você vai criar a instância l3-apache.

No Cloud Shell, crie a instância:

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. Criar o pool de nós multinic

Na seção a seguir, você vai criar um pool de nós multinic que consiste nas seguintes flags:

–additional-node-network (obrigatório para interfaces de tipo de dispositivo)

Exemplo:

--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet

–additional-node-network & –additional-pod-network ( obrigatório para interfaces do tipo L3)

Exemplo:

--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

Tipo de máquina: ao implantar o pool de nós, considere a dependência do tipo de máquina. Por exemplo, um tipo de máquina como "e2-standard-4" com 4 vCPUs pode dar suporte a até 4 VPCs no total. Por exemplo, o netdevice-l3-pod terá um total de três interfaces (padrão, netdevice e l3). Portanto, o tipo de máquina usado no tutorial é e2-standard-4.

No Cloud Shell, crie o pool de nós que consiste em um dispositivo do tipo e o 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. Valide o multnic-node-pool

No Cloud Shell, confirme se três nós foram gerados pelo multinic-node-pool:

kubectl get nodes

Exemplo:

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. Criar a netdevice-network

Nas etapas a seguir, você vai gerar um objeto Kubernetes Network e GKENetworkParamSet para criar a rede netdevice-network que será usada para associar pods nas etapas posteriores.

Crie o objeto netdevice-network

No Cloud Shell, crie o objeto de rede YAML netdevice-network.yaml usando o nano ou o editor VI. Observe o campo "encaminha para" é a sub-rede 172.16.10.0/28 (netdevice-apache) no 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"

No Cloud Shell, aplique o netdevice-network.yaml:

kubectl apply -f netdevice-network.yaml 

No Cloud Shell, confirme se o tipo de status de netdevice-network está "Pronto".

kubectl describe networks netdevice-network

Exemplo:

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>

Crie o GKENetworkParamSet

No Cloud Shell, crie o objeto de rede YAML netdevice-network-parm.yaml usando o editor VI ou nano. A especificação é mapeada para a implantação da sub-rede netdevice-vpc.

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
    name: "netdevice"
spec:
    vpc: "netdevice-vpc"
    vpcSubnet: "netdevice-subnet"
    deviceMode: "NetDevice"

No Cloud Shell, aplique netdevice-network-parm.yaml

kubectl apply -f netdevice-network-parm.yaml 

Dentro do Cloud Shell, valide o motivo do status de netdevice-network GNPParmsReady e NetworkReady:

kubectl describe networks netdevice-network

Exemplo:

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>

No Cloud Shell, valide o bloco CIDR gkenetworkparamset 192.168.10.0/24 usado para a interface de pods em uma etapa posterior.

kubectl describe gkenetworkparamsets.networking.gke.io netdevice

Exemplo:

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. Criar as redes l3

Nas etapas a seguir, você vai gerar um objeto Kubernetes Network e GKENetworkParamSet para criar a rede l3 que será usada para associar pods nas etapas posteriores.

Crie o objeto de rede l3

No Cloud Shell, crie o objeto de rede YAML l3-network.yaml usando o nano ou o editor VI. Observe o campo "encaminha para" é a sub-rede 172.16.20.0/28 (l3-apache) em 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"

No Cloud Shell, aplique l3-network.yaml:

kubectl apply -f l3-network.yaml 

No Cloud Shell, confirme se o tipo de status l3-network está "Pronto".

kubectl describe networks l3-network

Exemplo:

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>

Criar o GKENetworkParamSet

No Cloud Shell, crie o objeto de rede YAML l3-network-parm.yaml usando o editor VI ou nano. Observe que as especificações mapeiam para a implantação da sub-rede 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"

No Cloud Shell, aplique l3-network-parm.yaml

kubectl apply -f l3-network-parm.yaml 

No Cloud Shell, confirme se o motivo do status l3-network é GNPParmsReady e NetworkReady:

kubectl describe networks l3-network

Exemplo:

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>

No Cloud Shell, valide o CIDR 10.0.8.0/21 "gkenetworkparamset l3-network" usado para criar a interface do pod.

kubectl describe gkenetworkparamsets.networking.gke.io l3-network

Exemplo:

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. Criar o netdevice-l3-pod

Na seção a seguir, você vai criar o netdevice-l3-pod run Memcachedbox, conhecido como "canivete suíço" que oferece suporte a mais de 300 comandos comuns. O pod está configurado para se comunicar com o l3-vpc usando eth1 e netdevice-vpc usando eth2.

No Cloud Shell, crie o contêiner de caixa ocupada chamado netdevice-l3-pod.yaml usando o nano ou o editor VI.

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

No Cloud Shell, aplique o netdevice-l3-pod.yaml

kubectl apply -f netdevice-l3-pod.yaml

Validar a criação do netdevice-l3-pod

No Cloud Shell, confirme se netdevice-l3-pod está em execução:

kubectl get pods netdevice-l3-pod

Exemplo:

user@$ kubectl get pods netdevice-l3-pod 
NAME               READY   STATUS    RESTARTS   AGE
netdevice-l3-pod   1/1     Running   0          74s

No Cloud Shell, valide os endereços IP atribuídos às interfaces do pod.

kubectl get pods netdevice-l3-pod -o yaml

No exemplo fornecido, o campo networking.gke.io/pod-ips contém os endereços IP associados às interfaces do pod de l3-network e netdevice-network. O endereço IP de rede padrão 10.0.1.22 está detalhado em 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"

Validar rotas netdevice-l3-pod

No Cloud Shell, valide as rotas para netdevice-vpc e l3-vpc em netdevice-l3-pod:

kubectl exec --stdin --tty netdevice-l3-pod   -- /bin/sh

Formule a instância e valide as interfaces do pod:

ifconfig

No exemplo, eth0 está conectado à rede padrão, eth1 está conectado à rede l3-network, e eth2 está conectado à 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)

No netdevice-l3-pod, valide as rotas para netdevice-vpc (172.16.10.0/28) e l3-vpc (172.16.20.0/28).

Formule a instância e valide as rotas do pod:

ip route

Exemplo:

/ # 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 

Para voltar ao Cloud Shell, saia do pod da instância.

exit

12. Criar o l3-pod

Na seção a seguir, você vai criar o Memcached de execução l3-pod, conhecido como "canivete suíço". que oferece suporte a mais de 300 comandos comuns. O pod está configurado para se comunicar com o l3-vpc usando apenas eth1.

No Cloud Shell, crie o contêiner de caixa ocupada chamado l3-pod.yaml usando o nano ou o editor VI.

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

No Cloud Shell, aplique l3-pod.yaml

kubectl apply -f l3-pod.yaml

Validar a criação do l3-pod

No Cloud Shell, confirme se netdevice-l3-pod está em execução:

kubectl get pods l3-pod

Exemplo:

user@$ kubectl get pods l3-pod
NAME     READY   STATUS    RESTARTS   AGE
l3-pod   1/1     Running   0          52s

No Cloud Shell, valide os endereços IP atribuídos às interfaces do pod.

kubectl get pods l3-pod -o yaml

No exemplo fornecido, o campo networking.gke.io/pod-ips contém os endereços IP associados às interfaces do pod da rede l3. O endereço IP de rede padrão 10.0.2.12 está detalhado em 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"

Validar rotas l3-pod

No Cloud Shell, valide as rotas para l3-vpc no netdevice-l3-pod:

kubectl exec --stdin --tty l3-pod   -- /bin/sh

Formule a instância e valide as interfaces do pod:

ifconfig

No exemplo, eth0 está conectado à rede padrão, eth1 está conectado à rede 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)

No l3-pod, valide as rotas para l3-vpc (172.16.20.0/28).

Formule a instância e valide as rotas do pod:

ip route

Exemplo:

/ # 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)

Para voltar ao Cloud Shell, saia do pod da instância.

exit

13. Atualizações do firewall

Para permitir a conectividade do GKE multicnic-pool com as regras de firewall de entrada netdevice-vpc e l3-vpc, Você vai criar regras de firewall especificando o intervalo de origem como a sub-rede da rede do pod. Por exemplo: "netdevice-subnet" e "sec-range-l3-subnet".

Por exemplo, o contêiner recém-criado, l3-pod, interface eth2 10.0.8.22 (alocado de sec-range-l3-subnet) é o endereço IP de origem ao se conectar à instância l3-apache na l3-vpc.

netdevice-vpc: permitir de netdevice-subnet para netdevice-apache

No Cloud Shell, crie a regra de firewall em netdevice-vpc para permitir o acesso do netdevice-subnet à instância do 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: permitir de sec-range-l3-subnet para l3-apache

No Cloud Shell, crie a regra de firewall em l3-vpc, permitindo que sec-range-l3-subnet acesso à instância 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. Validar a conectividade do pod

Na seção a seguir, você vai verificar a conectividade com as instâncias do Apache em netdevice-l3-pod e l3-pod fazendo login nos pods e executando wget -S que valida um download da página inicial dos servidores Apache. Como o netdevice-l3-pod é configurado com interfaces da netdevice-network e da l3-network, é possível ter conectividade com os servidores Apache em netdevice-vpc e l3-vpc.

Por outro lado, ao executar "wget -S" do l3-pod, a conectividade com o servidor Apache em netdevice-vpc não é possível porque o l3-pod só é configurado com uma interface da rede l3.

Conseguir o endereço IP do servidor Apache

No console do Cloud, consiga o endereço IP dos servidores Apache acessando Compute Engine → Instâncias de VM

fee492b4fd303859.png

Teste de conectividade netdevice-l3-pod para netdevice-apache

No Cloud Shell, faça login em netdevice-l3-pod:

kubectl exec --stdin --tty netdevice-l3-pod   -- /bin/sh

No contêiner, execute um ping na instância do netdevice-apache com base no endereço IP da etapa anterior.

ping <insert-your-ip> -c 4

Exemplo:

/ #  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
/ # 

No Cloud Shell, execute uma instância "wget -S" para o netdevice-apache com base no endereço IP da etapa anterior. "200 OK" indica que o download da página da Web foi concluído.

wget -S <insert-your-ip>

Exemplo:

/ # 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
/ # 

Teste de conectividade netdevice-l3-pod para l3-apache

No Cloud Shell, faça um ping na instância do l3-apache com base no endereço IP da etapa anterior.

ping <insert-your-ip> -c 4

Exemplo:

/ # 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
/ # 

No Cloud Shell, exclua o arquivo index.html anterior e execute uma instância "wget -S" para "l3-apache" com base no endereço IP da etapa anterior. "200 OK" indica um download bem-sucedido da página da Web.

rm index.html 
wget -S <insert-your-ip>

Exemplo:

/ # 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

Para voltar ao Cloud Shell, saia do pod da instância.

exit

Teste de conectividade l3-pod para netdevice-apache

No Cloud Shell, faça login em l3-pod:

kubectl exec --stdin --tty l3-pod   -- /bin/sh

No contêiner, execute um ping na instância do netdevice-apache com base no endereço IP da etapa anterior. Como o l3-pod não tem uma interface associada ao netdevice-network, o ping falhará.

ping <insert-your-ip> -c 4

Exemplo:

/ # 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

Opcional:no Cloud Shell, execute uma instância "wget -S" para o netdevice-apache com base no endereço IP da etapa anterior que atingirá o tempo limite.

wget -S <insert-your-ip>

Exemplo:

/ # 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

Teste de conectividade l3-pod para l3-apache

No Cloud Shell, faça um ping na instância do l3-apache com base no endereço IP da etapa anterior.

ping <insert-your-ip> -c 4

Exemplo:

/ # 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
/ # 

No Cloud Shell, execute uma instância "wget -S" para "l3-apache" com base no endereço IP da etapa anterior. 200 OK indica que o download da página da Web foi concluído.

wget -S <insert-your-ip>

Exemplo:

/ # 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. Registros do firewall

O recurso de geração de registros de regras de firewall permite auditar, verificar e analisar os efeitos das suas regras de firewall. Por exemplo, é possível determinar se uma regra de firewall criada para negar tráfego está funcionando conforme o esperado. A geração de registros de regras de firewall também é útil quando você precisa determinar quantas conexões são afetadas por uma determinada regra de firewall.

No tutorial, você ativou a geração de registros de firewall ao criar as regras de firewall de entrada. Vamos dar uma olhada nas informações coletadas nos registros.

No Console do Cloud, acesse Logging → Análise de registros

Insira a consulta abaixo de acordo com a captura de tela e selecione Executar consulta jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

280d00f2c5ce6109.png

Analisar mais de perto uma captura fornece elementos de informação para os administradores de segurança; que variam de endereço IP de origem e destino, porta, protocolo e nome do pool de nós.

ae4638ed9b718ac6.png

Para conferir outros registros de firewall, acesse Rede VPC → Firewall → allow-ingress-from-netdevice-network-to-all-vpc-instances e selecione "Visualizar" na Análise de registros.

16. Limpar

Exclua os componentes do tutorial no 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. Parabéns

Parabéns! Você configurou e validou a criação de um pool de nós multinic e de pods que executam o Memcachedbox para validar a conectividade L3 e tipo de dispositivo com os servidores Apache usando PING e wget.

Você também aprendeu a usar os registros do firewall para inspecionar pacotes de origem e destino entre os contêineres de pods e os servidores Apache.

Cosmopup acha os tutoriais incríveis!!

e6d3675ca7c6911f.jpeg

Leia mais e Vídeos

Documentos de referência