Tengo un ingreso de kubernetes de clase nginx y dos balanceadores de carga. Ejecutándose en GKE v1.17.
Yaml de entrada de muestra:
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: 443Deseo dividir el tráfico que llega a la entrada entre los dos balanceadores de carga. Por ejemplo:
load-balancer-1 recibirá el 90% del tráfico
load-balancer-2 recibirá el 10% del tráfico
¿Cómo puedo hacer eso con el ingreso de kubernetes?
El controlador de entrada de nginx admite implementaciones canarias a través de las anotaciones canarias
En algunos casos, es posible que desee "canary" un nuevo conjunto de cambios mediante el envío de una pequeña cantidad de solicitudes a un servicio diferente al servicio de producción. La anotación canary permite que la especificación Ingress actúe como un servicio alternativo para que las solicitudes se enruten según las reglas aplicadas. Las siguientes anotaciones para configurar canary se pueden habilitar después de
nginx.ingress.kubernetes.io/canary: "true":
nginx.ingress.kubernetes.io/canary-weight: el porcentaje basado en números enteros (0 - 100) de solicitudes aleatorias que deben enrutarse al servicio especificado en el ingreso controlado. Un peso de 0 implica que no se enviarán solicitudes al servicio en el ingreso canario por esta regla canaria. Un peso de 100 significa que todas las solicitudes se enviarán al servicio alternativo especificado en el Ingress.Tenga en cuenta que cuando marca una entrada como canario, se ignorarán todas las demás anotaciones no canarias (heredadas de la entrada principal correspondiente), excepto nginx.ingress.kubernetes.io/load-balance y nginx.ingress.kubernetes.io/ upstream-hash-by.
Limitaciones conocidas
Actualmente, se puede aplicar un máximo de un ingreso controlado por regla de ingreso.
En otras palabras, puede introducir un nuevo objeto my-ingress-canary donde configura las anotaciones
nginx.ingress.kubernetes.io/canary: "true" (Le dice a Nginx Ingress que marque este como "Canary" y asocie este ingreso con el ingreso principal haciendo coincidir el host y la ruta.
nginx.ingress.kubernetes.io/canary-weight: "10" (enrutar el diez por ciento del tráfico al equilibrador de carga-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