見出し画像

KubernetesでPod作成時に裏側で実行されるネットワークコマンド

Kubernetesを使っていると、すべてよしなに動いていて、実際にどんなことが起きているか気になりますよね。KubernetesでPodを作成すると、ネットワーク設定が自動的に行われます。その仕組みを「有線ルータとPCをLANケーブルで接続する」という例えを使ってまとめていきます。


Pod作成時に動くネットワークコマンドの流れ

Kubernetesは以下のようなネットワーク設定を実行します。この操作を、有線ルータとPCをLANケーブルで接続する準備に例えながら解説します。


1. ネットワークインターフェースを作成する (ip link add)

コマンド例(ルータ側で実行):

ip link add veth0 type veth peer name veth1

説明:
仮想ネットワークインターフェースペア(vethペア)を作成します。一方の端(veth0)はホスト(ルータ)に、もう一方の端(veth1)はPod(PC)に割り当てられます。

有線ルータの例え:
LANケーブルを用意する作業です。この作業はルータ(ホスト)側で実行されます。ルータがケーブルを新しく作り出し、一端を自分(ルータ)用、もう一端をPC用に準備します。


2. インターフェースを名前空間に移動する (ip link set)

コマンド例(ルータ側で実行):

ip link set veth1 netns <pod-namespace>

説明:
作成したネットワークインターフェースの片端(veth1)をPod専用のネットワーク名前空間に移動します。

有線ルータの例え:
LANケーブルの片方をPCに差し込みます。この操作もルータ(ホスト)側で行われます。ルータがケーブルをPCの「部屋」に届けるイメージです。


3. IPアドレスを割り当てる (ip addr add)

コマンド例(PC側で実行):

ip -n <pod-namespace> addr add 192.168.1.2/24 dev veth1

説明:
Pod内のネットワークインターフェース(veth1)にIPアドレスを割り当てます。このアドレスは、ネットワーク上でPodを識別するために必要です。

有線ルータの例え:
LANケーブルをPCに差し込んだだけでは通信できません。次に、PC自身が「自分の住所(IPアドレス)」を設定します。この作業はPC(Pod)側で行います。例えば「自分のIPは192.168.1.2だ」と設定し、ネットワーク上で名乗る準備を整えます。


4. ルートを追加する (ip route add)

コマンド例(PC側で実行):

ip -n <pod-namespace> route add default via 192.168.1.1 dev veth1

説明:
Podが外部ネットワークや他のPodにアクセスするための経路(ルート)を設定します。

有線ルータの例え:
PC側で「外に通信するときは、このルータ(ゲートウェイ)を通ればいい」と設定します。この作業もPC(Pod)側で行います。PCが「インターネットに行くにはルータ192.168.1.1を通るんだな」と理解するプロセスです。


全体の流れをまとめたスクリプト例

以下は、上記の手順をまとめたシンプルなスクリプト例です。

# ルータ(ホスト)側で実行
# 1. vethペアを作成
ip link add veth0 type veth peer name veth1

# 2. veth1をPodのネットワーク名前空間に移動
POD_NAMESPACE="pod-namespace"
ip link set veth1 netns $POD_NAMESPACE

# PC(Pod)側で実行
# 3. Pod内でIPアドレスを設定
POD_IP="192.168.1.2/24"
ip -n $POD_NAMESPACE addr add $POD_IP dev veth1

# 4. Pod内でデフォルトルートを設定
DEFAULT_GATEWAY="192.168.1.1"
ip -n $POD_NAMESPACE route add default via $DEFAULT_GATEWAY dev veth1

# ルータ(ホスト)側で実行
# 5. ホスト側のインターフェースを有効化
ip link set veth0 up

有線ルータとPCでのネットワーク構築の全体像

  1. ip link add(ルータ側):
    ルータがLANケーブルを用意します。

  2. ip link set(ルータ側):
    LANケーブルの片端をPCに接続します。

  3. ip addr add(PC側):
    PCが自分の住所(IPアドレス)を設定します。

  4. ip route add(PC側):
    PCが「外部との通信経路(ルート)」を設定します。

  5. ip link set(ルータ側):
    ルータ側でLANケーブルを有効化し、通信を開始します。


なぜPCとルータで役割分担があるのか?

ルータとPCの役割分担は次の通りです:

  • ルータ側(ホスト): ケーブルを用意し、接続を管理します。

  • PC側(Pod): 自分の設定(IPアドレスや通信ルート)を行います。

例え:
ルータが「通信道路を整備する役割」、PCが「道路上で自分の車のナンバーを登録して目的地への道順を決める役割」を担います。こうすることで、PC(Pod)は他のデバイスやインターネットとスムーズに通信できるようになります。


まとめ

KubernetesでPodを作成する際、ネットワーク設定は有線ルータとPCを接続するプロセスとよく似ています。ホスト(ルータ)はケーブルを用意して管理し、Pod(PC)は自分自身の設定を行います。この役割分担を理解することで、ネットワークの仕組みやトラブルシューティングの理解が深まると思います!

いいなと思ったら応援しよう!