繁体   English   中英

使用 Istio 的两个 pod 之间的简单 http 请求

[英]Simple http request between two pods using Istio

我的前端 pod 正在尝试与我的后端 pod 对话以获取数据库中的所有用户。 当我在前端 pod 中的前端和 istio-proxy 容器中使用 curl 时,调用很简单并且有效:

kubectl exec -it frontend-pod -c frontend-container -- bash
curl backend-svc:8000/users/
# returns correct response

kubectl exec -it frontend-pod -c istio-proxy -- bash
curl backend-svc:8000/users/
# returns correct response

但是,我的前端反应应用程序无法在 Chrome 中访问此端点。 以下是控制台日志:

GET http://backend-svc:8000/users/ net::ERR_NAME_NOT_RESOLVED

看起来域名无法解析。 知道我在这里做错了什么吗?

我正在使用 nginx 为我的前端反应应用程序提供服务(不确定这是否可能是一个问题)。

编辑:一些反馈说我需要调整我的网关和/或虚拟服务文件。 这是它们现在的样子:

# Source: myapp/gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: myapp-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - '*'
---
# Source: myapp/virtual-service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
    - '*'
  gateways:
    - myapp-gateway
  http:
    - route:
        - destination:
            host: frontend-svc
            port:
              number: 80

只是为了确保:您的呼叫是在客户端触发的吗? 如果是,这就是原因,因为http://backend-svc:8000/users/是由核心组件发布的 DNS 条目,并且仅在集群内部可用。

话虽如此,您应该创建一个网关自定义资源。 完整的描述在这里

网关允许将监控和路由规则等 Istio 功能应用于进入集群的流量。

希望我有所帮助。

您的代码示例中有几处看起来有问题:

  1. 您的 Istio VirtualService Routes 与请求不匹配。 正确的格式如下所示:

 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo spec: hosts: - "*" gateways: - bookinfo-gateway http: - match: - uri: exact: /frontend route: - destination: host: frontend-svc port: number: 80

  1. 在同一个 VirtualService 中,您需要一个后端路由。
  2. 您必须修改前端代码才能调用网关后端 URL。 此 URL 需要包括外部 IP 或网关的域名以及外部 HTTP 端口。

将这些东西拼凑在一起的一个很好的资源是Istio 入门页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM