[英]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 功能应用于进入集群的流量。
希望我有所帮助。
您的代码示例中有几处看起来有问题:
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
将这些东西拼凑在一起的一个很好的资源是Istio 入门页面
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.