1. はじめに
GCP は、VM インスタンス レベルで複数のインターフェースを長年サポートしています。マルチインターフェースを使用すると、VM は最大 7 つの新しいインターフェース(デフォルト + 7 つのインターフェース)を異なる VPC に接続できます。GKE ネットワーキングは、この動作をノードで実行されている Pod に拡張します。この機能が導入される前は、GKE クラスタではすべての NodePool に単一のインターフェースのみを設定し、単一の VPC にマッピングすることができました。Pod のマルチネットワーク機能を使用すると、GKE クラスタ内のノードと Pod で複数のインターフェースを有効にできます。
作成するアプリの概要
このチュートリアルでは、図 1 に示すユースケースを示す包括的な GKE multinic 環境を構築します。
- busybox を利用して netdevice-l3-pod を作成します。
- eth2 経由で netdevice-vpc の netdevice-apache インスタンスに対して PING と wget -S を実行する
- eth1 経由で l3-vpc の l3-apache インスタンスに対して PING と wget -S を実行する
- busybox を利用して l3-pod を作成し、eth1 経由で l3-apache インスタンスに対して PING と wget -S を実行する
どちらのユースケースでも、Pod の eth0 インターフェースはデフォルト ネットワークに接続されています。
図 1

学習内容
- l3 タイプのサブネットを作成する方法
- netdevice タイプのサブネットを作成する方法
- マルチ NIC GKE ノードプールを確立する方法
- netdevice と l3 の機能を備えた Pod を作成する方法
- L3 機能を使用して Pod を作成する方法
- GKE オブジェクト ネットワークを作成して検証する方法
- PING、wget、ファイアウォール ログを使用してリモート Apache サーバーへの接続を検証する方法
必要なもの
- Google Cloud プロジェクト
2. 用語とコンセプト
プライマリ VPC: プライマリ VPC は事前構成済みの VPC であり、デフォルトの設定とリソースが含まれています。GKE クラスタはこの VPC に作成されます。
サブネット: Google Cloud において、サブネットは VPC でネットマスクを使用するクラスレス ドメイン間ルーティング(CIDR)を行う方法です。サブネットには、ノードに割り当てられる単一のプライマリ IP アドレス範囲があり、Pod と Service に属する複数のセカンダリ範囲を設定できます。
ノード ネットワーク: ノード ネットワークは、VPC とサブネットのペアの専用の組み合わせを指します。このノードネットワーク内で、ノードプールに属するノードには、プライマリ IP アドレス範囲から IP アドレスが割り振られます。
セカンダリ範囲: Google Cloud のセカンダリ範囲は、VPC のリージョンに属する CIDR とネットマスクです。GKE はこれをレイヤ 3 Pod ネットワークとして使用します。VPC には複数のセカンダリ範囲を設定でき、Pod は複数の Pod ネットワークに接続できます。
ネットワーク(L3 またはデバイス): Pod の接続ポイントとして機能するネットワーク オブジェクト。このチュートリアルでは、ネットワークは l3-network と netdevice-network です。デバイスは netdevice または dpdk のいずれかになります。デフォルト ネットワークは必須であり、デフォルトのノードプールのサブネットに基づいてクラスタの作成時に作成されます。
レイヤ 3 ネットワークは、サブネットのセカンダリ範囲に対応します。次のように表されます。
VPC -> サブネット名 -> セカンダリ範囲名
デバイス ネットワークは VPC のサブネットに対応し、次のように表されます。
VPC -> サブネット名
デフォルトの Pod ネットワーク: Google Cloud は、クラスタの作成時にデフォルトの Pod ネットワークを作成します。デフォルトの Pod ネットワークでは、ノード ネットワークとしてプライマリ VPC を使用します。デフォルトの Pod ネットワークは、デフォルトですべてのクラスタノードと Pod で使用できます。
複数のインターフェースを持つ Pod: GKE の複数のインターフェースを持つ Pod は、同じ Pod ネットワークに接続できません。これは、Pod の各インターフェースを一意のネットワークに接続する必要があるためです。
Codelab をサポートするようにプロジェクトを更新する
この Codelab では、$variables を使用して、Cloud Shell での gcloud 構成の実装を支援します。
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 クラスタの作成
プライマリ VPC サブネットを指定して限定公開 GKE クラスタを作成し、必要なフラグ(–enable-multi-networking と –enable-dataplane-v2)を使用してデフォルトのノードプールを作成し、マルチ NIC ノードプールをサポートします。
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 で、default-pool から 2 つのノードが生成されていることを確認します。
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 内で、マルチ NIC ネットデバイス ネットワークに使用するサブネットを作成します。
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
Cloud Router と NAT 構成
VM インスタンスに外部 IP アドレスがないため、ソフトウェア パッケージのインストールにはチュートリアルで Cloud NAT が使用されています。
Cloud Shell 内で、Cloud Router を作成します。
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)は、マルチ NIC 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
Cloud Router と NAT 構成
VM インスタンスに外部 IP アドレスがないため、ソフトウェア パッケージのインストールにはチュートリアルで Cloud NAT が使用されています。
Cloud Shell 内で、Cloud Router を作成します。
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. マルチ NIC ノードプールを作成する
次のセクションでは、次のフラグで構成されるマルチ NIC ノードプールを作成します。
--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
マシンタイプ: ノードプールをデプロイする際は、マシンタイプの依存関係を考慮してください。たとえば、4 つの vCPU を備えた「e2-standard-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. multnic-node-pool を検証する
Cloud Shell で、multinic-node-pool から 3 つのノードが生成されたことを確認します。
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-network を作成する
次の手順では、Network と GKENetworkParamSet Kubernetes オブジェクトを生成して、後の手順で Pod の関連付けに使用する netdevice-network を作成します。
netdevice-network オブジェクトを作成する
Cloud Shell 内で、VI エディタまたは nano を使用してネットワーク オブジェクト YAML netdevice-network.yaml を作成します。「routes to」は、netdevice-vpc のサブネット 172.16.10.0/28(netdevice-apache)です。
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 のステータス タイプが Ready であることを確認します。
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 内で、VI エディタまたは nano を使用してネットワーク オブジェクト YAML netdevice-network-parm.yaml を作成します。この仕様は、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 で、後の手順で Pod のインターフェースに使用する gkenetworkparamset CIDR ブロック 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 ネットワークを作成します。
次の手順では、Network と GKENetworkParamSet の Kubernetes オブジェクトを生成して、後の手順で Pod の関連付けに使用する l3 ネットワークを作成します。
l3 ネットワーク オブジェクトを作成する
Cloud Shell 内で、VI エディタまたは nano を使用してネットワーク オブジェクト YAML l3-network.yaml を作成します。「routes to」は、l3-vpc のサブネット 172.16.20.0/28(l3-apache)です。
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-network のステータス タイプが Ready であることを確認します。
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 内で、VI エディタまたは nano を使用してネットワーク オブジェクト YAML l3-network-parm.yaml を作成します。仕様は 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-network のステータスの理由が 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 内で、Pod インターフェースの作成に使用された 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 を作成します。
次のセクションでは、300 を超える一般的なコマンドをサポートする「スイス アーミー ナイフ」として知られる busybox を実行する netdevice-l3-pod を作成します。この Pod は、eth1 を使用して l3-vpc と通信し、eth2 を使用して netdevice-vpc と通信するように構成されています。
Cloud Shell 内で、VI エディタまたは nano を使用して netdevice-l3-pod.yaml という名前の busy box コンテナを作成します。
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 内で、Pod インターフェースに割り当てられた IP アドレスを検証します。
kubectl get pods netdevice-l3-pod -o yaml
提供された例では、networking.gke.io/pod-ips フィールドに、l3-network と netdevice-network の Pod インターフェースに関連付けられた IP アドレスが含まれています。デフォルト ネットワークの 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-l3-pod から netdevice-vpc と l3-vpc へのルートを検証します。
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
インスタンスを作成し、Pod インターフェースを検証します。
ifconfig
この例では、eth0 がデフォルト ネットワークに接続され、eth1 が l3-network に接続され、eth2 が 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)
netdevice-l3-pod から、netdevice-vpc(172.16.10.0/28)と l3-vpc(172.16.20.0/28)へのルートを検証します。
インスタンスを作成し、Pod ルートを検証します。
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
クラウドシェルに戻るには、インスタンスから Pod を終了します。
exit
12. l3-pod を作成します。
次のセクションでは、300 を超える一般的なコマンドをサポートする「スイス アーミー ナイフ」として知られる busybox を実行する l3-pod を作成します。Pod は、eth1 のみを使用して l3-vpc と通信するように構成されています。
Cloud Shell 内で、VI エディタまたは nano を使用して l3-pod.yaml という名前の busy box コンテナを作成します。
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 内で、Pod インターフェースに割り当てられた IP アドレスを検証します。
kubectl get pods l3-pod -o yaml
提供された例では、networking.gke.io/pod-ips フィールドに、l3-network の Pod インターフェースに関連付けられた IP アドレスが含まれています。デフォルト ネットワークの 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 内で、netdevice-l3-pod から l3-vpc へのルートを検証します。
kubectl exec --stdin --tty l3-pod -- /bin/sh
インスタンスを作成し、Pod インターフェースを検証します。
ifconfig
この例では、eth0 がデフォルト ネットワークに接続され、eth1 が l3-network に接続されています。
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 22:29:30:09:6B:58
inet addr:10.0.2.12 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 6E:6D:FC:C3:FF:AF
inet addr:10.0.8.22 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
l3-pod から l3-vpc(172.16.20.0/28)へのルートを検証します。
インスタンスを作成し、Pod ルートを検証します。
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)
クラウドシェルに戻るには、インスタンスから Pod を終了します。
exit
13. ファイアウォールの更新
GKE multicnic-pool から netdevice-vpc への接続を許可するには、l3-vpc 上り(内向き)ファイアウォール ルールが必要です。ソース範囲を Pod ネットワーク サブネット(netdevice-subnet、sec-range-l3-subnet など)として指定するファイアウォール ルールを作成します。
たとえば、最近作成されたコンテナ l3-pod、eth2 インターフェース 10.0.8.22(sec-range-l3-subnet から割り当て)は、l3-vpc の l3-apache インスタンスに接続する際の送信元 IP アドレスです。
netdevice-vpc: netdevice-subnet から 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-subnet から 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. Pod の接続を検証する
次のセクションでは、Pod にログインして wget -S を実行し、Apache サーバーのホームページのダウンロードを検証することで、netdevice-l3-pod と l3-pod から Apache インスタンスへの接続を確認します。netdevice-l3-pod は netdevice-network と l3-network のインターフェースで構成されているため、netdevice-vpc と l3-vpc の Apache サーバーへの接続が可能です。
一方、l3-pod から wget -S を実行すると、l3-pod には l3-network のインターフェースのみが構成されているため、netdevice-vpc の Apache サーバーへの接続はできません。
Apache サーバーの IP アドレスを取得する
Cloud コンソールで、[Compute Engine] → [VM インスタンス] に移動して、Apache サーバーの IP アドレスを取得します。

