BIGLOBEのキャッシュDNS基盤をOpenShiftに移行できるか検証してみた
ビッグローブ株式会社 プロダクト技術本部
ネットワーク技術部 開発G
島袋 健司
DNS Summer Day 2024
2024年6月21日
Copyright © BIGLOBE Inc. 2024, All rights reserved.

自己紹介
氏名

島袋 健司

経歴

2021年4月

BIGLOBEに新卒で入社〜2024年3月

バックボーンNWの設計・運用チームに所属→ ルータ/スイッチ/NW構成変更等を経験

2024年4月〜

開発Gに異動→ DNSキャッシュサーバのコンテナ化を担当※ 気づいたらアサインされていた...

出身地

神奈川県座間市 ※ 沖縄出身ではありません。夏は苦手ですｗ

趣味

旅行、あんまん、日本酒
2Copyright © BIGLOBE Inc. 2024, All rights reserved.

背景3

Copyright © BIGLOBE Inc. 2024, All rights reserved.

BIGLOBEのDNS基盤の現状
BIGLOBEのキャッシュDNS構成●●●

拠点：4拠点
台数：200VM以上
BIND/Unboundの２種のOSSを利用⇛10年以上も変わらず昔ながらのVM基盤の構成で運用中
NTT東日本フレッツ網

BIGLOBE
固定網
ユーザ

BIGLOBEBackBone
NTT西日本
フレッツ網

DNS

DNS

DNS

DNS

DNS

DNS・・・

DNS

DNS

DNS

DNS

DNS

DNS・・・

A10 LB

DNS

DNS

DNS

DNS

DNS

DNS・・・

A10 LB

DNS

DNS

DNS

DNS

DNS

DNS・・・

A10 LB

A10 LB

4Copyright © BIGLOBE Inc. 2024, All rights reserved.

現行キャッシュDNS基盤の問題
・脆弱性対応：BIND/Unboundで年に数回緊急度の高い脆弱性がでる。
1週間以内にバッチ適応Verを評価して、人力リリース
・OS更改：
数年に一度OSの更改で数百台の更新作業
・拠点追加：
CDNトラフィックを各拠点でオフロードするにはキャッシュDNS基盤も置きたい
・手動なスケールアウト
突発的なクエリ増加には対応できず、数時間かけてVMを足して手動でLBへ組み込み⇛基盤のスケールやセキュリティ対応の緊急化に伴い、現場は保守・運用に疲弊。。。

5Copyright © BIGLOBE Inc. 2024, All rights reserved.

コンテナ技術導入によるDNS基盤のSLA劇的向上
コンテナ基盤化することで、可搬性・リソースの効率化・OSやDNSアプリの更新自動化を実現してSLAを向上させる
現状

将来像

コンテナ
イメージ

リソース消費 大

DNSアプリDNSアプリ

OS

OS

仮想サーバ

仮想サーバ

Agility

DNSアプリ…

リソース消費 小

DNS
コンテナ

OS

DNS
コンテナ

…

DNS
コンテナ

仮想サーバ

コンテナ基盤

DNS
コンテナ
Portability

VM基盤
物理サーバ

物理サーバ

VMのOS単位での構築・運用・保守となり、DNSの柔軟な運用が困難

Cloud

軽量なコンテナ化によりDNSの柔軟な運用及び自動化が可能
6

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Kubernetes®について構成変更

・KubernetesとはGoogleのクラスタ管理システムBorgをベースにデファクトスタンダードとなったコンテナオーケストレーション

Manifest

ユーザ
トラフィック・コンテナオーケストレーションの主要機能- スケジューリング：
コンテナの最適なリソース配置を行う- 抽象化：
各クラウド・オンプレミスのリソースを抽象化する- セルフヒーリング：
障害が起こっても自動で修復する⇛ユーザトラフィックを捌くWorker Nodeだけでなく沢山機能を持っているMaster Nodeの管理が重要
7

