资讯专栏INFORMATION COLUMN

如何自建一个k8s ingress 思路

JiaXinYi / 2452人阅读

摘要:如何自建一个思路接入方案我们都知道访问集群的服务需要接入。据我所知,接入的方案有种云厂商提供比如官方的实现第三方实现方案自建,比如使用这里重点记录一下,如何自建一个的思路。控制中心是一个叫的程序,监控对应的,数据代理是有组成。

如何自建一个k8s ingress 思路 ingress 接入方案

我们都知道访问k8s 集群的服务需要ingress 接入。

据我所知,ingress 接入的方案有4种

1.云厂商提供LoadBalance, 比如aliyun SLB.
2.官方的实现 ingress controller 
3.第三方实现方案
4.自建, 比如使用envoy 

这里重点记录一下,如何自建一个ingress 的思路。

ingress 接入方案的原理

在讲如何自建一个k8s ingress 之前,这里分别记录一下ingress 的实现原理。
先说官方的实现。 https://github.com/kubernetes...
官方的ingress 接入实现使用ingress controller + nginx 实现的。

如上图所示

   ingress 接入分为配置控制和数据代理。
   ingress controller 是一个控制中心,监控的数据来源
   1.k8s 集群的api-server, 比如node 、service、 pod 变化
   2.ingress 实例的configMap
   
   ingress controller 发现监控的数据有变化,就把监控的数据转换成为nginx.conf 代理所需要配置。
   然后reload nginx. 从而实现数据流量接入路由。

   当然,如果ingress controller 这一套部署在k8s 集群内的话,肯定是要暴露端口的。

我接触到到的aliyun 的SLB 也类似。
SLB 控制中心是一个叫CMI的程序,监控k8s 对应的label, 数据代理是有LVS + nginx 组成。

自建ingress

这里说一下为什么会有自建的需要
首先,我们系统中使用grpc, grpc 使用h2为载体,进行多路复用。
目前对grpc 代理做的比较好的是envoy.
有两种方式对grpc 进行代理
1). 4层代理,简单粗暴。
2). 7层代理。 做到可以更细维度的路由负载。

在说nginx proxy , nginx 是可以支持4层代理,也可以支持HTTP2 的7层代理,但是nginx 对grpc 支持不好。
因为 nginx 是不能做http2 的透明代理的。

1.nginx 做7 层代理h2

nginx仅支持HTTP/ 2用于下游连接。

nginx 做7层代理,下游是h2 代理,到上游是http1.x . 并不是一个透明代理。

2.nginx 做grpc 的4层代理。

实际上,支持4层代理的软件,都支持grpc 代理。因为h2 也是基于tcp 的。
就简单的当做一个tcp 来处理。
但是使用4层代理来做grpc 的代理有很大的缺点:
1).没有办法很好做到负载均衡。 因为h2 是7层协议,如果想在请求级别上做好负载均衡, 必须支持h2 7层协议。
2).没有办法收敛连接数。如果你的服务是连接数很多(比如一个grpc 的接入服务器), 那边4层代理透传连接数到上游服务, 这样一部4层代理本身的连接数翻倍,大量消耗连接数资源。

而 envoy 代理grpc 没有上面2个问题。
1).envoy 支持h2 的路由转发,并且配置负载均衡。
2).envoy 代理h2 到上游服务,连接数是收敛的。比如50w 连接数到经过envoy 代理到上游服务可能是20 个连接,连接数大大收敛。

envoy ingress 代理

envoy ingress 代理
如下图:

envoy 是支持xDS 动态下发routeconfig.
有xDS 监控 k8s api-server , 下发routeconfig 的路由信息。

参考文章
http://jm.taobao.org/2018/07/...,
https://segmentfault.com/a/11...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32920.html

相关文章

  • Kubernetes在混合云架构下的应用

    摘要:但考虑到该用户在跨集群模式下的困扰,开始策划将托管云物理机纳入现有集群统一管理的方案,即在混合云架构下仅需部署管理一套集群。托管云物理机纳入UK8S集群统一管理后,可实现托管云物理机保障平峰时业务正常运行,高峰时期利用UK8S快速扩容公有云资源的理想应用场景,继而提升混合云的可用性。 ——海豹他趣技术负责人 张嵩 混合云的业务模式 厦门海豹他趣信息技术股份有限公司于2012年4...

    BenCHou 评论0 收藏0
  • 如何在Kubernetes中暴露服务访问

    摘要:中暴露服务访问自己实现了一个,它本质上是包装了,在真正创建负载均衡器上它会调用来创建自身的。 Kubernetes概述 最近的一年,kubernetes的发展如此闪耀,正被越来越多的公司采纳用于生产环境的实践。同时,我们可以在最著名的开发者问答社区StackOverflow上看到k8s的问题数量的增长曲线(2015.5-2016.5),开发者是用脚投票的,从这一点看也无疑证明了k8s的...

    wendux 评论0 收藏0
  • 如何在Kubernetes中暴露服务访问

    摘要:中暴露服务访问自己实现了一个,它本质上是包装了,在真正创建负载均衡器上它会调用来创建自身的。 Kubernetes概述 最近的一年,kubernetes的发展如此闪耀,正被越来越多的公司采纳用于生产环境的实践。同时,我们可以在最著名的开发者问答社区StackOverflow上看到k8s的问题数量的增长曲线(2015.5-2016.5),开发者是用脚投票的,从这一点看也无疑证明了k8s的...

    Lin_R 评论0 收藏0
  • K8S Ingress环境下,Http Redirect端口丢失问题

    摘要:近日发现一个问题应用程序在返回的时候丢失了原先访问的端口。于是怀疑问题出在这几个上。在中,在描述的时候提到,其返回的必须是。修改的端口为靠谱这个方法比较靠谱,只要将的端口改成就没有问题了。使用靠谱使用提供的,将的值做文本替换。 github 近日发现一个问题:应用程序在返回Http Redirect的时候丢失了原先访问的端口。比如,我们这样访问http://IP-A:Port-A/ap...

    Jochen 评论0 收藏0
  • K8S Ingress环境下,Http Redirect端口丢失问题

    摘要:近日发现一个问题应用程序在返回的时候丢失了原先访问的端口。于是怀疑问题出在这几个上。在中,在描述的时候提到,其返回的必须是。修改的端口为靠谱这个方法比较靠谱,只要将的端口改成就没有问题了。使用靠谱使用提供的,将的值做文本替换。 github 近日发现一个问题:应用程序在返回Http Redirect的时候丢失了原先访问的端口。比如,我们这样访问http://IP-A:Port-A/ap...

    WalkerXu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<