Конфигурация Openshift TLS со шлюзом API

#kubernetes #openshift #aws-api-gateway #istio

Вопрос:

Я пытаюсь развернуть угловое приложение на Openshift с Istio в качестве сервисной сетки. Сервис yaml:

   - apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: angularapp
        service: angularapp
        version: v1
      name: angularapp
    spec:
      ports:
      - name: http
        protocol: TCP
        port: 8080
        targetPort: 8080
      selector:
        name: angularapp
 

Пока все работает с http-соединением. Чтобы перейти на https-соединение, я настроил маршрут istio-ingressgateway, предоставленный установкой оператора сети Red Hat Openshift, для использования сквозной передачи

 spec:
  host: istio-ingressgateway-istio-system.apps.xxx.xx.xxxxxxx.opentlc.com
  tls:
    insecureEdgeTerminationPolicy: None
    termination: passthrough
 

и ресурс шлюза istio:

 apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: testnamespace-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: "router-certs"
      hosts:
        - "*"
 

с помощью VirtualService, указывающего на порт 8080 приложения angular:

       route:
        - destination:
            host: angularapp
            port:
              number: 8080
 

Вопрос: Конфигурация TLS работает, и открытый URL-адрес шлюза входа istio имеет соединение https. Однако шлюз API выдает эту ошибку при отправке запроса по указанному URL-адресу istio:

Выполнение не удалось из-за ошибки конфигурации: Непризнанное сообщение SSL, соединение с открытым текстом?

Странно то, что это происходит только в половине случаев, другая половина работает, даже после очистки кэша браузера после каждого запуска. Обратите внимание, что только URL-адрес шлюза входа istio имеет соединение https, в то время как приложение angular как автономная служба имеет только http.

Извините за многословный вопрос и надеюсь получить здесь некоторую помощь. Спасибо!

Ответ №1:

При сквозном завершении зашифрованный трафик отправляется прямо в пункт назначения без маршрутизатора, обеспечивающего завершение TLS. Поэтому ключ или сертификат не требуются.

Поскольку ваша серверная служба является http, вы должны прервать SSL на границе с помощью

 termination: edge
 

Ссылка: https://docs.openshift.com/container-platform/3.9/architecture/networking/routes.html

Комментарии:

1. Привет, Ракеш, я попытался переключить маршрут шлюза входа istio на edge, и я вообще не могу получить доступ к URL-адресу со следующей ошибкой: {«сообщение»: «Сетевая ошибка при подключении к конечной точке»}

Ответ №2:

Решил эту проблему, добавив сегмент:

   port:
    targetPort: https
  tls:
    termination: passthrough
 

для конфигурации маршрута входа istio, поскольку конфигурация службы входа istio по умолчанию прослушивает имя порта: https

 name: https  
port: 443  
protocol: TCP  
targetPort: 8080