netdevice-l3-pod から netdevice-apache への接続テスト
Cloud Shell 内で、netdevice-l3-pod にログインします。
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
コンテナから、前の手順で取得した IP アドレスに基づいて netdevice-apache インスタンスに ping を実行します。
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 内で、前の手順で取得した IP アドレスに基づいて netdevice-apache インスタンスに対して wget -S を実行します。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 内で、前の手順で取得した IP アドレスに基づいて l3-apache インスタンスに ping を実行します。
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 ファイルを削除し、前の手順で取得した IP アドレスに基づいて l3-apache インスタンスに対して wget -S を実行します。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
クラウドシェルに戻るには、インスタンスから Pod を終了します。
exit
l3-pod から netdevice-apache への接続テスト
Cloud Shell 内で、l3-pod にログインします。
kubectl exec --stdin --tty l3-pod -- /bin/sh
コンテナから、前の手順で取得した IP アドレスに基づいて netdevice-apache インスタンスに ping を実行します。l3-pod に netdevice-network に関連付けられたインターフェースがないため、ping は失敗します。
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 内で、前の手順で取得した IP アドレスに基づいて netdevice-apache インスタンスに対して wget -S を実行します。このインスタンスはタイムアウトします。
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 内で、前の手順で取得した IP アドレスに基づいて l3-apache インスタンスに ping を実行します。
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 内で、前の手順で取得した IP アドレスに基づいて l3-apache インスタンスに対して wget -S を実行します。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 コンソールで、[ロギング] → [ログ エクスプローラ] に移動します。
スクリーンショットに従って以下のクエリを挿入し、[クエリを実行] を選択します。jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

キャプチャを詳しく調べると、送信元と宛先の IP アドレス、ポート、プロトコル、ノードプールの名前など、セキュリティ管理者に役立つ情報要素が得られます。

ファイアウォール ログをさらに調べるには、[VPC ネットワーク] → [ファイアウォール] → [allow-ingress-from-netdevice-network-to-all-vpc-instances] に移動し、[ログ エクスプローラで表示] を選択します。
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 を実行する Pod の作成を構成して検証し、PING と wget を使用して Apache サーバーへの L3 とデバイスタイプの接続を検証しました。
また、ファイアウォール ログを使用して、Pod コンテナと Apache サーバー間の送信元パケットと宛先パケットを検査する方法も学習しました。
Cosmopup はチュートリアルが大好きです。