Copyright © BIGLOBE Inc. 2024, All rights reserved.

BIGLOBEのコンテナキャッシュDNS基盤向けの４つの必須条件
・オンプレミスキャッシュDNSは低レイテンシーが必須。またDNS用の自前グローバルIPもあり、クラウド上に持っていくのも難しい。自前の各拠点上で基盤を実装する必要がある
・Master Nodeの統合管理、自動構築
各拠点にクラスターを配置するので、各拠点のMaster Nodeを楽に構築、統合管理したい
・物理LBとの連携
物理LBとのデュアルスタック構成が必須。また、LBの性能要件が高く求められるため、既存のVLAN構成からは変えたくない・コンテナの自動展開(CI/CD)
各拠点へ同じコンテナイメージを横断で自動デプロイ・正常性確認も自動化したい
Red Hat®社様に相談したところ
Red Hat社のKubernetesディストリビューションのOpenShift®とACMならできる！！とのことで検証スタート
8Copyright © BIGLOBE Inc. 2024, All rights reserved.

Red Hat OpenShiftのACMとはHubCluster

ACM（Red Hat® Advanced Cluster
Management for Kubernetes）とはOpenShift®をHub＆Spoke構成にして、Spokeとなる各クラスターを集中管理する
仕組み
主に以下の4つの機能を提供
・管理対象クラスターの可視化
・クラスターのライフサイクル管理
・クラスターをまたがったアプリのデプロイ・クラスターに対する統一ポリシーの適応

SpokeCluster

参考HP：https://rheb.hatenablog.com/entry/2020/12/21/%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE_Kubernetes_%E3%82%AF%E3%83%A9%E
3%82%B9%E3%82%BF%E3%83%BC%E3%82%92%E7%AE%A1%E7%90%86%E3%81%97%E3%81%9F%E3%81%84_%EF%BD%9E_ACM_2.1%E3%81%AE%
E3%83%AA%E3%83%AA

9Copyright © BIGLOBE Inc. 2024, All rights reserved.

PoCやってみた

10

Copyright © BIGLOBE Inc. 2024, All rights reserved.

PoC構成DNSコンテナの構成テンプレート

11

通常のk8sでのコンテナ
NWはOverlayとなるが、Multusを使うことでVLANでの外部通信が可能に

Copyright © BIGLOBE Inc. 2024, All rights reserved.

コンテナイメージを展開

PoCのCI/CDの流れ(抜粋)
新しいDNSアプリのversionが公開

オンプレのクラスタへ
新バージョンのコンテナをデプロイ

新しいversionのコンテナイメージを作成

起動した新バージョンのコンテナの動作確認

本番

コンテナイメージを展開
コンテナ
デプロイJob

オンプレのクラスタへ
新バージョンのコンテナをデプロイ起動した新バージョンのコンテナの動作確認

Stage

動作確認
Job
12

Copyright © BIGLOBE Inc. 2024, All rights reserved.

PoCで出たトラブルについて

13

Copyright © BIGLOBE Inc. 2024, All rights reserved.

①A10 LBとの連携について
ベンダーのA10社が公式にKubernetes/OpenShiftとのLB連携機能(Ingress Controller)として「TKC」※を提供しているが、、、※https://www.a10networks.co.jp/news/blog/load-balancing-traffic-to-applications-in-kubernetes-cluster.html⇛DualStack(IPv4+IPv6)構成（DNSでは必須）に対応していなかった。
現状はIPv4のみの動作サポート⇛KubernetesのCNI(NWプラグイン)はCalicoのIPIPのみサポート。
(Overlayはスループット劣化があるので使いたくない。VLANでLBと連携したい)

Multus(VLAN)およびIPv6対応を実現するLB連携機能を
BIGLOBEにて簡易的な連携ツールを内製開発中です
また、A10社側にも対応の要望を依頼しております14

