最近遇到一个很有代表性的问题:service
,pod
都正常,而且在pod内部 curl 0.0.0.0
也正常,但是curl pod IP,curl service IP 就有问题,提示 connection refused
。
进一步调查发现网络插件,节点都是正常的,而且也没有整那些 istio
之类的高端操作。
最后拉上大佬一起分析发现,发现问题是:容器本身只监听了 localhost
。
所以问题就来了,为啥只监听 localhost
会有问题? localhost
到底是个啥?
于是我问了神奇的海螺,它告诉我: localhost
只是一个域名,根据 host
文件,一般会指向 127.0.0.1
。但 127.0.0.1
是一个自闭的孩子,它只接收本机的IP。也就是说,外部的流量进不了里面。
所以,pod
虽然正常,但是通过 pod ip ,service ip 都无法访问到它。
这是不是像极了产品经理向研发提交了一个需求,但是他的回复是:
所以,回到本题。要解决这个问题,得让应用变得开放,监听 0.0.0.0 即可。0.0.0.0
表示内外网都可以访问到。
参考链接
- 监听不同ip地址的差异