Перевод входящего ресурса в Istio VirtualService или ServiceEntry - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть приложение с ресурсом Ingress, показанным ниже.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $fullName }}-stateful
  labels: 
    app: oxauth
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/ssl-services: "oxtrust"
    nginx.ingress.kubernetes.io/app-root: "/identity"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
    nginx.ingress.kubernetes.io/proxy-next-upstream: "error timeout invalid_header http_500 http_502 http_503 http_504"
spec:
{{- if .Values.ingress.tls }}
  tls:
  {{- range .Values.ingress.tls }}
    - hosts:
      {{- range .hosts }}
        - {{ . | quote }}
      {{- end }}
      secretName: {{ .secretName }}
  {{- end }}
{{- end }}
  rules:
  {{- range .Values.ingress.hosts }}
    - host: {{ . | quote }}
      http:
        paths:
          - path: /identity
            backend:
              serviceName: oxtrust
              servicePort: 8080
          - path: /idp
            backend:
              serviceName: oxshibboleth
              servicePort: 8080
          - path: /passport
            backend:
              serviceName: oxpassport
              servicePort: 8090

Я хотел бы перевести его в VirtualService, который будет использоваться шлюзом Istio. Но как только я это сделаю, служба oxpassport всегда возвращает ошибку 503 в журналах. Это означает, что развертывание не может быть достигнуто.

Ниже приведено определение Service

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2020-04-15T18:21:12Z"
  labels:
    app: oxpassport
    app.kubernetes.io/instance: kk
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/version: 4.1.0_01
    helm.sh/chart: oxpassport-1.0.0
  name: oxpassport
  namespace: test
spec:
  clusterIP: 10.111.71.120
  ports:
  - name: tcp-oxpassport
    port: 8090
    protocol: TCP
    targetPort: 8090
  selector:
    app: oxpassport
    release: kk
  type: ClusterIP
status:
  loadBalancer: {}

И, наконец, VS, который я пытаюсь использовать:

VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: {{ include "istio.fullname" . }}-oxpassport
  namespace: {{ .Release.Namespace }}
spec:
  hosts:
    - oxpassport.{{ .Release.Namespace }}.svc.cluster.local
  gateways:
    - {{ .Release.Name }}-global-gtw
  http:
  - match:
    - uri:
        prefix: /passport
    rewrite:
      uri: /identity
    route:
    - destination:
        host: oxpassport.{{ .Release.Namespace }}.svc.cluster.local
        port:
          number: 8090

Gateway фрагмент:

  - port:
      number: 8090
      name: tcp-oxpassport
      protocol: HTTP
    hosts:
    - oxpassport.{{ .Release.Namespace }}.svc.cluster.local

На что нужно обратить внимание:

  1. Существует бэкэнд-приложение с этими ярлыками , И у него есть собственный VS, и он работает:

     labels: 
        app: oxauth
    
  2. Oxpassport имеет развертывание с метками

      labels: 
         app: oxpassport
    

Я знаю, что это длинный пост, но он блокирует уже несколько дней. Если это возможно, пожалуйста, объясните.

Спасибо

1 Ответ

1 голос
/ 21 апреля 2020

Шлюз должен находиться в том же пространстве имен, что и виртуальная служба, если он не находится в том же пространстве имен, что и виртуальная служба, вы должны добавить его, как показано в следующем примере.

Проверьте раздел spec.gateways

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo-Mongo
  namespace: bookinfo-namespace
spec:
  gateways:
  - some-namespace/my-gateway 

В вашем входе у вас есть 3 пути, тогда виртуальный сервис на основе этого входа должен выглядеть так:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: {{ include "istio.fullname" . }}-oxpassport
  namespace: {{ .Release.Namespace }}
spec:
  hosts:
    - oxpassport.{{ .Release.Namespace }}.svc.cluster.local
  gateways:
    - {{ .Release.Name }}-global-gtw
  http:
  - name: a
    match:
    - uri:
        prefix: /identity
    route:
    - destination:
        host: oxtrust.{{ .Release.Namespace }}.svc.cluster.local
        port:
          number: 8080
  - name: b
    match:
    - uri:
        prefix: /idp
    route:
    - destination:
        host: oxshibboleth.{{ .Release.Namespace }}.svc.cluster.local
        port:
          number: 8080
  - name: c
    match:
    - uri:
        prefix: /passport
    route:
    - destination:
        host: oxpassport.{{ .Release.Namespace }}.svc.cluster.local
        port:
          number: 8090  

Случаи с ответами, которые стоит проверить при появлении проблемы 503 .


РЕДАКТИРОВАТЬ


Вы рассматривали это nginx .ingress.kubernetes.io / ap p- root: "/ identity"?

Пропустив приложение / identity root, вы всегда можете переписать их все, как делали.

Кроме того, есть ли конкретная причина, по которой мы можем разделить это большое - большое - против различных файлов VS?

Нет, вы должны иметь возможность создавать отдельные меньшие вместо больших виртуальных сервисов, я просто скопировал предоставленный вами вход.

...