当前位置: 首页 > 知识库问答 >
问题:

带TLS终端的Istio入口网关返回503服务不可用

杜砚
2023-03-14

我们希望使用Istio入口网关将https流量路由到httpsendpoint。

我们在入口网关终止TLS流量,但我们的后端服务也使用https。

我有以下清单:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: datalake-dsodis-istio-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - "gw-hdfs-spark.dsodis.domain"
    - "spark-history.dsodis.domain"
    port:
      name: https-wildcard
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
      privateKey: /etc/istio/ingressgateway-certs/tls.key
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: gw-spark-history-istio-vs
spec:
  gateways:
  - default/datalake-dsodis-istio-gateway
  hosts:
  - "spark-history.dsodis.domain"
  http:
    - match:
      - uri:
          prefix: /
      route:
        - destination:
            host: gateway-svc-clusterip.our_application_namespace.svc.cluster.local
            port:
              number: 8443
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: originate-tls-for-spark-history
spec:
  host: gateway-svc-clusterip.our_application_namespace.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    portLevelSettings:
    - port:
        number: 8443 
      tls:
        mode: SIMPLE

问题很可能是,我们正在向HTTPS后端发送TLS终止的流量(也就是说)HTTP流量。因此,通过Istio访问服务时,我们可能会发现503服务不可用。

访问它的命令是:

curl -vvvv -H"Host: spark-history.dsodis.domain" --resolve "spark-history.dsodis.domain:31390:IP" https://spark-history.dsodis.domain:31390/gateway/default/sparkhistory  -k

我的问题是,我如何告诉Istio使用https将流量路由到后端服务?

提前谢谢。

最好的问候,罗福伯格

共有1个答案

蒋昊天
2023-03-14

正如RonnyForberger在他的评论中提到的那样,这可以通过创建告诉目标服务的流量是连接的TLS来实现。

所以在这种情况下:

  1. HTTPS请求GateWayHTTP终止
 类似资料:
  • 我有一个在kubernetes pod中运行的应用程序(在我的本地docker桌面上,启用kubernetes),监听端口8080。然后我有以下kubernetes配置 这个很好用。但我想把443端口改成其他端口,比如8443(因为我将有多个网关)。当我有这个,我不能再访问应用程序了。是否有一些配置我遗漏了?我猜我需要配置Istio来接受8443端口?我使用以下命令安装了istio: 编辑:我读了

  • 我一直在玩弄我的Istio集群配置,结果我陷入了无法调试的状态。 我有一个配置了公共IP的SDS网关。我已经在端口5000上部署了Istio HelloWorld应用程序。我可以: 在pod和上执行——这很好用 从以下位置使用istioctl proxy config cluster检查https://istio.io/docs/ops/troubleshooting/network-issues

  • 当我在我的服务器上用wget、curl或python爬行谷歌搜索引擎时,我遇到了一个非常奇怪的问题。Google将我重定向到以[ipv4 | ipv6]开头的地址。谷歌。fr/抱歉/索引重定向。。。最后发送503错误,服务不可用。。。 有时抓取工作正常,有时不是在白天,我尝试了几乎所有可能的方法:强制ipv4/ipv6而不是主机名、引用者、用户代理、vpn、. com/. fr/、代理和tor,.

  • 从外部客户端到库伯内特斯集群内的服务器的TLS握手失败。这是关于理解为什么。 我已经配置了一个Istio入口网关,以通过端口15433上接收的TLS,并将其路由到端口433上的服务器。 当客户端尝试TLS握手时,入口网关日志显示活动,但不显示服务器日志,也不显示istio代理日志。 TLS客户端: 日志 Istio入口网关日志: 其中192.168.101.136是myservice pod的IP

  • 这起作用了 这不是

  • 我很难理解Istio网关端口到底是如何使用的。我指的是下面例子中的第14行 从Istio文档中: 代理应在其上侦听传入连接的端口。因此,如果您应用上面的yaml文件并检查istio-ingress网关pod以监听TCP端口,您会发现实际上使用了端口8169(见下面的输出) 但棘手的部分来了。如果在应用Gateway之前更改istio-ingress网关服务如下: 然后应用网关,实际使用的端口不是8