摘要: 在Kubernetes集群中,Ingress做为集群流量接入层,Ingress的高可靠性显得尤其重要,今天咱们主要探讨如何部署一套高性能高可靠的Ingress接入层。前端
简介node
在Kubernetes集群中,Ingress是受权入站链接到达集群服务的规则集合,为您提供七层负载均衡能力,您能够经过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。做为集群流量接入层,Ingress的高可靠性显得尤其重要,今天咱们主要探讨如何部署一套高性能高可靠的Ingress接入层。nginx
高可靠部署架构git
高可靠性首先要解决的就是单点故障问题,通常经常使用的是采用多副本部署的方式,咱们在Kubernetes集群中部署高可靠Ingress接入层一样采用多节点部署架构,同时因为Ingress做为集群流量接入口,建议采用独占Ingress节点的方式,以免业务应用与Ingress服务发生资源争抢。github
如上述部署架构图,由多个独占Ingress实例组成统一接入层承载集群入口流量,同时可依据后端业务流量水平扩缩容Ingress节点。固然若是您前期的集群规模并不大,也能够采用将Ingress服务与业务应用混部的方式,但建议进行资源限制和隔离。后端
在阿里云容器服务集群中部署高可靠Ingress接入层架构
部署说明app
这三者之间依据标签node-role.kubernetes.io/ingress=true进行关联:负载均衡
1.Ingress SLB后端只会挂载打标了node-role.kubernetes.io/ingress=true的集群Node;ide
2.Ingress Pod只会被部署到打标了node-role.kubernetes.io/ingress=true的集群Node;
开始部署
一、建立 Kubernetes 集群
在建立集群以前,咱们须要依据自身具体业务场景来适当规划集群的规模以及集群内各节点角色,好比业务节点数、Ingress节点数等,注意集群默认会初始化3台Master节点来部署集群管控服务。
咱们经过阿里云容器服务控制台建立一个Kubernetes集群,这里以建立3台Worker节点集群为例。
二、打标 Ingress Node
因为测试集群规模较小,咱们暂采用混部的方式:即3台Worker节点既做为业务节点又做为Ingress节点。咱们给3台Worker节点同时打标node-role.kubernetes.io/ingress=true,注意不建议将Ingress Pod部署在集群Master节点上,由于Master节点承载着集群的全部管控服务,以免集群接入流量太高时对管控服务形成影响。
~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdb node-role.kubernetes.io/ingress=true node "cn-hangzhou.i-bp1ecwpuisra0y0bizdb" labeled ~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdc node-role.kubernetes.io/ingress=true node "cn-hangzhou.i-bp1ecwpuisra0y0bizdc" labeled ~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdd node-role.kubernetes.io/ingress=true node "cn-hangzhou.i-bp1ecwpuisra0y0bizdd" labeled ~ kubectl get no NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp11psgsvkxklfvb8vvj Ready master 1h v1.9.3 cn-hangzhou.i-bp183t1a82uun0s12ddr Ready master 1h v1.9.3 cn-hangzhou.i-bp1ecwpuisra0y0bizdb Ready ingress 56m v1.9.3 cn-hangzhou.i-bp1ecwpuisra0y0bizdc Ready ingress 56m v1.9.3 cn-hangzhou.i-bp1ecwpuisra0y0bizdd Ready ingress 57m v1.9.3 cn-hangzhou.i-bp1gb2498ykvy23k0jsy Ready master 1h v1.9.3
三、建立 Ingress 服务
集群初始化时默认部署了一个Ingress Controller,具体部署说明请参考。这里咱们经过DaemonSet方式将其从新部署到目标Ingress Node上,固然您也能够采用Deployment配合亲和性方式来部署。
~ kubectl -n kube-system delete deploy nginx-ingress-controller deployment "nginx-ingress-controller" deleted ~ kubectl create -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-controller-ds.yml daemonset "nginx-ingress-controller" created ~ kubectl -n kube-system get ds | grep nginx-ingress-controller nginx-ingress-controller 3 3 3 3 3 node-role.kubernetes.io/ingress=true 42s ~ kubectl -n kube-system get pod -o wide | grep nginx-ingress-controller nginx-ingress-controller-57j4l 1/1 Running 0 1m 172.16.3.2 cn-hangzhou.i-bp1ecwpuisra0y0bizdd nginx-ingress-controller-d7cxb 1/1 Running 0 1m 172.16.5.7 cn-hangzhou.i-bp1ecwpuisra0y0bizdc nginx-ingress-controller-m9w75 1/1 Running 0 1m 172.16.4.2 cn-hangzhou.i-bp1ecwpuisra0y0bizdb
四、更新 Ingress SLB 服务
集群初始化时默认部署了一个Ingress LoadBalancer Service,具体部署说明请参考,这里须要更新下Ingress LoadBalancer Service,以自动识别挂载打标的Ingress Node。
~ kubectl apply -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-slb-service.yml service "nginx-ingress-lb" configured
五、此时具备3个Ingress实例的高可靠接入层部署完成。
快速扩容
随着您的业务流量不断增加,集群规模不断扩大,您只须要简单地经过打标的方式来快速扩容Ingress接入层。
全方位监控
集群Ingress接入层的监控是必不可少的,您能够经过阿里云容器服务监控以及阿里云云监控对Ingress Pod和Ingress Node进行全方位监控。
阅读更多干货好文,请关注扫描如下二维码: