Могу ли я использовать istio для сервисов, которые получают доступ через нодпорт в kubernetes? - PullRequest
0 голосов
/ 08 апреля 2019

Вопрос

Я создаю два развертывания в kubernetes с тем же сервисом, типом которого является NodePort,

apiVersion: v1
kind: Service
metadata:
  name: devo-159239e607c694e08b146c855b393652
  namespace: devo-bsg-dev
  labels:
    app: devo
spec:
  ports:
  - name: http-app
    nodePort: 31012
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: devo-159239e607c694e08b146c855b393652
  type: NodePort

Я могу получить доступ к своему сервису по NodePort, и kiali покажет трафик

enter image description here

Тогда я хочу, чтобы весь трафик перешел на версию v1, поэтому я создаю виртуальный сервис и пункт назначения

[root@master104 beego2]# cat beego2-virtual-service.yml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: devo-159239e607c694e08b146c855b393652
  namespace: devo-bsg-dev
spec:
  hosts:
  - devo-159239e607c694e08b146c855b393652
  http:
  - route:
    - destination:
        host: devo-159239e607c694e08b146c855b393652
        subset: v1
[root@master104 beego2]# cat beego2-destination.yml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: devo-159239e607c694e08b146c855b393652
  namespace: devo-bsg-dev
spec:
  host: devo-159239e607c694e08b146c855b393652
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

но результат не соответствует ожидаемому

Вопрос: мои правила неверны или istio не может работать с нодпортом?

Окружающая среда

Кубернетес 1.13.3

istio 1.1.2

1 Ответ

0 голосов
/ 08 апреля 2019

Я не вижу никакой конфигурации Gateway в вашей настройке Istio.Istio Gateway представляет внешний IP-адрес перед микросервисами Kuberentes, который пропускает входящий трафик через указанные порты, протокол и хосты.Вы можете использовать значение по умолчанию istio-ingressgateway в общем определении ресурса шлюза, а затем привязка соответствует VirtualService, то есть:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
  namespace: devo-bsg-dev
spec:
  selector:
    istio: ingressgateway #Default Istio Ingressgateway controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - devo-159239e607c694e08b146c855b393652
---

kind: VirtualService
metadata:
  name: devo-159239e607c694e08b146c855b393652
  namespace: devo-bsg-dev
spec:
  hosts:
  - devo-159239e607c694e08b146c855b393652
  gateways:
  - http-gateway
  http:
  - route:
    - destination:
        host: devo-159239e607c694e08b146c855b393652
        subset: v1

В приведенном выше сценарии мы хотим разрешить трафик HTTP на порт 80 для хостаdevo-159239e607c694e08b146c855b393652.

Более подробные практические материалы о демонстрации микросервисов Kubernetes можно найти через сетку Istio в приложении демонстрационного бронирования пример .

...