如何解决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 ingress 做到这一点?
解决方法
nginx 入口控制器通过 Canary Annotations 支持金丝雀部署
在某些情况下,您可能希望通过以下方式“金丝雀”一组新的更改
将少量请求发送到不同的服务而不是
生产服务。金丝雀注解使 Ingress 规范能够
充当路由请求的替代服务,具体取决于
适用的规则。以下注解配置 canary 可以
设置 nginx.ingress.kubernetes.io/canary: "true"
后启用:
-
nginx.ingress.kubernetes.io/canary-weight
:基于整数 (0 - 100) 应该路由到服务的随机请求的百分比 在 Canary Ingress 中指定。权重为 0 意味着没有 请求将由此发送到 Canary 入口中的服务 金丝雀规则。权重为 100 意味着将发送所有请求 到 Ingress 中指定的替代服务。
请注意,当您将入口标记为金丝雀时,所有其他入口 非金丝雀注解将被忽略(继承自 相应的主要入口)除了 nginx.ingress.kubernetes.io/load-balance 和 nginx.ingress.kubernetes.io/upstream-hash-by。
已知限制
目前每个 Ingress 最多可以应用一个 Canary Ingress 规则。
换句话说,您可以引入一个新的 Ingress 对象 my-ingress-canary
,您可以在其中设置注释
-
nginx.ingress.kubernetes.io/canary: "true"
(告诉 Nginx Ingress 将其标记为“Canary”,并通过匹配主机和路径将此入口与主入口关联起来。 -
nginx.ingress.kubernetes.io/canary-weight: "10"
(将 10% 的流量路由到 load-balancer-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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。