Kubernetes the Hard Way on Azure : 11. Podのネットワークルート

こんにちは。
引き続き、Kubernetes the Hard Way on Azure を進めていきます。

Provisioning Pod Network Routes

ノード にスケジュールされた Pod は、ノード のPod CIDR範囲からIPアドレスを受け取ります。この時点で Pod は、ネットワークルート がないため、異なる ノード で実行されている他の Pod と通信できません。

このラボでは、ノード の Pod CIDR範囲を ノード の内部IPアドレスにマップする各 ワーカーノード のルートを作成します。

f:id:dombri:20200215224950j:plain

今回はこの辺り。絵には表現していないけど、ワーカーノードの属するネットワークの部分。


The Routing Table

このセクションでは、kubernetes-vnetでルートを作成するために必要な情報を収集します。

各ワーカーインスタンスの内部IPアドレスと Pod CIDR範囲を出力します。

for instance in worker-0 worker-1; do
  PRIVATE_IP_ADDRESS=$(az vm show -d -g kubernetes -n ${instance} --query "privateIps" -otsv)
  POD_CIDR=$(az vm show -g kubernetes --name ${instance} --query "tags" -o tsv)
  echo $PRIVATE_IP_ADDRESS $POD_CIDR
done

# 出力内容 内部IP・PodのCIDR
10.240.0.20 10.200.0.0/24
10.240.0.21 10.200.1.0/24


Routes

ワーカーインスタンス用のネットワークルートを作成します。

# ルートテーブルの作成
az network route-table create -g kubernetes -n kubernetes-routes

# kubernetes-vnet, kubernetes-subnet にルートテーブル設定
az network vnet subnet update -g kubernetes \
  -n kubernetes-subnet \
  --vnet-name kubernetes-vnet \
  --route-table kubernetes-routes
  
# kubernetes-routes にルートを登録
for i in 0 1; do
az network route-table route create -g kubernetes \
  -n kubernetes-route-10-200-${i}-0-24 \
  --route-table-name kubernetes-routes \
  --address-prefix 10.200.${i}.0/24 \
  --next-hop-ip-address 10.240.0.2${i} \
  --next-hop-type VirtualAppliance
done

note:ここでは仮想アプライアンス(仮想マシン)にネクストホップを指定しています。


[kubernetes-vnet] のルート一覧を表示します。

az network route-table route list -g kubernetes --route-table-name kubernetes-routes -o table

# 出力内容
AddressPrefix    Name                            NextHopIpAddress    NextHopType       ProvisioningState    ResourceGroup
---------------  ------------------------------  ------------------  ----------------  -------------------  ---------------
10.200.0.0/24    kubernetes-route-10-200-0-0-24  10.240.0.20         VirtualAppliance  Succeeded            kubernetes
10.200.1.0/24    kubernetes-route-10-200-1-0-24  10.240.0.21         VirtualAppliance  Succeeded            kubernetes


  • 異なるノードのPod同士で通信するには ネットワークルートが必要
    • Azureではサブネット単位でルートテーブルが作成


イムリーに業務でAKS触っているときにルートテーブルの話になっていたので、仕事に即座に生かせる知識を得られました。意識せずとも、ネットワーク・サブネット構築時にルートテーブルが自動作成されていたんだ、と・・・

ネットワーク周りは苦手意識がありますが、こればかりは避けて通れない技術なので理解を深めていきたいと思います。
ちなみに、先日ネットワークに強い方にお会いしたときおすすめいただいた本はこちら。読んでみます。
[改訂新版] 3分間ネットワーク基礎講座

追記 16.02.2020

twitter で「K8sのネットワーク分からん、これはAzure独自の構成なのか?」と呟いたら、様々な方からアドバイスいただきました。ありがとうございます。


12.に続きます。