使用Linode LKE和Akamai EdgeDNS和GTM来构建多地区架构
使用Linode LKE和Akamai GTM来构建多区域架构。
本文介绍了使用Terraform构建基于Linode Kubernetes Engine(LKE)和Akamai GTM/Edge DNS的负载平衡配置的步骤。
在这个例子中,将在东京和新加坡两个地区分别部署LKE,并使用GTM来实现基于DNS的负载均衡,如下图所示。
Linode容器服务(LKE)是什么?
Linode Kubernetes Engine(LKE)是一个完全托管的Kubernetes(k8s)容器编排引擎,用于部署和管理容器化应用程序和工作负载。
特征
-
- LKEはコンソールから数クリックでプロビジョニング、管理できる。
-
- Rancher、Helm、オペレーターなど、人気のあるK8s関連ツールとの統合をサポートしている。
-
- コントロールプレーンは無料で利用することができ、オプションで冗長構成(HA)にもすることができる。
- LKEが動作するインスタンスやネットワーク転送料はハイパースケーラーと比べて断然安く、低コストで構築することができる。
参考:LKE
Akamai Edge DNS 是什么?
Edge DNS是由Akamai提供的可扩展的权威DNS服务。
它具备抵御最大规模DDoS攻击的鲁棒性,并附带100%的服务可用性协议(SLA),这使得它能够稳定地随时提供网站和应用服务器等的名称解析。
参考: Akamai 边缘 DNS
阿卡迈全球流量管理(GTM)是什么?
全球流量管理(GTM)是Akamai提供的基于DNS的负载均衡解决方案。
我们提供了多种分类功能。
-
- Mirror Failover (サイトダウン時にバックアップへ)
-
- Map by geographic location etc. (地理的振り分け)
-
- Weighted Random Load Balancing etc. (比率指定で負荷分散)
- Performance-Based Load Balancing (応答時間が短くなるように負荷分散)
参考:阿卡迈全球流量管理(Akamai GTM)
构建LKE集群
我们将使用此存储库来构建环境。
下载存储库。
git clone git@github.com:isss802/lke-gtm-demo.git
cd lke-gtm-demo/lke
开始使用Linode API,加载API Token。
export TF_VAR_token=
执行用于构建LKE的Terraform代码,分别针对新加坡区域和东京区域。
terraform apply
为了使用 kubectl,我们将配置保存到文件中。
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 发行证书。
我们将使用Terraform来构建Edge DNS并使用Let’s Encrypt证书来进行NodeBalancer的配置。请事先注册好凭证信息。
将Edge DNS的Terraform配置文件移至指定的目录。
cd ../edgedns
在Terraform中,我们创建一个新的区域以供Edge DNS使用,并注册用于GTM的DNS记录。此外,我们使用Let’s Encrypt来发行通配符证书,验证过程中使用DNS。
输入适当的值到变量中。
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设置的负载均衡器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记录进行连接验证,并且能够成功显示网页内容,则表示没有问题。
请将以下内容在中文中进行本地化转述,只需提供一种选择:
https://test.example.com
转述:请提供https://test.example.com的网址。
总结
通过结合Akamai和Linode的功能,可以构建多地区的冗余架构。
同时,通过使用Terraform可以实现自动化构建。
相关文章
在 Akamai Technologies 合作社的 Qiita 上,我们发布了一些面向开发者的文章,其中包括与 Linode 相关的内容。