【问题标题】:kubernetes virtual service for Zuul Proxy fails without port forwardingZuul Proxy 的 kubernetes 虚拟服务在没有端口转发的情况下失败
【发布时间】:2020-01-06 16:58:13
【问题描述】:

我在 kubernetes 中有一个虚拟服务,定义在以下文件中,

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: {{ .Chart.Name }}-vs
  namespace: istio-system
spec:
  hosts:
    - {{ .Values.virtualservice.host }}
    - {{ .Chart.Name }}.default.svc.cluster.local
  gateways:
    - {{ .Values.virtualservice.gateway }}
    - mesh
  http:
    - route:
        - destination:
            host: {{ .Chart.Name }}.default.svc.cluster.local
            port:
              number: {{ .Values.service.port }}
      corsPolicy:
        allowOrigin:
          - '*'
        allowMethods:
          - OPTIONS
          - GET
          - POST
          - PUT
          - DELETE
        allowCredentials: true
        allowHeaders:
          - '*'
        maxAge: "24h"

当我转发到它时,我的实际服务运行良好。这是一个只提供 HTTP 服务的 Java 应用程序。

但是,当我尝试通过上面定义的虚拟服务使用HTTPS 访问它时,它会失败。 静态页面加载正常。但是,如果遇到导致应用程序进入后端并访问另一个服务的东西,我就会失败。 该应用实际上是一个 Zuul 代理,需要打后端服务。

我无法弄清楚如何调试此问题或可能导致此问题的原因。

谢谢

编辑

我注意到一件奇怪的事情。包括 api-gw 在内的所有服务都在监听 8080 端口。它们都是Spring-boot 应用程序。

Fails:

  • API-gw 服务、SpringBootApp 和 Docker 容器和 kube 服务 - 8080
  • 后端服务、SpringBootApp 、Docker 容器和 kube 服务 - 8080

Succeeds:

  • API-gw 服务、SpringBootApp 和 Docker 容器以及 kube 服务 - 11243 [除 8080 之外的任何东西]
  • 后端服务、SpringBootApp 、Docker 容器和 kube 服务 - 8080

这是什么原因?

谢谢

【问题讨论】:

  • 您能否提供有关 ingressgateway 和您的 springboot pod 上的端口的信息? istioctl proxy-config listeners , istioctl proxy-config cluster -n istio-system istio-ingressgateway。后端注入了吗?
  • 当我将 API-gw 的端口更改为 11243 时,listeners 命令输出是这样的。特使是否在一个容器中监听所有这些端口和 IP? [clipped] ``` 地址端口类型 10.51.1.37 11243 HTTP .. 10.0.0.10 53 TCP 10.0.125.210 80 TCP 10.0.0.1 443 TCP 10.0.230.67 443 TCP .. 10.0.8.156 8080 TCP .. 0.0.0.0 9092 TCP 10.0.63.7 8088 TCP 10.0.77.207 8080 TCP 0.0.0.0 8080 TCP 0.0.0.0 80 TCP ```

标签: kubernetes kubernetes-ingress istio


【解决方案1】:

基于medium 和 listeners 命令,我认为答案是端口冲突。

API 网关是一种通过单一入口点访问后端所有服务的概念。

您不应该在 api-gw 上使用与前端和后端相同的端口。

API 网关将在 8090 端口运行

产品将在端口 8080 中运行

API 网关将被配置为将所有流量重定向到产品服务。

因此,当您将端口从 8080 更改为 11243 等随机空闲端口时,它可以正常工作,因为前端/后端和 api 网关之间没有端口冲突。

希望对你有所帮助。如果您还有其他问题,请告诉我。

【讨论】:

  • 感谢您的回答。然而,这些是完全不同的容器和服务。他们的IP也不同。我不明白为什么IP相同我必须更改端口
  • 你好@user3169330,看看这个stackoverflow answer,我认为在cmets中有你正在寻找的答案,似乎你不能为不同的服务使用相同的端口,因为它会产生冲突飞行员。
  • 谢谢@jt97 ,是的,这确实是答案,即关于飞行员的一点。我也找到了这个页面——istio.io/docs/ops/deployment/requirements,它描述了 istio 使用的端口。
猜你喜欢
  • 2021-01-05
  • 2020-01-22
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2012-03-22
  • 2016-12-03
  • 2022-11-22
  • 2018-03-05
相关资源
最近更新 更多