アドレスを手で分けてみる
目標
アドレス帯を分ける作業は、元に戻すのが最も難しい決定の1つです。VPCのアドレス帯は、作った後に縮小できず、サブネットは、中にリソースがあると削除できません。最初の30分で決めたことが、数年続きます。
ここでは、計算機を使わず、境界と長さで答えを出します。
用意するもの
/opt/lab/netplan/allocations.txt 사내 대역 배정표
/opt/lab/netplan/routes.txt 어느 라우터의 표
先に、作業ディレクトリに持ってきます。
mkdir -p /root/netplan && cp /opt/lab/netplan/* /root/netplan/ && cd /root/netplan
残すもの
01-here.txt 내 주소·프리픽스·기본 경로
02-split.txt /16 을 나눈 계획
03-overlap.txt 겹치는 짝
04-longest.txt 세 목적지가 가는 길
05-usable.txt 크기별로 실제 쓸 수 있는 수
自分は今どこにいるのか
このPodのIPv4アドレスとプレフィックス、そしてデフォルト経路を01-here.txtに残し、そのプレフィックスがどういう意味かを1行書いてください。
ip -4 -o addr showとip routeを使います。
プレフィックスが/32なら、同じアドレス帯にネイバーが1つもいないという意味です。それでも外へ出られるのは、scope linkの経路が別にあるからです。
境界に合わせて分ける
10.20.0.0/16を、/18の4つに分け、最初の3つを3つのAZに割り当ててください。各AZの最初の/24をパブリックサブネットとして確保します。4つ目の/18は残し、なぜ残すのかを書いてください。結果は02-split.txtに書きます。
python3 -c "import ipaddress as ip; print([str(n) for n in ip.ip_network('10.20.0.0/16').subnets(new_prefix=18)])"
各/18の最初の/24は、その/18の開始アドレスに/24を付けたものです。
4つ目を残す理由を書いてください。VPCのアドレス帯は、後から拡張するのが面倒で、AZが1つ増えたり用途が1つ増えたりするときに、付け足す場所がないと、別のアドレス帯を持ってくる必要があります。
重なるペアを探す
allocations.txtから、互いに重なるアドレス帯のペアをすべて探して03-overlap.txtに書き、重なると何が妨げられるのかを1行付け足してください。
ipaddress.ip_network(a).overlaps(ip_network(b))で、すべてのペアを調べます。
重なるペアは2つです。重ならないものを入れてはいけません。重ならないのに重なると報告すると、問題のないアドレス帯を取り直すことになります。
順序ではなく長さが決める
routes.txtを見て、10.20.4.200・10.20.9.5・172.20.1.1が、それぞれどの経路で出ていくかを04-longest.txtに書いてください。次のホップのアドレスまで書きます。
カーネルは、表の順序を見ません。合う経路が複数あれば、プレフィックスが最も長いものを選びます。
10.20.4.200は/24と/25の両方に合います。10.20.9.5はscope linkの経路に合いますが、それはゲートウェイを経由しないという意味です。
実際に使える数
/24 · /25 · /26 · /28のそれぞれについて、全アドレス数と、クラウドが5つを予約した後で実際に使える数を、05-usable.txtに表で書き、その5つがどこへ行くのかを1行付け足してください。
全体は2^(32-프리픽스)です(プレースホルダーはプレフィックスです)。ほとんどのクラウドが、サブネットごとに5つを持っていきます。ネットワークアドレス、ゲートウェイ、DNS、予備、ブロードキャストです。
小さなサブネットほど、この損失の割合が大きくなります。/28は、16個のうち5つが消えます。
使える範囲はどこまでか
プライベートとして使えるアドレス帯をすべて06-private.txtに書き、allocations.txtの各アドレス帯がどのプライベートアドレス帯に入るかを示してください。そして、どの場所を避けるべきかを1行付け足してください。
RFC 1918が3つで、ここにRFC 6598が定めたアドレス帯がもう1つあります。プライベートではありませんが、インターネットでルーティングされないので、社内で使えます。
避けるべき場所もあわせて書いてください。10.0.0.0/16と192.168.0.0/24は、誰もが最初に選ぶアドレス帯なので、いつかつなぐ必要が出る相手と重なる確率が最も高いです。
表ではなくルールを残す
次の人が文書を見なくても、自分でアドレス帯を選べるルールを、07-decide.mdに書いてください。リージョン・AZ・用途の3つの単位それぞれに、どんなサイズを使うかと、なぜ余裕を持って確保するのかを一緒に書きます。
「どのチームがどのアドレス帯を使う」という表は、すぐに古くなります。代わりに、「リージョンごとに/16、AZごとに/20、用途ごとに/24」のようにルールを書いておけば、表を見なくても衝突しません。
なぜ大きく確保するのかも書いてください。IPはタダで、不足は高くつきます。Podごとに1つずつIPを使うコンテナネットワークをつなぐ瞬間に、/24は底をつきます。