我们正在使用 kubernetes (1.17.14-gke.1600) 和 istio (1.7.4)
我们有几个部署需要使用公共 DNS 记录 (mydomain.com
) 相互发出 HTTPS 请求。这里的目标是发出内部 HTTPS 请求,而不是公开然后返回。
我们无法使用“内部”dns(例如my-svc.my-namespace.svc.cluster-domain.example
)更改主机,因为有时会向客户端返回相同的主机以从客户端浏览器发出 HTTP 请求
我们的服务暴露在 HTTP 中,所以我理解如果我们要使用 HTTPS 方案,我们需要通过 istio 网关
这是我的 VirtualService,添加了 mesh
网关,我可以使用公共 DNS 进行内部 HTTP 请求,但这不适用于 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: v1
这里是网关:
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: SIMPLE
我想出一种解决问题的方法是使用这样的服务条目:
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: STATIC
但我不确定这样做是否正确,或者这是否被认为是一种不好的做法。
谢谢