Istio не маршрутизирует к внешней службе HTTP через источник TLS.
У меня есть модуль, содержащий два контейнера: - Приложение - ISTIO Proxy
Приложение выполняет вызов внешнего стороннего API, которыйнаходится на https://someurl.somedomain.com/v1/some-service
Приложение отправляет HTTP-запросы к этой службе, вызывая http://someurl.somedomain.com/v1/some-service - обратите внимание, что это HTTP, а не HTTP.
Затем я настроил в ISTIO следующее:
- Виртуальный сервис для маршрутизации HTTP-трафика на порт 443:
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: someservice-vs
spec:
hosts:
- someurl.somedomain.com
http:
- match:
- port: 80
route:
- destination:
host: someurl.somedomain.com
port:
number: 443
timeout: 40s
retries:
attempts: 10
perTryTimeout: 4s
retryOn: gateway-error,connect-failure,refused-stream,retriable-4xx,5xx
- Сервисный вход, который разрешает выход трафика.Как вы можете видеть, мы указываем, что сервис является внешним по отношению к сетке, и мы открыли 443 и 80, оба из которых используют HTTP, но 443. настроен для создания TLS.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: someservice-se
spec:
hosts:
- someurl.somedomain.com
location: MESH_EXTERNAL
ports:
- number: 443
name: http-port-for-tls-origination
protocol: HTTP
- number: 80
name: http-port
protocol: HTTP
resolution: DNS
Наконец, у меня естьправило назначения, которое применяет простой TLS к исходящему трафику:
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: someservice-destinationrule
spec:
host: someurl.somedomain.com
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 443
tls:
mode: SIMPLE # initiates HTTPS when accessing someurl.somedomain.com
По какой-то причине это не работает, и я получаю 404 при вызове службы из моего контейнера приложений, что указывает на то, что трафик не шифруетсячерез TLS.
Причина, по которой я использую создание TLS, заключается в том, что мне нужно применять повторные попытки в моей виртуальной службе, и я могу делать это только с помощью HTTP-маршрутов, так как в противном случае ISTIO не сможет увидеть запрос и работать с ним.
Почесал голову в течение двух дней и, пожалуйста, нужна помощь: -)