使用k8s Nginx ingress,可以获取http header,再利用lua脚本实现自定义负载均衡逻辑 如以下例子:
#cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gateway-server-ingress
namespace: gateway-server
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/server-snippet: |
set $cost $http_cost;
set_by_lua $mod1 "return tonumber(ngx.var.cost)%2";
if ($mod1 = 0 ){
set $version "v1.0";
}
if ($mod1 = 1 ){
set $version "v2.0";
}
rewrite ^/(.*) $1/$version break;
spec:
rules:
- http:
paths:
- path: "/v1.0"
pathType: ImplementationSpecific
backend:
service:
name: server1
port:
number: 8080
- path: "/v2.0"
pathType: ImplementationSpecific
backend:
service:
name: server2
port:
number: 8080
测试结果如下:
[root@master ksj]# curl -H "cost:100134" http://ksj-test-ingress.com/
v1 index
[root@master ksj]# curl -H "cost:10013" http://ksj-test-ingress.com/
v2 index