ingress
访问服务的入口。
Service的服务是基于端口的,端口是有限资源,且有产生冲突的场景,一旦服务多起来管理就是个很大的问题 Ingress是K8s的一个入口网关,默认在80/443端口上提供服务。并且可以设置路由转发到集群内部的Service上,用它实现gRPC的转发,可以避免端口管理的问题,同时也实现了端口复用,所有的服务都通过一个入口来对外提供服务。
但是Ingress是基于HTTP的,虽然gRPC也可以是基于HTTP2但是仍然有许多坑会踩到。
Service只支持4层负载均衡,而Ingress有7层功能。
-
ingress是k8s中的一个api对象,一般用yaml配置。作用是定义请求转发的规则,可以理解为配置模板或者配置文件。
-
ingress-controller是具体实现反向代理及负载均衡的程序,通过对ingress中定义的规则进行解析,根据其规则来实现转发。
作用
-
基于http-header 的路由
-
基于 path 的路由
-
单个ingress 的 timeout
-
请求速率limit
-
rewrite 规则
ingress 根据参数拆分服务
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
namespace: bigdata
name: adc-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/server-snippet: |
set $flag 0;
if ( $uri = /click) {
set $flag 1;
}
if ( $args ~ project=ios ) {
set $flag 1$flag;
}
if ( $flag = 11 ) {
rewrite ^/(.*) $uri-ios break;
}
spec:
rules:
- host: walking.sun.com
http:
paths:
- path: /click/google
backend:
serviceName: google-srv
servicePort: 8080
- path: /click-ios
backend:
serviceName: web-ios-srv
servicePort: 8080
- path: /click
backend:
serviceName: web-srv
servicePort: 8080
- host: walking.sun123.com
http:
paths:
- path: /click/google
backend:
serviceName: google-srv
servicePort: 8080
tls:
- hosts:
- walking.sun.com
secretName: sun.com
- hosts:
- walking.sun123.com
secretName: sun123.com