Inspired by angelnu/pod-gateway.
- vxlan11298 を作成する。
- K8s 内での IP アドレスを返すサーバーと DNS を起動する。
- Client Pod のトラフィック制限を行う。
- 基本的に全トラフィックを遮断する。
- 10.0.0.0/8 と 192.168.0.0/16 は通信を許可する。
- K8s 内での Gateway Pod の IP アドレスを取得する。
- vxlan11298 を作成する。
- dhclient を使用して VXLAN 内での IP アドレスを取得・設定する。
- 定期的に Gateway Pod との疎通を確認し、途切れた場合は 3. に戻る。
- グローバル行きのトラフィックは expressvpn を経由する。
- ローカル行きのトラフィックは expressvpn を経由しない。
curl -fs http://jp.expressvpn.cluster.local
- expressvpn が起動している Pod の IP アドレスが返ってくる。
Service 経由で Deployment に所属する Pod にアクセスすると、Pod の IP アドレスが提供される。 Service を使用して ExpressVPN で接続する国をグループ化し、Deployment で都市などの場所を整理することができる。 必ずしもこのような構成にする必要はないが、以下のようなアプローチで管理が簡素化される。
- 接続する国の追加や削除は、Service の変更で容易に行える。
- 都市などの場所の追加や削除は、Deployment の変更によって対応可能。
- 冗長性を確保するには、Deployment のレプリカ数を増やすことで対処可能。
test/
ディレクトリを参照。
test/run.sh
を実行すると、kind と kubectl がダウンロードされるが、これは .cache/bin
にダウンロードされるため、グローバル環境が影響を受けることは無いはず。
実行には ExpressVPN のアクティベーションコードが必要。