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
结构图: