Nginx Ingress Controller和其入口SLB是解耦的,若要增删改查Ingress,控制器就会去配置Nginx,但不会影响入口SLB。所以我们可以通过创建多个入口SLB的方式(即LoadBalancer类型的Service),把Ingress暴露到集群之外。
特别是,为了节约SLB的费用,可以将Ingress入口SLB改成内网类型,然后手动在SLB上绑定一个弹性公网IP地址,这样内网和外网都可以访问Ingress,同时只需要一个SLB。
有时候,我们需要部署多套Ingress Controller,一套给VPC内网使用,另一套给公网使用,如图11-3所示。

图11-3 部署多套Ingress控制器
若集群有多套Ingress控制器,在创建Ingress的时候,怎么区分由哪一个控制器来配置Ingress呢?那就要通过IngressClass来区分。
部署Ingress Controller的时候,会传入一个--ingress-class来标记控制器,然后在创建Ingress的时候,通过在Annotation中加入kubernetes.io/ingress.class参数,Ingress控制器将kubernetes.io/ingress.class参数的值和设定的--ingress-class的值相比较,如匹配得上,则由自己来负责配置Ingress,如匹配不上,则忽略这个Ingress,同时,日志中会打印出类似“ignoring add for ingress test-second-nginx based on annotation kubernetes.io/ingress.class with value”这样的记录。
当然,集群会有默认的控制器,如果Ingress并未添加kubernetes.io/ingress.class这个注解,则由默认的控制器来解析Ingress。此外,新的控制器也会有自己的一套“nginx-configuration”,用于对Ingress-nginx的全局配置。