开发者社区> 问答> 正文

Kubernetes  部署高可靠 Ingress Controller


在 Kubernetes 集群中,Ingress 是授权入站连接到达集群服务的规则集合,为您提供七层负载均衡能力,您可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。作为集群流量接入层,Ingress 的高可靠性显得尤为重要,本文探讨如何部署一套高性能高可靠的 Ingress 接入层。

前提条件



高可靠部署架构


高可靠性首先要解决的就是单点故障问题,一般常用的是采用多副本部署的方式,在 Kubernetes 集群中部署高可靠 Ingress 接入层同样采用多节点部署架构,同时由于 Ingress 作为集群流量接入口,建议采用独占 Ingress 节点的方式,以避免业务应用与 Ingress 服务发生资源争抢。

如上述部署架构图,由多个独占 Ingress 实例组成统一接入层承载集群入口流量,同时可依据后端业务流量水平扩缩容 Ingress 节点。当然如果您前期的集群规模并不大,也可以采用将 Ingress 服务与业务应用混部的方式,但建议进行资源限制和隔离。

高可靠Ingress接入层部署说明

  • Ingress SLB:Ingress 接入层前端 SLB 实例
  • Ingress Node:部署 Ingress Pod 的集群节点
  • Ingress Pod:Ingress 服务实例

这三者之间依据标签node-role.kubernetes.io/ingress=true进行关联:
  1. Ingress SLB 后端只会挂载打标node-role.kubernetes.io/ingress=true的集群 Node。
  2. Ingress Pod 只会被部署到打标node-role.kubernetes.io/ingress=true的集群 Node。


步骤1 给 Ingress Node 添加标签

  1. 登录 容器服务控制台
  2. 在 Kubernetes 菜单下,单击左侧导航栏中的 集群 > 节点,进入节点列表页面。
  3. 选择所需的集群,查看其下的节点,查看 worker 节点的实例 ID,最后在页面右上角单击 标签管理。
  4. 进入标签管理页面,勾选 worker 节点,单击 添加标签,为 worker 节点添加 node-role.kubernetes.io/ingress:true 标签,最后单击 确定。

在标签管理页面,您可看到 worker 节点已经成功添加该标签。

您也可登录 Master 节点,通过执行 kubectl label no nodeID node-role.kubernetes.io/ingress=true 为 worker 节点快速添加标签。

步骤2 创建 Ingress 服务

  1. 登录 容器服务控制台
  2. 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 部署,进入部署列表页面。
  3. 选择所需的集群和 kube-system 命名空间,找到 nginx-ingress-controller 组件,然后单击右侧的 删除,并在弹出框中进行确定。
    集群初始化时默认部署了一个Ingress Controller,请参考 ingress-nginx。需要先删除该 Ingress Controller 组件,再部署一套新的高可靠 Ingress Controller 接入层。

  4. 然后单击右上角的使用模板部署。

  5. 选择所需的集群,以及 kube-system 命名空间,选择样例模板或自定义,然后单击创建。


  1. 本例中,通过 DaemonSet 方式将其重新部署到目标 Ingress Node 上,当然您也可以采用 Deployment 配合亲和性方式来部署。# nginx ingress pods apiVersion: extensions/v1beta1 kind: DaemonSet metadata:   name: nginx-ingress-controller   labels:     app: ingress-nginx   namespace: kube-system spec:   template:     metadata:       labels:         app: ingress-nginx     spec:       nodeSelector:node-role.kubernetes.io/ingress: "true"                          ##通过标签选择器将 pod 部署到对应的节点上       serviceAccount: admin       containers:         - name: nginx-ingress-controller           image: registry.cn-hangzhou.aliyuncs.com/acs/aliyun-ingress-controller:aliyun-nginx-0.9.0-beta.19.2           args:             - /nginx-ingress-controller             - --default-backend-service=$(POD_NAMESPACE)/default-http-backend             - --configmap=$(POD_NAMESPACE)/nginx-configuration             - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services             - --udp-services-configmap=$(POD_NAMESPACE)/udp-services             - --annotations-prefix=nginx.ingress.kubernetes.io             - --publish-service=$(POD_NAMESPACE)/nginx-ingress-lb             - --v=2           env:             - name: POD_NAME               valueFrom:                 fieldRef:                   fieldPath: metadata.name             - name: POD_NAMESPACE               valueFrom:                 fieldRef:                   fieldPath: metadata.namespace           ports:           - name: http             containerPort: 80           - name: https             containerPort: 443           livenessProbe:             failureThreshold: 3             httpGet:               path: /healthz               port: 10254               scheme: HTTP             initialDelaySeconds: 10             periodSeconds: 10             successThreshold: 1             timeoutSeconds: 1           readinessProbe:             failureThreshold: 3             httpGet:               path: /healthz               port: 10254               scheme: HTTP             periodSeconds: 10             successThreshold: 1             timeoutSeconds: 1
  2. 部署成功后,单击 Kubernetes 控制台,进入 Kubernetes Dashboard。选择 Kube-system 命名空间,单击左侧导航栏中的守护进程集,查看 nginx-ingress-controller。
  3. 单击左侧导航栏中的容器组,您可查看 nginx-ingress-controller 的两个容器组。



步骤3 更新 Ingress SLB 服务

  1. 登录 容器服务控制台
  2. 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 服务,进入服务列表页面。
  3. 选择所需的集群和 Kube-system 命名空间,找到 nginx-ingress-lb 服务,单击右侧的更新。集群初始化时默认部署了一个 Ingress LoadBalancer Service,具体部署说明请参考 ingress-nginx,您需要更新 Ingress LoadBalancer Service,以自动识别挂载打标的 Ingress Node
  4. 在弹出的对话框中,添加一条注释。service.beta.kubernetes.io/alicloud-loadbalancer-backend-label: "node-role.kubernetes.io/ingress=true",然后单击确定,完成更新。您也可登录集群 Master 节点,执行 kubectl apply -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-slb-service.yml命令更新 nginx-ingress-lb 服务。
至此,若干 Ingress 实例的高可靠接入层部署完成,可有效应对单点故障和业务流量的挑战,您还可通过打标的方式快速扩容 Ingress 接入层。


https://help.aliyun.com/document_detail/71840.html

展开
收起
青蛙跳 2018-08-31 22:45:13 1546 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载

相关镜像