Linode LKEとAkamai GTMを利用してマルチリージョン構成を組む
Linode Kubernetes Engine (LKE)とAkamai GTM/Edge DNSを使った負荷分散構成をTerraformを利用して構築する手順を紹介します。
今回の構成例では、TokyoとSingapore、それぞれのRegionにLKEを展開し、下図のようにGTMにてDNSによる負荷分散を実施します。
Linode Kubernetes Engine (LKE)とは
Linode Kubernetes Engine (LKE) は コンテナ化されたアプリケーションやワークロードを展開・管理するための、フルマネージドのKubernetes(k8s)コンテナオーケストレーションエンジンです。
特徴
- LKEはコンソールから数クリックでプロビジョニング、管理できる。
- Rancher、Helm、オペレーターなど、人気のあるK8s関連ツールとの統合をサポートしている。
- コントロールプレーンは無料で利用することができ、オプションで冗長構成(HA)にもすることができる。
- LKEが動作するインスタンスやネットワーク転送料はハイパースケーラーと比べて断然安く、低コストで構築することができる。
Akamai Edge DNS とは
Edge DNS はAkamai が提供するスケーラブルな権威 DNS サービスです。
DNSに対する最大規模の DDoS 攻撃から防御するための耐障害性を備え、 100% アップタイムのサービスレベル契約(SLA)が付属しているため、 Web サイトやアプリケーションサーバーなどの名前解決をいつでも安定して提供できるようになります。
Akamai Global Traffic Management (GTM) とは
Global Traffic Management (GTM) とはAkamaiが提供する DNS ベースでロードバランシングを提供するソリューションです。
以下の様々な振り分け機能を提供しています。
- Mirror Failover (サイトダウン時にバックアップへ)
- Map by geographic location etc. (地理的振り分け)
- Weighted Random Load Balancing etc. (比率指定で負荷分散)
- Performance-Based Load Balancing (応答時間が短くなるように負荷分散)
LKE Clusterの構築
本環境の構築にはこちらのレポジトリを利用して行っていきます。
レポジトリをダウンロードします。
git clone git@github.com:isss802/lke-gtm-demo.git
cd lke-gtm-demo/lke
LinodeのAPI Tokenを読み込ませます。
Getting Started with the Linode API
export TF_VAR_token=
シンガポールリージョンと東京リージョンにLKEを構成するTerraformを実行します。
terraform apply
kubectlを利用するため、configをファイルに保存します。
export KUBE_VAR=`terraform output -raw kubeconfig_1` && echo $KUBE_VAR | base64 -d > ../kubectl/lke-cluster-config-1.yaml
export KUBE_VAR=`terraform output -raw kubeconfig_2` && echo $KUBE_VAR | base64 -d > ../kubectl/lke-cluster-config-2.yaml
Edge DNSの構築とLet's Encryptで証明書の発行
Edge DNSの構築とNodeBalancerに利用するLet's Encryptの証明書の発行をTerraformで行います。
事前にクレデンシャル情報は登録しておきます。
Edge DNSのTerraformの構成ファイルがあるディレクトリに移動します。
cd ../edgedns
Terraformでは、Edge DNSに新しいゾーンを作成し、GTMに利用するDNSレコードを登録します。
また、Let's Encryptでワイルドカード証明書を発行、認証はDNSを利用します。
Variableに適切な値を入力します。
vim variables.tf
Terraformを実行します。
terraform apply
Let's Encryptで発行した証明書をファイルに保存します。
terraform output -raw full_cert > ../kubectl/cert.pem
terraform output -raw prikey > ../kubectl/key.pem
Kubectlを利用して、コンテナとNodeBalancerを構築
NginxのデプロイとNodeBalancerの作成を行います。
Kubernetesの設定ファイルがあるディレクトリに移動します。
cd ../kubectl
kubectlを利用するため、configを設定します。
export KUBECONFIG=lke-cluster-config-1.yaml:lke-cluster-config-2.yaml
どちらのクラスターに接続しているか確認します。
kubectl config get-contexts
証明書をアップロードします。
kubectl create secret tls lb --cert cert.pem --key key.pem
Nginxをデプロイします。
kubectl create -f deployment.yaml
NodeBalancerの作成をします。
kubectl create -f service.yaml
GTMの設定に利用するLBのIPを確認します。
kubectl get service
もう一つのクラスターに接続し、同様の手順を実施します。
kubectl config get-contexts
kubectl config use-context [cluster2]
kubectl create secret tls lb --cert cert.pem --key key.pem
kubectl create -f deployment.yaml
kubectl create -f service.yaml
kubectl get service
GTMの構築
GTMのTerraformの構成ファイルがあるディレクトリに移動します。
cd ../gtm
Variableに適切な値を入力します。
vim variables.tf
本構成では東京リージョンとシンガポールリージョンに1:1でDNSの振り分けを行います。
設定を確認し、Terraformを実行します。
terraform apply
アクセスを確認
Edge DNSに登録したDNSレコードにて、ブラウザから接続確認を行い画面が表示されれば問題ありません。
まとめ
AkamaiとLinodeの機能を組み合わせることによって、マルチリージョンでの冗長構成を構築することが可能となります。
また、Terraformを利用することにより構築の自動化も図ることができます。
関連記事
アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。