Маршрутизация трафика на PODS с определенной меткой - PullRequest
0 голосов
/ 08 ноября 2019

Я хотел бы развернуть RESTService в kubernetes за шлюзом и обнаружением службы. В какой-то момент у меня будут мои RestService версии 1 и RestService версии 2.

Оба будут иметь одинаковые URL-адреса, но я мог бы развернуть их в модулях, где я помечаю версию. Когда я звоню в RESTService, я хотел бы добавить что-то в заголовок HTTP, указывающий, что я хочу использовать свой V2.

Можно ли как-то правильно направить трафик на набор модулей? (Я не уверен, правильно ли использовать лейбл). Я также должен помнить, что в будущем у меня будет V3 с новыми сервисами, и мои URL будут меняться, это не может быть что-то статически настроенное. У меня также будет serviceA с v1 и servicesB с v3. Оба за одним и тем же обнаружением службы, оба должны быть правильно маршрутизированы с использованием параметра заголовка (или аналогичного).

Я не уверен, является ли Envoy подходящим компонентом для этого, или есть что-то еще? и я не уверен, в какой момент я должен разместить этот компонент. Я что-то упускаю, я все еще довольно смущен с kubernetes. У кого-нибудь есть и пример из чего-то похожего?

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Да, вы можете иметь два Deployment с разными метками, например

kind: Deployment
metadata:
  name: rest-service-v1
  labels:
    app: rest-service
spec:
  selector:
    matchLabels:
      app: rest-service
      version: v1
  template:
    metadata:
      labels:
        app: rest-service
        version: v1

kind: Deployment
metadata:
  name: rest-service-v3
  labels:
    app: rest-service
spec:
  selector:
    matchLabels:
      app: rest-service
      version: v3
  template:
    metadata:
      labels:
        app: rest-service
        version: v3

Затем вы создаете Service для каждого:

kind: Service
metadata:
  name: rest-service-v1
spec:
  selector:
    app: rest-service
    version: v1

kind: Service
metadata:
  name: rest-service-v3
spec:
  selector:
    app: rest-service
    version: v3

и, наконец, Ingress объект. Однако вход по умолчанию может быть направлен только по path . Вы можете найти сторонний контроллер доступа, который может маршрутизировать значение заголовка

kind: Ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /v1/*
        backend:
          serviceName: rest-service-v1
          servicePort: 8080
      - path: /v3/*
        backend:
          serviceName: rest-service-v3
          servicePort: 8080
1 голос
/ 08 ноября 2019

Да, служба использует селектор меток, который вы можете использовать, если вы устанавливаете метки на основе своих версий. Большинство Ingress Controllers или других прокси-серверов используют сервис (или, скорее, конечные точки, которым он управляет) для выбора серверных экземпляров.

...