我在8081上有一个可以访问的服务。如果我通过docker-compose或swarm来做,而不对端口进行任何特定的更改,那么它就可以工作。
http://$(minikube ip):8081
但是当我通过Kubernetes(minikube)运行我的应用程序时,分配了一个范围为30000-32767的nodePort。那么我必须打电话如下:
http://$(minikube ip):30546
这是我不能接受的有没有办法将随机给定的端口Map到我自己定义的端口?当调用第二个网址,然后我得到连接拒绝,我还使用
kubectl port forward my-service 8081
但还是没有成功
3条答案
按热度按时间0qx6xfy61#
kubectl port-forward命令不正确。尝试低于1
那么你应该能够访问http//:127.0.0.1:8081上的服务
wkyowqbh2#
这个答案并不特定于Minikube,但适用于在Docker容器内运行的任何Kubernetes集群。
为了将请求从主机发送到容器中运行的Kubernetes pod,您必须将端口从主机Map到pod。
下面是你如何做到这一点:
1.使用
--publish
或-p
将您要在容器内使用的NodePort发布到主机。1.创建服务时使用自定义NodePort:
Pod中的应用程序监听端口
80
,该端口在端口3000
上公开为服务。在Kubernetes节点上的端口31080接收的流量将定向到此服务。您发送到主机上的8080的查询将遵循以下路径:
参考文献:
vdzxcuhz3#
在非云环境中实现此目的的一种方法是使用
type: NodePort
和外部IP配置。我在这里定义了这个API服务:现在,当应用服务时,它将具有定义的外部IP:
当您使用此服务的IP地址和端口组合时,流量将根据服务的选择器转发到服务的Pod。现在,我可以访问集群
curl <specified IP>:80
外部的API了。当您希望控制可以使用哪些特定IP访问服务时,此方法非常有效。