Ingress原理及多入口实践
概要:Ingress解决了k8s集群随着服务的增多,导致集群暴露端口过多的问题。为集群提供了一个统一的入口来访问集群内部的服务。用户的外部请求,通过ingress的域名配置,可将不同域名的请求转发到不同的service中。但在同一环境下,一组机器常常被复用到多个项目中。在同一个k8s集群中也同样存在这多个项目共存的情况,下面就介绍一下多个ingress入口应该如何配置实现。一、Ingress的工作
概要:Ingress解决了k8s集群随着服务的增多,导致集群暴露端口过多的问题。为集群提供了一个统一的入口来访问集群内部的服务。用户的外部请求,通过ingress的域名配置,可将不同域名的请求转发到不同的service中。但在同一环境下,一组机器常常被复用到多个项目中。在同一个k8s集群中也同样存在这多个项目共存的情况,下面就介绍一下多个ingress入口应该如何配置实现。
一、Ingress的工作原理
粗糙的来说,ingress分为ingress和ingress-controller。Ingress负责定义service的转发规则,ingress-controller是流量的入口,负责对ingress定义的规则进行解析,实现路由的转发。
- Ingress有三种暴露流量入口的方式
- deployment+loadblancer模式,创建了type为LoadBlancer的service关联业务pods,通过外部负载均衡器绑定公网地址作为流量入口;
- deployment+NodePort模式,创建type为NodePort的service,暴露集群端口作为流量入口;
- DaemoSet+Hostwork+nodeSelector,用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。
通常我们习惯使用的暴露方式是deployment+NodePort模式,其效果如下图:
二、多个ingress入口
在同一个环境下,一组机器常常被复用到多个项目中。在同一个k8s集群中也同样存在这多个项目共存的情况,但只有一个ingress入口不利于错误的排查,也导致ingress-nginx压力过大导致访问慢等情况。我们可以使用不同的namespace部署多个ingress-controller入口来区分不同的项目。具体实现方法:
- 创建ingress-nginx对应的命名空间
- 在ingress-controller的yaml文件中添加该 ingress 对应名称
- --ingress-class=[nginx-internal] 自定义名称
- 在对应转发到的ingress的yaml文件中添加对应的 ingress-class 自定义名称
- kubernetes.io/ingress.class: "nginx-internal"
作者:詹琉
链接:移动云开发者社区
来源:移动云官网开发者社区
更多推荐
所有评论(0)