Пример конфигурации Kubernetes Ingress с выбором бекенда на основе значения аргумента "proxy". И дефолтным бекендом, если значение аргумента "proxy" отличное от "1" и "2", или отсутствует.
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