【问题标题】:Istio fails to route request to workload with different target portIstio 无法将请求路由到具有不同目标端口的工作负载
【发布时间】:2020-12-28 06:24:52
【问题描述】:

我创建了一个 k8s 服务类型负载均衡器,监听端口 80,同时目标端口设置为 8080,这与容器公开的端口相同。当我尝试从浏览器使用简单的 http get 调用服务时,Istio 不会将请求路由到工作负载容器,而是在超时后重置请求。

我还有一个虚拟服务,它路由到端口 80(为服务配置的唯一端口)上的服务。如果服务端口和容器端口相同,则相同的配置有效。

我的 kubernetes 集群实际上是可以 AKS 的。 这是 Istio 的限制还是我缺少 Istio 的任何配置?我也尝试过 sidecar 在 80/8080 上接收请求并将其绑定到 127.0.0.1:8080 但没有运气。

【问题讨论】:

  • 在 aks 上运行 istio 没有问题。能否请您提供一些配置 yml。
  • 我不确定这里出了什么问题?如果你使用 istio,那么你的服务应该是 ClusterIP 而不是 LoadBalancer,你应该使用 istio 入口网关服务和适当的网关和虚拟服务来管理来自外部(浏览器)的流量,如果你想在内部通信网格,您可以使用 clusterIP 服务 ips/dns 名称。正如@ChristophRaab 已经提到的,您能否提供一些 yaml 以及您希望用它们实现什么?

标签: kubernetes istio kubernetes-pod azure-aks kubernetes-service


【解决方案1】:

当我尝试从浏览器使用简单的 http get 调用服务时,Istio 不会将请求路由到工作负载容器,而是会在超时后重置请求。

如果你使用istio,那么你的服务应该是ClusterIP而不是LoadBalancer,你应该使用带有适当gatewayvirtual service的istio入口网关服务来管理来自外部的流量(浏览器)。

来自外部的流量 -> istio 入口网关 -> 网关 -> 虚拟服务 -> [envoy sidecar proxy -> pod]

如果您想在网格内的 pod 之间进行通信,那么您可以使用 clusterIP 服务 ip 或 dns 名称。


我还有一个虚拟服务,它路由到端口 80(为服务配置的唯一端口)上的服务。如果服务端口和容器端口相同,则相同的配置有效。

这是正确的做法。

我建议从bookinfo application 开始了解它的工作原理。


我的 kubernetes 集群实际上是可以 AKS 的。这是 Istio 的限制还是我缺少 Istio 的任何配置?

您唯一需要在 AKS 上添加的就是将注解添加到 istio-ingressgateway 服务。

service.beta.kubernetes.io/azure-load-balancer-internal: "true"

您可以使用Istio Operator 进行设置。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: default 
  components:
    ingressGateways:
      - name: istio-ingressgateway
        enabled: true
        k8s:
          serviceAnnotations:
            service.beta.kubernetes.io/azure-load-balancer-internal: "true"

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 2015-07-24
    • 2020-04-16
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多