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模式,其效果如下图:

img

二、多个ingress入口

在同一个环境下,一组机器常常被复用到多个项目中。在同一个k8s集群中也同样存在这多个项目共存的情况,但只有一个ingress入口不利于错误的排查,也导致ingress-nginx压力过大导致访问慢等情况。我们可以使用不同的namespace部署多个ingress-controller入口来区分不同的项目。具体实现方法:

  • 创建ingress-nginx对应的命名空间
  • 在ingress-controller的yaml文件中添加该 ingress 对应名称
    • --ingress-class=[nginx-internal] 自定义名称

img

  • 在对应转发到的ingress的yaml文件中添加对应的 ingress-class 自定义名称
    • kubernetes.io/ingress.class: "nginx-internal"

img


作者:詹琉

链接:移动云开发者社区

来源:移动云官网开发者社区

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值