aws生产实践-20:使用helm在aws的eks中部署apisix2.8.0

2022-01-04 19:34:26 浏览数 (1)

目录:

(1).概述

(2).准备工作

(3).helm部署apisix到eks

1.修改apisxi的helm相关文件

2.NodePort方式部署

(4).helm部署apisix-dashboard到eks

1.支持修改etcd.prefix

1.1.修改文件configmap.yaml

1.2.修改apisxi-dashboard的helm相关文件

2.helm部署apisix-dashboard

(5).helm部署apisix-controller到eks

(6).关于服务暴露

(7).参考资料

(1).概述

apisix有3组:生产环境由于业务关系划分两组apisix,然后运维单独使用一组(只有一个pod)来管理所有的后台/运维性质的服务转发。

从apisix社区得知:

由于用k8s部署etcd集群会存在无法弹性扩容和节点漂移引起的无法正常加入集群的问题,所以我们使用k8s集群外部的etcd集群。etcd集群搭建,请参考:

(2).准备工作

创建专用namespace:

kubectl create namespace devops-ingress-apisix

添加仓库:

apisix和apisix-controller使用这个仓库:

helm repo add bitnami https://charts.bitnami.com/bitnami

apisix-dashboard使用这个仓库:

helm repo add apisix https://charts.apiseven.com

mkdir -p /app/3rd/helm/charts/devops-apisix

cd /app/3rd/helm/charts/devops-apisix

下载apisix和apisix-ingress-controller:

git clone https://github.com/apache/apisix-helm-chart.git

cd /app/3rd/helm/charts/devops-apisix/apisix-helm-chart

(3).helm部署apisix到eks

1.修改apisxi的helm相关文件

要修改版本,aws-loadbalancer的annonations等配置。

cd /app/3rd/helm/charts/devops-apisix/apisix-helm-chart

helm dependency update /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix

由于我们使用的是2.8,所以也要把chart版本也改为2.8。

vi /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix/Chart.yaml

image的版本在执行helm时用--set指定。

2.NodePort方式部署

使用NodePort暴露apisix服务,并且为了省钱(因为只是运维用一个pod够了),指定devops分组下的一台机器的标签是“devops-apisix=yes”,让apisix的pod只在这台node,然后aws负载均衡接这个node端口。

打标签:

kubectl label nodes nodename devops-apisix=yes

安装 Apache APISIX:

helm install devops-apisix /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix

--set apisix.image.tag=2.8-alpine

--set gateway.type=NodePort

--set gateway.http.nodePort=31383

--set apisix.nodeSelector.devops=yes

--set apisix.nodeSelector.devops-apisix=yes

--set allow.ipList={0.0.0.0/0}

--set etcd.enabled=false

--set etcd.prefix=/apisix-devops-in-bitvito-main-eks

--set admin.allow.ipList={0.0.0.0/0}

--set etcd.host={http://10.0.47.49:2379,http://10.0.33.177:2379,http://10.0.41.98:2379}

--namespace devops-ingress-apisix

验证:

curl http://node-ip:nodeport

特别注意:这里要把eks的安全组配对,否则不通。和你的vpc网络范围一致即可。

最后在eks集群外的etcd上查看:

最后我们再验证下版本号:

查看apisix chart版本:

helm list -n devops-ingress-apisix

查看apisix-pod的image版本:

(4).helm部署apisix-dashboard到eks

1.支持修改etcd.prefix

这里有一个问题:

helm安装apisix-dashboard无法指定etcd.prefix。我们需要手动修改相关文件让他支持。

1.1.修改文件configmap.yaml

这个文件中定义了apisix-dashboard的config.yaml文件内容:

vi /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix-dashboard/templates/configmap.yaml

下图是configmap.yaml原文件:

我们在其中加入prefix的配置:

prefix: {{ .prefix }}

1.2.修改apisxi-dashboard的helm相关文件

由于我们使用的是2.8,所以也要把chart版本也改为2.8,image版本在values.yaml中改也可以在执行helm时用--set指定。

vi /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix-dashboard/Chart.yaml

修改admin登陆密码:

vi /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix-dashboard/values.yaml

2.helm部署apisix-dashboard

注意,dashboard要用nodeport暴露,这样才能访问到进行自我配置,然后就配置域名访问,安全组限制只有V**登陆访问即可。

修改文件:

vi /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix-dashboard/templates/service.yaml

将dashboard修改为nodeport方式暴露,是为了第一次能够进入dashboard进行设置。

helm install devops-apisix-dashboard /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix-dashboard

--namespace devops-ingress-apisix

--set image.tag=2.8

--set nodeSelector.devops=yes

--set nodeSelector.devops-apisix=yes

--set config.conf.etcd.endpoints={10.0.47.49:2379,10.0.33.177:2379,10.0.41.98:2379}

--set config.conf.etcd.prefix=/apisix-devops-in-bitvito-main-eks

最后我们check下版本:

查看apisix-dashboard的charts版本:

查看apisix-dashboard-pod的image版本:

(5).helm部署apisix-controller到eks

helm install devops-apisix-ingress-controller /app/3rd/helm/charts/devops-apisix/apisix-helm-chart/charts/apisix-ingress-controller

--namespace devops-ingress-apisix

--set config.apisix.serviceName=devops-apisix-admin

--set nodeSelector.devops=yes

--set nodeSelector.devops-apisix=yes

--set config.apisix.serviceNamespace=devops-ingress-apisix

(6).关于服务暴露

本文是以运维侧举例,都是代理后台,运维系统,要求只能连接V**后访问,这样的话,只能在容器外搞一台机器部署nginx,反向代理到容器内部的apisix的nodeport。

原因:

aws-alb不能绑定弹性IP,这样公网IP不固定,没有办法给V**配置route,不能用;而nlb不是7层,有很大局限性不能用;倒是可以在aws-alb前加aga,但是要多花钱,也不能用。

下篇文章会以apisix-dashboard和kubesphere-console为例说明如何配置。

(7).参考资料

1.How to install APISIX only?

https://apisix.apache.org/zh/docs/helm-chart/FAQ/

2.Amazon EKS 和 APISIX ingress controller 如何配合使用来管理复杂流量

https://www.apiseven.com/zh/blog/how-Amazon-EKS-and-APISIX-ingress-controller-work-together-to-manage-complex-traffic

3.aws-loadbalancer在eks中的annotations官方定义

https://github.com/kubernetes-sigs/aws-load-balancer-controller/blob/main/docs/guide/service/annotations.md

4.Amazon EKS 上的应用程序负载均衡

https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/alb-ingress.html

5.Ingress annotations

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/

0 人点赞