Ingress Controller匹配Ingress
当集群内创建多个Controller时,如何使某个Controller只监听对应的Ingress呢?这里就需要在Ingress中指定annotations,如下:
1 | metadata: |
然后在Controller中指定参数–ingress-class=nginx:
1 | args: |
最后需要在rbac中指定参数 - “ingress-controller-leader-incloud” 参考
1 | resources: |
这样,该Controller就只监听带有kubernetes.io/ingress.class: “incloud”annotations的Ingress了。我们可以声明多个带有相同annotations的Ingress,它们都会被对应Controller监听。Controller中的nginx默认监听80和443端口,若要更改可以通过–http-port和–https-port参数来指定,更多参数可以在这里找到。
在实际应用场景,常常会把多个服务部署在不同的namespace,来达到隔离服务的目的,比如A服务部署在namespace-A,B服务部署在namespace-B。这种情况下,就需要声明Ingress-A、Ingress-B两个Ingress分别用于暴露A服务和B服务,且Ingress-A必须处于namespace-A,Ingress-B必须处于namespace-B。否则Controller无法正确解析Ingress的规则。
参考
https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/
https://owelinux.github.io/2018/12/27/article43-k8s-Ingress/