Istio无法将请求路由到具有不同目标端口的工作负载

问题描述

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

我还有一个虚拟服务,该服务通过端口80(为该服务配置的唯一端口)路由到该服务。如果服务端口和容器端口相同,则可以使用相同的配置。

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

解决方法

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

如果您使用istio,则服务类型应为ClusterIP,而不是LoadBalancer,并且您应将istio Ingress网关服务与相应的gateway和{{3 }}来管理来自外部(浏览器)的流量。

来自外部的流量-> istio入口网关->网关->虚拟服务-> [特使边车代理->吊舱]

如果要在网格内的Pod之间进行通信,则可以使用clusterIP服务的ip或dns名称。


我还有一个虚拟服务,该服务通过端口80(为该服务配置的唯一端口)路由到该服务。如果服务端口和容器端口相同,则可以使用相同的配置。

那是正确的方法。

我建议从virtual service开始,以了解其工作原理。


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

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

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

您可以使用bookinfo application进行设置。

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"