我正在尝试访问部署在笔记本电脑上运行的本地Kubernetes集群中的Web api(Docker->设置->启用Kubernetes)。以下是我的Pod Spec YAML。
kind: Pod
apiVersion: v1
metadata:
name: test-api
labels:
app: test-api
spec:
containers:
- name: testapicontainer
image: myprivaterepo/testapi:latest
ports:
- name: web
hostPort: 55555
containerPort: 80
protocol: TCP
kubectl get pods
显示test-api的运行情况。但是,当我尝试从笔记本电脑上使用http://localhost:55555/testapi/index连接到它时,没有得到任何回应。但是,我可以使用URL
http:// test-api pod集群IP / testapi / index
。为什么我不能使用localhost:hostport URL访问应用程序?
答案 0 :(得分:1)
我强烈建议您不要这样做。 根据k8s文档:https://kubernetes.io/docs/concepts/configuration/overview/#services
除非绝对必要,否则请不要为Pod指定hostPort。将Pod绑定到hostPort时,它会限制Pod可以安排的位置数,因为每个
组合必须唯一。如果未明确指定hostIP和协议,Kubernetes将使用0.0.0.0作为默认hostIP,使用TCP作为默认协议。
如果仅出于调试目的而需要访问端口,则可以使用apiserver代理或kubectl端口转发。
如果您明确需要在节点上公开Pod的端口,请在使用hostPort之前考虑使用NodePort服务。
那么...您的案例上真的需要hostPort吗?还是NodePort服务可以解决这个问题?
如果确实有必要,那么您可以尝试使用从命令返回的IP:
kubectl get nodes -o wide
http:// 命令中的IP :55555 / testapi / index
另外,另一项可能有助于您进行故障排除的测试是检查您的应用是否可以在Pod IP上访问。
更新
我已经在本地进行了一些测试,并且更好地理解了文档试图解释的内容。让我通过测试:
hostPort: 55555
创建了一个Pod,我用一个简单的nginx完成了。因此,“问题”(实际上是不建议采用这种方法的原因)是,只能通过该特定的节点IP来访问Pod。如果重新启动并在其他节点中启动,则IP也会更改。