Configuration example Kubernetes Ingress with the choice of backend based on the value of the argument "proxy". And the default backend, if the value of the argument "proxy" is different from "1" and "2", or is missing.
manifest.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: artem-test-proxy-0-app namespace: staging labels: app: artem-test-proxy-0-app spec: replicas: 1 selector: matchLabels: app: artem-test-proxy-0-app strategy: type: RollingUpdate progressDeadlineSeconds: 300 minReadySeconds: 60 template: metadata: labels: app: artem-test-proxy-0-app spec: containers: - name: artem-test-proxy-0 image: dockersamples/static-site env: - name: AUTHOR value: Default ports: - containerPort: 80 nodeSelector: nodegroup: staging --- apiVersion: apps/v1 kind: Deployment metadata: name: artem-test-proxy-1-app namespace: staging labels: app: artem-test-proxy-1-app spec: replicas: 1 selector: matchLabels: app: artem-test-proxy-1-app strategy: type: RollingUpdate progressDeadlineSeconds: 300 minReadySeconds: 60 template: metadata: labels: app: artem-test-proxy-1-app spec: containers: - name: artem-test-proxy-1 image: dockersamples/static-site env: - name: AUTHOR value: Proxy=1 ports: - containerPort: 80 nodeSelector: nodegroup: staging --- apiVersion: apps/v1 kind: Deployment metadata: name: artem-test-proxy-2-app namespace: staging labels: app: artem-test-proxy-2-app spec: replicas: 1 selector: matchLabels: app: artem-test-proxy-2-app strategy: type: RollingUpdate progressDeadlineSeconds: 300 minReadySeconds: 60 template: metadata: labels: app: artem-test-proxy-2-app spec: containers: - name: artem-test-proxy-2 image: dockersamples/static-site env: - name: AUTHOR value: Proxy=2 ports: - containerPort: 80 nodeSelector: nodegroup: staging --- apiVersion: v1 kind: Service metadata: name: artem-test-proxy-0-svc namespace: staging spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: artem-test-proxy-0-app --- apiVersion: v1 kind: Service metadata: name: artem-test-proxy-1-svc namespace: staging spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: artem-test-proxy-1-app --- apiVersion: v1 kind: Service metadata: name: artem-test-proxy-2-svc namespace: staging spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: artem-test-proxy-2-app --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: artem-test-proxy-ing namespace: staging annotations: kubernetes.io/ingress.class: ingress-staging certmanager.k8s.io/cluster-issuer: letsencrypt-prod certmanager.k8s.io/acme-challenge-type: dns01 certmanager.k8s.io/acme-dns01-provider: dns nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/configuration-snippet: | if ($arg_proxy = 1) { proxy_pass http://artem-test-proxy-1-svc.staging.svc.cluster.local; } if ($arg_proxy = 2) { proxy_pass http://artem-test-proxy-2-svc.staging.svc.cluster.local; } spec: tls: - hosts: - artem.services secretName: artem.services-secret-tls rules: - host: artem.services http: paths: - path: / backend: serviceName: artem-test-proxy-0-svc servicePort: 80