Multiple Ingress controllers

Nginx Ingress 是反向代理规则,用来规定 HTTP/HTTPS 请求应该被转发到哪个 Service 所对应的 Pod 上。

Nginx Ingress Controller 是一个反向代理程序,负责解析 Nginx Ingress 的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller 会及时更新自己相应的转发规则,当 Nginx Ingress Controller 收到请求后就会根据这些规则将请求转发到对应 Service 的 Pod 上。

Nginx Ingress Controller 通过 API Server 获取 Ingress 资源的变化,动态地生成 Load Balancer(例如 Nginx)所需的配置文件(例如nginx.conf),然后重新加载 Load Balancer(例如执行 nginx -s load 重新加载Nginx)来生成新的路由转发规则。

ACK Ingress概述: https://help.aliyun.com/document_detail/198892.html

如果要在集群中部署多个不同类型的 Ingress Controller 或者多个相同类型的 Ingress Controller,如何为 Ingress 资源指定特定的 Ingress 控制器实例?

IngressClass:

可以为每个 Controller 设置一个唯一的 IngressClass 类。并且可以设定一个默认的 Ingress Class,当创建没有指定 Ingress Class 的 Ingress 资源时会使用此默认的 IngressClass。

annotations:
    ingressclass.kubernetes.io/is-default-class: "true"

在创建 Ingress 时通过 spec:ingressClassName 指定对应 IngressClass。这样就意味着只有指定的控制器才会处理对应的入口资源。

我在 ACK 上通过 Helm 部署了两个 Nginx Controller 来验证效果。配置参数时注意修改 ingressClassResource 值,定义不同的实例名称。

ingressClassResource:
    name: ack-nginx-private
    controllerValue: "k8s.io/ack-ingress-nginx-private"

查看 IngressClass 资源信息,对应着不同的 Controller 实例。

~$ kubectl get IngressClass -n cloud
NAME                CONTROLLER                         PARAMETERS AGE 
ack-nginx           k8s.io/ack-ingress-nginx           <none>     117m 
ack-nginx-private   k8s.io/ack-ingress-nginx-private   <none>     14m 

创建 Ingress 通过 ingressClassName 指定对应 IngressClass。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cloud-nginx-external
  namespace: cloud
spec:
  ingressClassName: ack-nginx
  rules:
    - host: api.viwehub.cn
      http:
        paths:
          - backend:
              service:
                name: user-server
                port:
                  number: 9097
            path: /user
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cloud-nginx-private
  namespace: cloud
spec:
  ingressClassName: ack-nginx-private
  rules:
    - host: istio.viwehub.cn
      http:
        paths:
          - backend:
              service:
                name: order-server
                port:
                  number: 9099
            path: /order

查看 Ingress 资源信息,可以看到两个 Ingress 资源分别引用了不同的 IngressClass,对应着不同的入口 SLB。

~$ kubectl get Ingress -n cloud
NAME                    CLASS               HOSTS             ADDRESS         PORTS AGE 
cloud-nginx-external    ack-nginx           api.viewhub.cn    47.103.80.188   80    66m 
cloud-nginx-private     ack-nginx-private   istio.viewhub.cn  172.22.243.43   80    51m

结构图:


https://shipit.dev/posts/kubernetes-overview-diagrams.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容