consul+upsync 实现ingress controll

2020-09-10  本文已影响0人  谁用了我的昵称叫艾特

背景

ingress-controller 实现了集群内部服务的负载均衡,对于公有云环境,我们可以通过LoadBalance 类型的Service实现ingress-controller 的负载均衡。但是私有云环境,对于负载均衡的支持有限,虽然有MetalLB这样的开源的解决方案。 但是真正在生产应用的案例并不多。而且对于已有一套完整架构的公司,直接将ingress-controller 暴露给公网业务或者内部调用的情况并不多,大部分都是在ingress-controller 作为upstream 挂载为一组负载均衡(nginx)的后端来提供服务。因此。 如何实现ingress-controller 的无损更新也就成了如何实现upstream 的server 如何无损摘除的问题。这里我们采用的是微博的upsync 插件和 consul 来实现。

具体实现

大致说明

  1. 集群中创建单独的node节点(配置可以略低),仅用来运行ingress-controller(daemonset),通过给节点打标签和污点的方式实现,ingress-controller采用HostNetwork方式占用宿主机端口,并创建ClusterIP 的service。
  2. 集群中部署consul-sync-catalog 服务,consul-sync-catalog 可以将kubernetes中的service 同步到consul 集群中注册为服务
  3. nginx 通过微博的upsync 组件动态获取consul 中服务对应instance 的ip 和端口。当kubernetes 中的endpoints 发生变动时,consul-sync-catalog同步对应的变动到consul,upsync 组件自动变更upstream对应的server列表,无需reload nginx。

拓扑图

操作步骤

集群操作

负载均衡配置

相关问题

502

在ingressgateway滚动更新过程中进行压测,使用如下命令,日志中还是会有502 的情况, 怀疑是consul-sync-catalog同步不及时。

for i in `seq 1 1000`; do  curl -o /dev/null -s -w "%{time_total}:%{http_code}\n"  http://api.xiaozhu.com/api/v1/products| tee -a 1.log; done

查看到官方文档 中有consulWriteInterval的配置

consulWriteInterval (string: null) - Override the default interval to perform syncing operations creating Consul services.

这个参数应该是控制consul-sync-catalog向consul 集群同步间隔的(看来consul-sync-catalog不是实时的)。这种情况下, 我们可以通过调小这个间隔或者通过给ingressgateway添加一段prestop来解决。注意sleep 的时间要大于consulWriteInterval的值

最后的解决方法:

$ cat config.yaml
syncCatalog:
  enabled: true
  toConsul: true
  toK8S: false
  default: false
  consulWriteInterval: 10s
$ helm upgrade consul hashicorp/consul --set global.name=consul -n consul -f config.yaml
$ kubectl get daemonsets.apps  -n istio-system  istio-ingressgateway  -o yaml
...
        lifecycle:
          preStop:
            exec:
              command:
              - /bin/sh
              - -c
              - sleep 40
...

一些思考

参考

https://www.consul.io/docs/k8s/service-sync#syncing-kubernetes-and-consul-services

https://www.consul.io/docs/k8s/helm

上一篇 下一篇

猜你喜欢

热点阅读