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

问题描述 投票:0回答:1

我们正在使用 kubernetes (1.17.14-gke.1600) 和 istio (1.7.4)
我们有多个部署需要使用公共 DNS 记录相互发出 HTTPS 请求 (

mydomain.com
)。这里的目标是发出内部 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

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

谢谢你

linux kubernetes networking google-kubernetes-engine istio
1个回答
0
投票

您希望集群内的服务能够使用与外部调用相同的主机名吗?

使用您正在运行的 VirtualService 设置,您可以尝试向集群上的 DNS 设置本身添加重写规则,以指向入口网关的负载均衡器/集群 IP,而不是添加 ServiceEntry。这将导致从您的服务网格发起的流量到达入口网关,而您无需随时知道实际 IP。

这是 coredns 的示例,您可能正在使用它。

这种方法的缺点是,您需要找到一种适合您的设置的方法,将其注入到 coredns 配置映射中,而不是像 ServiceEntry 那样部署额外的配置。

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
Corefile: |
.:53 {
  ...
  rewrite name exact myservice.mydomain.com istio-gateway.istio-system.svc.cluster.local
  ...
  loop
  reload
  loadbalance
}
© www.soinside.com 2019 - 2024. All rights reserved.