はじめに
今回はmicrok8sでIPv6をやった話です。
IPv6が使えるとものすごく便利になるものですね。
私は今回、IngressをMetalLBの外部IP設定で使っていたのですが、IPv4だとポート開放するのが少し面倒に感じていました。
そのため、IPv6に対応させようというのが発端です。
注意点
一番大きな注意点として、IPv6に対応させるとなると、クラスタを組み直す必要があったりします。
これを聞いて少し尻込みする方もいるかもしれませんが、最初さえやってしまえばあとは楽なもんです。
こればかりは耐えましょう...
なぜクラスタを組み直す必要があるかというと、一つのノードで設定しても、マスターノードと設定の同期が行われるため、無効化されてしまうためです。
他の注意点としては、
- 全てのノードで設定することが推奨されている
- microk8sを再インストールする必要がある
ですね。
microk8sを設定する
さて、実際に設定していきましょう。
まずは、microk8sをアンインストール
snap remove microk8s
microk8sの設定ファイルを編集するのですが、どこにあるかというと、/var/snap/microk8s/common/.microk8s.yaml
にあります。
ですが、おそらく、最初はディレクトリすらないのでディレクトリもファイルも作ってしまいましょう。
ちなみにこのファイルでクラスタドメインなどの設定もできるらしいですが、面倒なのでやったことはないですね()
IPv6の設定の書き方ですが、
---
version: 0.1.0
extraCNIEnv:
IPv4_SUPPORT: true # IPv4を有効に
IPv4_CLUSTER_CIDR: 10.3.0.0/16 # IPv4のクラスターIPのCIDR
IPv4_SERVICE_CIDR: 10.153.183.0/24 # IPv4のサービスIPのCIDR
IPv6_SUPPORT: true # IPv6を有効に
IPv6_CLUSTER_CIDR: fd02::/64 # IPv6のクラスターIPのCIDR
IPv6_SERVICE_CIDR: fd99::/108 # IPv6のサービスIPのCIDR
extraSANs:
- 10.153.183.1 # クラスターネットワーク上のK8sコントロールプレーンPodのIP
基本的にこれをこのまま使えば良いでしょう。
そしてこのファイルを配置した状態で、再度microk8sをインストールします。
snap install microk8s --classic
サービス側の設定
お次はサービス側の設定です。
これに関しては至って簡単です。
まずはmetalLBから
spec:
addresses:
- 172.16.150.1-172.16.150.150
- 240b:13:xxxx:xxxx:150::100-240b:13:xxxx:xxxx:150::150
autoAssign: true
IPAddressPoolでこのようにIPv6の範囲も指定します。
次に、K8sのServiceのマニフェストファイルを編集します。
apiVersion: v1
kind: Service
...
spec:
clusterIP: 10.153.183.148
clusterIPs:
- 10.153.183.148
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
+ - IPv6
+ ipFamilyPolicy: PreferDualStack
- ipFamilyPolicy: SingleStack
ports:
...
type: LoadBalancer
こんな感じになればOKです。
このPreferDualStack
というのに書き換えるだけで大丈夫です。
すでにデプロイされているものを編集するのが一番手っ取り早いかと思います。
PreferDualStack
というのは、可能であればデュアルスタックで構成するという設定ですね。
RequireDualStack
というのもあり、こちらは、必ずデュアルスタックという設定なので、ここら辺は使い分けでいいかと思います。
今回よくわからなかった点
今回あんまり分からなかったなぁというのが一つあって、それは、IPv6の固定です。
IPv4であれば、MetalLBの仕様で固定できたのですが、IPv6だとエラーが出ます。
MetalLBのドキュメントを読んだのですが、よくわからなかったので、また今度やってみたいと思います。