
セキュリティ上の理由から、送信元IPアドレスによるホワイトリスト登録を求められるアプリケーションは少なくありません。しかし現状、Google Kubernetes EngineにはGKEクラスターへ静的IPアドレスプールを割り当てる機能がなく、複雑なNATベースの仕組みを構築する必要があります。コストがかさむうえ運用も難しく、ロードバランシングや冗長化のために煩雑なルール設計も避けられません。
kubeIPは、この課題に対するソリューションです。予約済みのアドレスプールから静的な外部IPアドレスをGKEノードに割り当て、Kubernetes APIを継続的に監視して新しいノードを検知し、必要な変更を反映します。
kubeIPはGoで書かれており、GKEクラスター自体には一切手を加えず、Podとしてクラスター内で動作します。設定はkubeIPのConfigMapで定義した環境変数を通じて行います。
apiVersion:
v1data: KUBEIP_LABELKEY: "kubeip" KUBEIP_LABELVALUE: "my-gke-cluster-1" KUBEIP_NODEPOOL: "default-pool" kind:
ConfigMapmetadata: labels: app:
kubeipname:
kubeip-confignamespace:
defaultkubeIPはKubernetesクラスターのイベントリスナーとして自身を登録します。新しいノードが作成されると、予約プールから利用可能な静的IPアドレス(GKEクラスター名がラベルとして付与されたもの)を探し、そのノードに割り当てます。利用可能なアドレスがない場合は、何も行いません。
デプロイを簡単にするため、Docker HubにkubeIPのDockerイメージを公開しています(docker pull doitintl/kubeip)。kubeIPのGitHubリポジトリをクローンして、ソースコードからご自身でビルドすることもできます。
ほかの記事もぜひご覧ください。ブログをチェックするか、AvivのTwitterをフォローしてみてください。