Предполагая, что ваши сервисы определены во внутреннем реестре сервисов Istio.Если нет, настройте его в соответствии с инструкцией service-defining
.
В HTTPS вся информация, связанная с HTTP, такая как метод, путь URL-адреса, код ответа, зашифрована, поэтому Istio не может видеть и не может контролировать эту информацию для HTTPS.Если вам необходимо отслеживать информацию, связанную с HTTP, при доступе к внешним службам HTTPS, вы можете разрешить своим приложениям отправлять запросы HTTP и настраивать Istio для выполнения создания TLS.
Сначала вам нужно переопределить ваш ServiceEntry и создайте VirtualService для перезаписи порта HTTP-запроса и добавления DestinationRule для выполнения инициализации TLS.
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: external-service1
spec:
hosts:
- external-service1.com
ports:
- number: 80
name: http-port
protocol: HTTP
- number: 443
name: http-port-for-tls-origination
protocol: HTTP
resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: external-service1
spec:
hosts:
- external-service1.com
http:
- match:
- port: 80
route:
- destination:
host: external-service1.com
port:
number: 443
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: external-service1
spec:
host: external-service1.com
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 443
tls:
mode: SIMPLE # initiates HTTPS when accessing external-service1.com
EOF
VirtualService перенаправляет HTTP-запросы на порт 80 на порт 443, где соответствующий DestinationRule затем выполняет инициацию TLS,В отличие от предыдущего ServiceEntry, на этот раз протокол на порту 443 является HTTP, а не HTTPS, потому что клиенты будут отправлять только HTTP-запросы, а Istio обновит соединение до HTTPS.
Надеюсь, это поможет.