Kubernetes Ingress -负载均衡器流量分裂



我有一个类nginx的kubernetes入口和两个负载平衡器。在GKE v1.17上运行

示例入口yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
kubernetes.io/ingress.class: "nginx"
# Enable client certificate authentication
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
# Create the secret containing the trusted ca certificates
nginx.ingress.kubernetes.io/auth-tls-secret: "production/client-cert-secret"
# Specify the verification depth in the client certificates chain
nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
# Automatically redirect http to https
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
# Use regex in paths
nginx.ingress.kubernetes.io/use-regex: "true"
# Allow larger request body
nginx.ingress.kubernetes.io/proxy-body-size: 30m
# For notifications we add the proxy headers
nginx.ingress.kubernetes.io/configuration-snippet: |  
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
spec:
tls:
- hosts:
- my-domain.com
secretName: my-tls-certificate
rules:
- host: my-domain.com
http:
paths:
- path: /(.*)
backend:
serviceName: load-balancer-1
servicePort: 443

我希望在两个负载平衡器之间分割到达入口的流量。例如:

load-balancer-1将接收90%的流量

load-balancer-2将获得10%的流量

如何使用kubernetes入口?

nginx入口控制器通过金丝雀注解支持金丝雀部署

在某些情况下,您可能想要"canary"一组新的变化向不同的服务发送少量请求生产服务。金丝雀注释使Ingress规范能够作为请求路由到依赖的替代服务规则适用。下面的注解可以配置金丝雀设置nginx.ingress.kubernetes.io/canary: "true"后启用:

  • nginx.ingress.kubernetes.io/canary-weight:基于整数的(0 - 100)应该路由到服务的随机请求的百分比在金丝雀入口指定。权值为0意味着没有请求将通过this发送到Canary入口中的服务金丝雀的规则。权重为100意味着将发送所有请求到入口中指定的替代服务。

注意,当您将一个入口标记为金丝雀时,则所有其他的非金丝雀注释将被忽略(继承自对应的主入口)除外nginx.ingress.kubernetes。io/负载平衡和nginx.ingress.kubernetes.io/upstream-hash-by。

已知的限制

当前每个入口最多可以应用一个金丝雀入口规则。

换句话说,您可以引入一个新的入口对象my-ingress-canary,您可以在其中设置注释

  • nginx.ingress.kubernetes.io/canary: "true"(告诉Nginx Ingress将此入口标记为"Canary",并通过匹配host和path将此入口与主入口关联。

  • nginx.ingress.kubernetes.io/canary-weight: "10"(路由10%的流量到负载平衡器-2)

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress-canary
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
rules:
- host: my-domain.com
http:
paths:
- path: /(.*)
backend:
serviceName: load-balancer-2
servicePort: 443

最新更新