Copyright © BIGLOBE Inc. 2024, All rights reserved.

②IPｖ６のアドレス払い出し周りについて

15

Copyright © BIGLOBE Inc. 2024, All rights reserved.

②-1 IPv6のRA機能とMultusのIPAMの機能が競合
Multusが右の設定で指定されたアドレスプール(赤太字部分)から払い出しするが、PODが起動した際にRA機能が働き、別のIPv6アドレスが自動でついてしまった。
その自動付与されたIPv6アドレスが優先され、外部通信できない問題が発生！！
⇛IPv6のRA機能を止めるにはカーネルパラメータを設定が必須だったがコンテナのセキュリティ設計的に弄りたくなかったのでワークアラウンドを検討

namespace: default
MultusのrawCNIConfig: |設定{"name": "tagvlanXXX","cniVersion": "0.3.1","type": "ovn-k8s-cni-overlay","topology": "localnet","mtu": 1500,"vlanID": XXX,
"netAttachDefName": "default/tagvlanXXX","subnets":"10.XX.ZZ.0/24,2XXX:YYY:31f:20::/64"}
type: Raw

コンテナ内のアドレス状態
3: net1@if13872:＜省略＞
inet6 2XXX:YYY:31f:20:858:aff:fe33:bf0/64 scope global dynamicmngtmpaddr
valid_lft 2425274sec preferred_lft 438074sec
inet6 2XXX:YYY:31f:20::f0/64 scope global
valid_lft forever preferred_lft forever

ワークアラウンド
InitContainerで自動付与されたアドレスを消す処理とした※InitContainerとは、PODにてメイン処理をするコンテナが起動する前に前処理を行うコンテナのこと

赤枠がRA機能で自動付与されたアドレス。こちらのアドレスが優先されてしまう。
青枠のアドレスだけ付与したい。。。
16

Copyright © BIGLOBE Inc. 2024, All rights reserved.

