一般的に、Alibaba Cloud において Kubernetes クラスター作成時には、VPC (Virtual Private Cloud) の自動作成を選択でき、デフォルトネットワークアドレスを利用することができます。 いつくかの複雑なシナリオでは、ユーザーが ECS (Elastic Compute Service) アドレス、Kubernetes ポッドアドレスおよび Kubernentes サービスアドレスを設定します。 このドキュメントでは、Alibaba Cloud VPC 環境下での Kubernetes でアドレスがどのように使用され、CIDR をどのように設定するかを紹介します。
Kubernetes CIDR ブロックの基本概念
IP アドレスに関連する概念は以下のようになります。
VPC CIDR ブロック
CIDR ブロックは VPC 作成時に選択されます。 VPC CIDR ブロックは "10.0.0.0/8"、"172.16.0.0/12" および "192.168.0.0/16" から選択します。
VSwitch CIDR ブロック
CIDR ブロックは VPC での VSwitch 作成時に指定されます。 VSwitch CIDR ブロックは、現在お使いの VPC CIDR ブロックのサブセットである必要があります。これにより、VPC CIDR ブロックと同様のものになりますがこの範囲を超えることはありません。 VSwitch での ECS インスタンスへ割り当てられたアドレスは、VSwitch CIDR ブロックから取得されます。 複数の VSwitch を 1 つの VPC下で作成することができますが、VSwitch CIDR ブロックは重複できません。
ポッド CIDR ブロック
Kubernetes においてポッドは 1 つの概念となります。 それぞれのポッドは 1 つの IP アドレスを持ちます。 Alibaba Cloud Container Service で Kubernetes クラスター作成時に、ポッド CIDR ブロックを指定することができますが、ポッド CIDR ブロックは重複できません。たとえば、VPC CIDR ブロックが "172.16.0.0/12" であれば、Kubernetes のポッド CIDR ブロックに "172.16.0.0/16"、"172.17.0.0/16" および "172.16.0.0/12" に含まれるどのアドレスも使用することができません。
サービス CIDR ブロック
Kubernetes においてサービスは 1 つの概念となります。 それぞれのサービスはそれぞれにアドレスを持ちます。 サービス CIDR ブロックは VPC CIDR ブロックまたはポッド CIDR ブロックと重複できません。 サービスアドレスは Kubernetes クラスターでのみ使用され、Kubernetes クラスター外では使用できません。
Kubernetes CIDR ブロックおよび VPC CIDR ブロックの関係は以下のようになります。
CIDR ブロックの選択方法
1 つの VPC と 1 つの Kubernetes クラスターでのシナリオ
これは最もシンプルなシナリオです。 VPC アドレスは VPC 作成時に決められます。 Kubrenetes クラスターの作成時に現在のVPCとは異なるCIDR ブロックを選択します。
1 つの VPC と 複数の Kubernetes クラスターでのシナリオ
1 つの VPC 下に複数の Kubernetes クラスターを作成します。 デフォルトネットワークモード (Flannel) で、ポッドメッセージは VPC によりルーティングされる必要があり、Container Service により自動的に VPC ルート上のそれぞれの CIDR ブロックに対してルートテーブルが設定されます。 全ての Kubernetes クラスターのポッド CIDR ブロックは重複できませんが、サービス CIDR ブロックの重複は可能です。
VPC アドレスは VPC 作成時に決められます。 Kubernetes クラスター作成時に、VPC アドレスと重複しない CIDR ブロックを選択するか、それぞれの Kubernetes クラスター向けの他のポッド CIDR ブロックを選択します。
そのような状況では、Kubernetes クラスターのパートは相互接続されています。 1 つの Kubernetes クラスターのポッドは ポッドおよび 他の Kubernetes クラスターの ECS インスタンスへ直接アクセスできますが、他のKubernetesクラスターのサービスへはアクセスできません。
VPC 相互接続のシナリオ
このような状況において、"VPC 1" で作成された Kubernetes クラスターの CIDR ブロックは "VPC 1" の CIDR ブロックまたは "VPC 2" へルーティングされた CIDR ブロックと重複できません。"VPC 2" で Kubernetes クラスターを作成した際のシナリオを適用します。 この例では、Kubernetes クラスターのポッド CIDR ブロック は "10.0.0.0/8" 下の小区分を選択できます。
"VPC 2" において "VPC 1" の Kubernetes ポッドへのアクセスには、"VPC 2" での Kubernetes クラスターへのルーティングを設定します。
VPC から IDC のシナリオ
VPC 相互接続のシナリオと同様に、VPC での CIDR ブロックのパーツが IDC へルーティングされている場合、Kubernetes クラスターのポッドアドレスは IDC での Kubernetes クラスターのポッドアドレスと重複できません。 IDC の専用回線 VBR (virtual border router) へのルートテーブルの設定が必要です。