istio:使用服务注册中心发出内部 HTTPS 请求

时间:2021-02-06 09:18:15

标签: linux kubernetes networking google-kubernetes-engine istio

我们正在使用 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

但我不确定这样做是否正确,或者这是否被认为是一种不好的做法。

谢谢

0 个答案:

没有答案
相关问题