我使用下面的命令运行了Hello World应用程序。
kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
创建了如下服务
kubectl expose deployment hello-world --type=NodePort --name=example-service
豆荚正在运行
NAME READY STATUS RESTARTS AGE
hello-world-68ff65cf7-dn22t 1/1 Running 0 2m20s
hello-world-68ff65cf7-llvjt 1/1 Running 0 2m20s
服务:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
example-service NodePort 10.XX.XX.XX <none> 8080:32023/TCP 66s
在这里,我可以通过群集内的curl来测试它。
curl http://10.XX.XX.XX:8080
Hello Kubernetes!
如何在群集外部访问此服务? (例如,通过笔记本电脑浏览器
你应该试试
当您在kubernetes中公开端口时,IP_OF_KUBERNETES可以是您的工作者IP IP。它在集群中的所有服务器中公开该端口。想象您有两个工作节点,IP1和IP2,一个pode在IP1和worker2中运行没有豆荚,但你可以访问你的豆荚
您应该能够使用NodePort assingned在集群外部访问它(32023)。请在浏览器中粘贴以下http://<IP>:<Port>
,然后您就可以访问您的应用:
http://<MASTER/WORKER_IP>:32023
您可以使用MasterIP或WorkerIP访问您的服务。如果您打算在生产中或以更可靠的方式使用它,您应该使用type LoadBalancer
创建服务。并使用负载平衡器IP来访问它。
如果您使用任何云环境,请确保防火墙规则允许传入流量。
这将负责重定向运行pod的节点的请求。否则,您必须手动命中masterIP或workerIP,具体取决于pod的运行位置。如果pod移动到不同的节点,则必须更改正在击中的ip
已经提供了答案,但我觉得这个主题需要一些整合。
这似乎相当容易。 NodePort实际上公开了您的应用程序,就像每个节点的端口上的名称所示。所以你要做的就是找到pod所在节点的IP地址。你可以通过运行:kubectl get pods -o wide
来做到这一点,这样你就可以找到pod所在节点的IP或名称,然后按照之前的答案说明:所以http://<MASTER/WORKER_IP>:PORT
有更多方法:您可以部署Ingress Controller并配置Ingress,以便可以通过Internet访问应用程序。
您还可以使用kubectl proxy
在群集外部公开ClusterIP服务。就像在Dashboard这个例子中一样。
另一种方法是使用LoadBalancer类型,这需要底层的云基础设施。
如果您使用minikube,您可以尝试运行minikube service list
来检查您的公开服务及其IP。