②-2 既存払い出しアドレスのexclude機能がおかしい
LBなどの物理NW機器で使っているアドレスをMultusで使わないようにしたい⇛excludeSubnetsでCIDR単位で除外できる！！！
しかし、、、IPv6CIDRの指定の仕方でPODが起動しない・・・
CIDR範囲を大きい範囲にしないのがおすすめ。
namespace: default
rawCNIConfig: |{"name": "tagvlanXXX","cniVersion": "0.3.1","type": "ovn-k8s-cni-overlay","topology": "localnet","mtu": 1500,"vlanID": XXX,
"netAttachDefName": "default/tagvlanXXX","subnets": "10.XX.ZZ.0/24,2XXX:YYY:31f:20::/64","excludeSubnets": "2XXX:YYY31f:20::/65}
type: Raw

namespace: default
rawCNIConfig: |{"name": "tagvlanXXX","cniVersion": "0.3.1","type": "ovn-k8s-cni-overlay","topology": "localnet","mtu": 1500,"vlanID": XXX,
"netAttachDefName": "default/tagvlanXXX","subnets": "10.XX.ZZ.0/24,2XXX:YYY:31f:20::/64","excludeSubnets": "2XXX:YYY31f:20::/121}
type: Raw

こっちは
起動OK

範囲が大きいと以下のPOD起動
エラーが起こる

Events:Type Reason
Age
From Message---- ------------ ------Warning FailedCreatePodSandBox <中略>
: error adding container to network "tagvlanXXX": CNI request failed with status 400: '[default/unbound3 <中略>
network tagvlanXXX NAD default/tagvlanXXX] failed to get pod annotation: timed out waiting for annotations: context deadline exceeded

この挙動はサポート
問い合わせ中17

Copyright © BIGLOBE Inc. 2024, All rights reserved.

③Multus + OVN-KubernetesでのStatic Routingの実装

18

Copyright © BIGLOBE Inc. 2024, All rights reserved.

VLANネットワーク内のルータへDGWを向けたい
Multusが自体はIPAMの設定で指定できる

DNSコンテナ

が、、、

eth0

OVN-Kubernetesと連携させるやり方だと

ホスト
OS
もともとのDGW

net1

LBのVIP
変更先のDGW指定できない。。。
(egressの設定を入ればDGWの設定は入るが、本構成ではいらない。。。)⇛InitContainerで別途下記処理を実装
・自動DGW設定削除
・指定したDGW設定追加
ipamフィールドはovn-kubernetes向けには指定できなかった
19

Copyright © BIGLOBE Inc. 2024, All rights reserved.

まとめ
LB連携機能やIPv6周りの実装が足りていない面がまだありますが、ACMおよびOpenShiftのアーキテクチャ構成であれば、BIGLOBEがめざしているDNSコンテナ基盤が実現できるとわかるPoCとなったので、足りない部分は開発して補っていき、DNSコンテナ基盤のリリースに向けて頑張っていきます。
OpenShift/Kubernetes/DNSの概要は知っているがほとんど触ったことがないため、まずは機能を覚えるところから頑張ります。
慣れてきたら、皆様と技術力を高め合いながらこの業界を盛り上げます。

20

Copyright © BIGLOBE Inc. 2024, All rights reserved.

商標について※ NTTは、日本電信電話株式会社の登録商標です。
※ フレッツは、東日本電信電話株式会社および西日本電信電話株式会社の商標または登録商標です。
※ Kubernetesは、米国およびその他各国における The Linux Foundationの商標または登録商標です。
※ Googleは、Google LLC の商標です。
※ Red Hat 、Red Hat ロゴ および OpenShiftは、米国およびその他の国における Red Hat, Inc. またはその子会社の商標または登録商標です。
※ AWSおよびAWSロゴは、Amazon.com, Inc.またはその関連会社の商標です。
※ 記載している企業、団体、製品、サービス等の名称は各社またはその関連会社の商標または登録商標です。

21

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Appendix

23

Copyright © BIGLOBE Inc. 2024, All rights reserved.

ROSA(ACM有効化)の管理画面

24

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Demo内容(Stageへの展開準備)
新しいversionのunboundのソースが公開

新しいversionのUnboundコンテナイメージを作成
Job名：Create DNS Container Image
無事イメージビルドできたらオンプレのStage環境にて新しいversionのUnboundコンテナイメージを展開
Job名：Actions Runner Controller Demo25

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Demo内容(Stageへ展開、動作確認)
ACMによる各環境のサブスクリプションのYAML情報に指定されているコンテナのバージョンを更新(プルリク▶承認)

Stageのクラスタへ新バージョンのunboundのコンテナイメージをデプロイ起動した新バージョンのunboundに動作確認

26

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Demo内容(本番へ展開)
オンプレの本番環境にて新しいversionのUnboundコンテナイメージを展開
Job名：Actions Runner Controller Demo

ACMによる各環境のサブスクリプションのYAML情報に指定されているコンテナのバージョンを更新(プルリク▶承認)

Prdのクラスタへ新バージョンのunboundのコンテナイメージをデプロイ

27

Copyright © BIGLOBE Inc. 2024, All rights reserved.

Demo内容(本番へ展開)

起動した新バージョンのunboundに動作確認（DNSクエリ応答）リリース完了！！

28

Copyright © BIGLOBE Inc. 2024, All rights reserved.

ROSA(ACM)でのUIからも各環境のデプロイ状況が見れる29

Copyright © BIGLOBE Inc. 2024, All rights reserved.

ACMでどうやって各クラスタ(環境)に分けてデプロイしているかクラスター単位でenvのラベルを付与。
ACMからデプロイする
サブスクリプションの定義のときにPlacementで指定する（GitOpsOperatorで更に効率化できますが、まずはシンプルな管理方法を試しました）30

Copyright © BIGLOBE Inc. 2024, All rights reserved.