estamos usando kubernetes (1.17.14-gke.1600) e istio (1.7.4)
tenemos varias implementaciones que necesitan realizar solicitudes HTTPS entre sí mediante el registro de DNS público ( mydomain.com ). El objetivo aquí es hacer una solicitud HTTPS interna en lugar de hacerlo público y luego regresar.
no podemos cambiar el host con el dns "interno" (por ejemplo my-svc.my-namespace.svc.cluster-domain.example ) porque a veces se devuelve el mismo host al cliente para realizar una solicitud HTTP desde el navegador del cliente
Nuestros servicios están expuestos en HTTP, por lo que entiendo que si queremos usar el esquema HTTPS, debemos pasar a través de la puerta de enlace istio.
Aquí está mi servicio virtual, al agregar la puerta de enlace de mesh , puedo realizar una solicitud HTTP interna con el DNS público, pero esto no funciona con HTTPS
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: myservice spec: gateways: - istio-system/gateway - mesh hosts: - myservice.mydomain.com http: - match: - uri: prefix: / route: - destination: host: myservice port: number: 3000 subset: v1Aquí está la puerta de enlace:
apiVersion: v1 items: - apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: gateway namespace: istio-system spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP tls: httpsRedirect: true - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: ingress-cert mode: SIMPLEDescubrí que una solución alternativa para resolver el problema es usar una entrada de servicio como esta:
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: internal-https-redirect spec: endpoints: - address: 10.43.2.170 # istio-ingressgateway ClusterIP hosts: - '*.mydomain.com' location: MESH_INTERNAL ports: - name: internal-redirect number: 443 protocol: HTTPS resolution: STATICPero no estoy seguro de si es la forma correcta de hacerlo o si eso se considera una mala práctica.
Gracias