taxin's notes

読書、勉強メモ etc.

Kubernetes the hard way (GCP版) #11 (Pod用ネットワーク経路のプロビジョニング)

Kubernetes the hard way (GCP版)の続きです。

前回の記事はこちら

taxintt.hatenablog.com

Chap11. Provisioning Pod Network Routes(Pod用ネットワーク経路のプロビジョニング)

このチャプターでは、他のNodeにスケジュールされたPodと通信する際に必要なルーティングの設定を行います。
(ハンズオンの手順も少ないので、今回の記事も比較的短めです。)

ルーティングテーブルについて

最初の説明でも記載しましたが、他のNodeに配置されたPodと通信する際にはルーティングの設定が必要となります。
今回のハンズオンではGCPでネットワーク経路を定義する際に利用するRoutesを用いて設定を行います。

cloud.google.com

最初に、各VMIPアドレスメタデータに設定したCIDRブロックを確認します。

~/w/k/h/04 ❯❯❯ for instance in worker-0 worker-1 worker-2; do
  gcloud compute instances describe ${instance} \
    --format 'value[separator=" "](networkInterfaces[0].networkIP,metadata.items[0].value)'
done
10.240.0.20 10.200.0.0/24
10.240.0.21 10.200.1.0/24
10.240.0.22 10.200.2.0/24

ネットワーク経路について

先ほど確認したIPアドレスとCIDRブロックの情報を基に、ルーティング設定を行います。
設定の際には、下記の項目を指定して引数として渡します。

  • --destination-range: 宛先となるネットワーク(CIDRブロックで定義される)
  • --next-hop-address: 宛先ネットワークに到達するための転送先

この設定によって、--destination-rangeで指定したIPアドレスに対する通信は--next-hop-addressで指定したIPアドレスに転送されます。
これにより、他のNodeにスケジュールされたPodと通信することが可能になります。


~/w/k/h/04 ❯❯❯ for i in 0 1 2; do
  gcloud compute routes create kubernetes-route-10-200-${i}-0-24 \
    --network kubernetes-the-hard-way \
    --next-hop-address 10.240.0.2${i} \
    --destination-range 10.200.${i}.0/24
done
Created [https://www.googleapis.com/compute/v1/projects/k8s-hardway-20200229/global/routes/kubernetes-route-10-200-0-0-24].
NAME                            NETWORK                  DEST_RANGE     NEXT_HOP     PRIORITY
kubernetes-route-10-200-0-0-24  kubernetes-the-hard-way  10.200.0.0/24  10.240.0.20  1000
Created [https://www.googleapis.com/compute/v1/projects/k8s-hardway-20200229/global/routes/kubernetes-route-10-200-1-0-24].
NAME                            NETWORK                  DEST_RANGE     NEXT_HOP     PRIORITY
kubernetes-route-10-200-1-0-24  kubernetes-the-hard-way  10.200.1.0/24  10.240.0.21  1000
Created [https://www.googleapis.com/compute/v1/projects/k8s-hardway-20200229/global/routes/kubernetes-route-10-200-2-0-24].
NAME                            NETWORK                  DEST_RANGE     NEXT_HOP     PRIORITY
kubernetes-route-10-200-2-0-24  kubernetes-the-hard-way  10.200.2.0/24  10.240.0.22  1000


コマンド実行後に、作成したRoutesを確認します。

~/w/k/h/04 ❯❯❯ gcloud compute routes list --filter "network: kubernetes-the-hard-way"
NAME                            NETWORK                  DEST_RANGE     NEXT_HOP                  PRIORITY
default-route-84429476facc48a9  kubernetes-the-hard-way  0.0.0.0/0      default-internet-gateway  1000
default-route-a30ac7a6303348c0  kubernetes-the-hard-way  10.240.0.0/24  kubernetes-the-hard-way   1000
kubernetes-route-10-200-0-0-24  kubernetes-the-hard-way  10.200.0.0/24  10.240.0.20               1000
kubernetes-route-10-200-1-0-24  kubernetes-the-hard-way  10.200.1.0/24  10.240.0.21               1000
kubernetes-route-10-200-2-0-24  kubernetes-the-hard-way  10.200.2.0/24  10.240.0.22               1000

以上で、ルーティングの設定は完了となります。

Kuberneteのネットワークの内部仕様も理解したい方は、NodeにログインしてRouting TableやARP Tableなどを眺めて見るのも面白いと思います。
(自分の環境で検証はできていないですが、PodをDeployすると上記のTableに記載された内容が書き換えられるはずです。)

www.slideshare.net

medium.com

今回は、Chap11の内容をまとめました。

余談ですが、Calicoなどの他のCNI Pluginを用いることでハンズオン自体を改造している人もいるようです。
CNI Pluginに関しては、ネットワーク方式(L3 Native, Overlay(L2 over L3))やNetworkPolicyなど設定内容も異なるので、代表的なPluginを試すのもありかと思います。

qiita.com