gpt4 book ai didi

kubernetes - Istio 可从浏览器访问,但不能从 curl 访问

转载 作者:行者123 更新时间:2023-12-02 12:12:04 24 4
gpt4 key购买 nike

所以我已经成功部署了 istio,至少我是这么认为的,一切似乎都运行良好。我已经在 Istio 中部署了我的 API,我可以通过浏览器访问它。我什至可以使用 postman 测试我的 API,但是当我尝试通过 curl 访问我的 API 时,它显示 The remote name could not be resolved: 'api.localhost' .那是第一个危险信号,但我忽略了它。现在我正在尝试从我的 web 应用程序访问我的 API,但 Chrome 以 net:ERR_FAILED 响应.

似乎我的服务只对主机可用,也就是我,没有别的。我似乎无法在互联网上找到解决方案,所以我希望有人有经验并知道解决方法。

谢谢!

编辑:更多信息

我的基础设施都是本地的, Docker for Desktop with Kubernetes .我使用的 Istio 版本是 1.5.0 .

网关 :

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: api-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http-api
protocol: HTTP
hosts:
- "api.localhost"

虚拟服务 :
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: pb-api
spec:
gateways:
- api-gateway
hosts:
- "*"
http:
- match:
- uri:
prefix: /
rewrite:
uri: /
route:
- destination:
host: pb-api
port:
number: 3001

当我尝试做 curl http://api.localhost/user/me我期待 401 ,但我得到 The remote name could not be resolved: 'api.localhost'如上所述。该错误与我关闭桌面版 Docker 并重试时相同。通过 postman 和浏览器可以正常工作,但是 curl 和我的 react webapp 无法访问它。

最佳答案

正如我在评论中提到的那样, curl 应该是这样的

curl -v -H "host: api.localhost" istio-ingressgateway-external-ip/



您可以使用以下命令检查 istio-ingressgateway-external ip
kubectl get svc istio-ingressgateway -n istio-system

正如@SjaakvBrabant 提到的

External IP is localhost so I tried this command curl -v -H "host: api.localhost" localhost/user/me which gave me 401



Ubuntu minikube 示例

此外,如果您想 curl api.localhost 本身,那么您必须在本地配置您的主机,我不确定这在您的情况下如何工作,因为您的外部 IP 是 localhost。

但如果你愿意,你可以使用 metallb这是一个负载均衡器,因此您的 istio-ingressgateway 将获得一个可以在 etc/hosts 中配置的 IP。

yaml
piVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: demo
spec:
selector:
matchLabels:
app: demo
replicas: 1
template:
metadata:
labels:
app: demo
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello nginx1 > /usr/share/nginx/html/index.html"]

---

apiVersion: v1
kind: Service
metadata:
name: demo
namespace: demo
labels:
app: demo
spec:
ports:
- name: http-demo
port: 80
protocol: TCP
selector:
app: demo


---

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: demo-gw
namespace: demo
spec:
selector:
istio: ingressgateway
servers:
- port:
name: http
number: 80
protocol: HTTP
hosts:
- "example.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-vs
namespace: demo
spec:
gateways:
- demo-gw
hosts:
- "example.com"
http:
- match:
- uri:
prefix: /
rewrite:
uri: /
route:
- destination:
host: demo.demo.svc.cluster.local
port:
number: 80

等/主机
127.0.0.1       localhost
10.101.143.xxx example.com

测试
curl -v -H "host: example.com" http://10.101.143.xxx/

< HTTP/1.1 200 OK


curl -v example.com

< HTTP/1.1 200 OK

希望您觉得这个有帮助。

关于kubernetes - Istio 可从浏览器访问,但不能从 curl 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com