Vultr Kubernetes Engine に firewall 機能が追加されたのでTerraformで設定してみた
はじめに
VultrのKubernetes(VKE)のクラスタに対してfirewallを設定できるようになっていました。
Terraformにも対応されていたのでTerraformにてfirewallの設定を行ってみました。
VKE Firewall 機能について
VKEのFirewall機能はノード(インスタンス)に対して、Firewallが自動でリンクする機能のようです。
なので、Firewall 機能を有効にしてノードを増やすと設定したFirewallのルールがノードに適用されていました。
※ ドキュメントを見つけれなかったですが、管理画面を見ている限りFirewallはインスタンスに設定されているようでした。
Terraformで設定してみる(管理画面も必要)
Vultrのプロバイダ 2.18 以上で Kubrenetes のArgument Reference
のオプションに enable_firewall
が追加されます。
したがって enable_firewall = true
を設定すると有効化されます。
resource "vultr_kubernetes" "main" { region = <リージョン> version = <バージョン> enable_firewall = true }
しかし、plan してみるとわかるのですが現在(2023/12/21)クラスタが再作成されてしまいます。 新しくクラスタを作る場合は問題ないのですが既存クラスタで設定する場合は不都合がありました。
+ enable_firewall = true # forces replacement
そこでライフサイクルを設定して管理画面から有効化します。
resource "vultr_kubernetes" "main" { region = <リージョン> version = <バージョン> enable_firewall = true lifecycle { ignore_changes = [enable_firewall] } }
terraform plan
して apply してみるとステートファイルが書き換わっていると思います。
(planやらapplyやらしていたら、ステートファイルがいつの間にか変わっていたので、多分applyが必要?)
"firewall_group_id": "<firewallのid>",
firewallのルール設定してみる
先ほど設定したFirewallはTerraform内で参照することができるので下記のようにルールを追加することが可能です。
resource "vultr_firewall_rule" "main" { firewall_group_id = vultr_kubernetes.main.firewall_group_id protocol = "tcp" ip_type = "v4" subnet = "0.0.0.0" subnet_size = 0 port = "22" notes = "ssh" }
さいごに
いつの間にかVKEにFirewallを設定できるようになって、インスタンスに対して自動でIP制限を設定できるようになっていました。今までインスタンスが外部に公開されてしまう課題に対しては個別にインスタンスに設定する必要がありましたがアップデートにて自動で設定されるようになり管理が簡単になりました。