Kubernetes the hard way (GCP版)の続きです。
前回の記事はこちら
Chap11. Provisioning Pod Network Routes(Pod用ネットワーク経路のプロビジョニング)
このチャプターでは、他のNodeにスケジュールされたPodと通信する際に必要なルーティングの設定を行います。
(ハンズオンの手順も少ないので、今回の記事も比較的短めです。)
ルーティングテーブルについて
最初の説明でも記載しましたが、他のNodeに配置されたPodと通信する際にはルーティングの設定が必要となります。
今回のハンズオンではGCPでネットワーク経路を定義する際に利用するRoutesを用いて設定を行います。
最初に、各VMのIPアドレスとメタデータに設定した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
今回は、Chap11の内容をまとめました。
余談ですが、Calicoなどの他のCNI Pluginを用いることでハンズオン自体を改造している人もいるようです。
CNI Pluginに関しては、ネットワーク方式(L3 Native, Overlay(L2 over L3))やNetworkPolicyなど設定内容も異なるので、代表的なPluginを試すのもありかと思います。