美文网首页
Multiple Ingress controllers

Multiple Ingress controllers

作者: 读书学习看报 | 来源:发表于2022-11-12 15:21 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Multiple Ingress controllers

          本文链接:https://www.haomeiwen.com/subject/rycfxdtx.html