Istio: HTTPS-трафик конвертируется в HTTP с портом 443 - PullRequest
0 голосов
/ 20 сентября 2019

Описание ошибки

Мы настроили istio over на кластере eks, и в нем размещено приложение java.Модуль был создан вместе со службой типа ClusterIP

. Мы создали виртуальную службу, шлюз и установили входной шлюз istio inport в качестве NodePort.Перед входным шлюзом istio мы установили балансировщик нагрузки приложений AWS.Мы создали запись route53 (DNS), которая указывает на вышеуказанный ALB

. Теперь все службы и модули работают UP

. Теперь, когда вы нажимаете на DNS с помощью https, мы получаем информацию запроса.в вышеупомянутом Java-приложении Spring Boot было изменено с https на http с портом 443

Например, если я сделаю запрос curl, чтобы сказать curl https://sarath.somedomain.com/helloworld, в нашем java-приложении, пока мы получаем запросинформация, которую мы получаем как http://sarath.somedomain.com:443/helloworld

Также мы напечатали заголовки, такие как x-forwarded-proto, x-forwarded-port в нашем приложении Java.

x-forwarded-proto значение, которое мы получаем вjava-приложение равно http x-forwarded-port значение, которое мы получаем в java-приложении, равно 443 x-forwarded-for значение, которое мы получаем в java-приложении, равно null

Наше ключевое подозрение связано с посланником, который делает этопреобразование протокола из https в http

Ожидаемое поведение

Если я нажму скажем curl https://sarath.somedomain.com/helloworld, в нашем Java-приложении мы должны получить информацию о запросе как https://sarath.somedomain.com/helloworld

Действия по воспроизведению ошибки

Шлюз:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: sarath-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "sarath.somedomain.com"
    - "prasath.somedomain.com"

Virtual Serтиски:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sp-vs
spec:
  hosts:
  - "sarath.somedomain.com"
  gateways:
  - sarath-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        port:
          number: 80
        host: javaapp-svc

Вход ALB:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: sarathingress
  namespace: istio-system
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
    alb.ingress.kubernetes.io/subnets: subnet-XXXXXXXX,subnet-XXXXXXXX
    alb.ingress.kubernetes.io/security-groups: sg-XXXXXXXX
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/XXXXXXXX
spec:
  rules:
    - host: sarath.somedomain.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: istio-ingressgateway
              servicePort: 80

Служба приложений:

apiVersion: v1
kind: Service
metadata:
  name: javaapp-svc
  labels:
    app: javaapp-svc
    name: javaapp-svc
spec:
  selector:
    app: javaapp-svc
  ports:
  - name: http
    port: 80
    targetPort: 9090
    protocol: TCP

Версия (включая выходные данные istioctl version --remote и kubectl version)

Выход istioctl version --remote:

версия клиента: 1.2.5 версия цитадели: 1.2.5 версия камбуза: 1.2.5 версия входного шлюза: 1.2.5 пилотная версия:Версия политики 1.2.5: версия коляски 1.2.5: версия телеметрии 1.2.5: 1.2.5

Вывод kubectl version:

Версия клиента: version.Info {Major:«1», Minor: «12», GitVersion: «v1.12.7», GitCommit: «6f482974b76db3f1e0f5d24605a9d1d38fad9a2b», GitTreeState: «clean», BuildDate: «2019-03-29T16: 15: 10Z» go: 15: 10Z », Go", Компилятор:" gc ", платформа:" linux / amd64 "} Версия сервера: version.Info {Major:" 1 ", Minor:" 13+ ", GitVersion:" v1.13.10-eks-5ac0f1 ", GitCommit:"5ac0f1d9ab2c254ea2b0ce3534fd72932094c6e1", GitTreeState: "clean", BuildDate: "2019-08-20T22: 39: 46Z", GoVersion: "go1.11.13", компилятор: "gc", платформа: "linux / amd64 *}}1068 * Как был установлен Istio?

Istio устанавливается через helm, ниже используется команда:

helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
helm template \
  --set gateways.istio-ingressgateway.type=NodePort \
  --set prometheus.enabled=true \
  --set grafana.enabled=true \
  --set tracing.enabled=true \
  --set kiali.enabled=true \
  --set "kiali.dashboard.jaegerURL=http://jaeger-query:16686" \
  --set "kiali.dashboard.grafanaURL=http://grafana:3000" \
   install/kubernetes/helm/istio \
  --name istio --namespace istio-system > $HOME/istio.yaml

Среда, в которой была обнаружена ошибка (поставщик облака, ОС и т. д.)

AWS, EC2 Machine, Amazon Linux v2

...