У меня есть старое приложение, которое мы запустили в Kubernetes. Приложение прослушивает два разных порта, один для общей веб-страницы и другой для веб-службы. В долгосрочной перспективе мы можем попытаться изменить это, но на данный момент мы пытаемся заставить старое приложение работать как есть. В текущей конфигурации есть один сервис для обоих портов:
apiVersion: v1
kind: Service
metadata:
name: app
spec:
selector:
app: my-app
ports:
- name: web
port: 8080
protocol: TCP
targetPort: 8080
- name: service
port: 8081
protocol: TCP
targetPort: 8081
Затем я использую один вход для маршрутизации трафика c на правильный сервисный порт на основе пути:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
spec:
rules:
- host: myapp.test.com
http:
paths:
- backend:
serviceName: app
servicePort: 8080
path: /app
- backend:
serviceName: app
servicePort: 8081
path: /service
Это прекрасно работает для маршрутизации. Входящие запросы поступают на правильный сервисный порт в зависимости от пути. Однако проблема, с которой я столкнулся, заключается в том, что для работы этого унаследованного приложения запросы к обоим портам 8080 и 8081 должны быть направлены на один и тот же модуль для каждого клиента. Вы можете видеть, что я пытался добавить аннотацию upstream-ha sh. Это, казалось, гарантировало, что все запросы к 8080 от одного клиента направлялись к одному и тому же модулю, а все запросы к 8081 от одного клиента направлялись к одному и тому же модулю, но не то, что это один и тот же модуль для какого-либо одного клиента. Когда я запускаю с одним экземпляром модуля, все замечательно, но когда я запускаю дополнительные модули, некоторые клиенты перенаправляют запросы / app на один модуль и / service на другой и в этом приложении, которое в настоящее время не работает. Я пробовал другие аннотации во входе, включая nginx .ingress.kubernetes.io / affinity: "cook ie" и nginx .ingress.kubernetes.io / affinity-mode: "persistent", а также пытался добавить sessionAffinity: ClientIP к сервису, но пока ничего не работает. Цель состоит в том, чтобы все запросы к любому пути направлялись к одному и тому же модулю для любого одного клиента. Любая помощь будет принята с благодарностью.