k8s ingress根据不同http header均衡到不同后端

417 阅读1分钟

使用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