如何在k8s集群之外公开服务?

问题描述 投票:1回答:4

我使用下面的命令运行了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
4个回答
2
投票

你应该试试

http://IP_OF_KUBERNETES:32023

当您在kubernetes中公开端口时,IP_OF_KUBERNETES可以是您的工作者IP IP。它在集群中的所有服务器中公开该端口。想象您有两个工作节点,IP1和IP2,一个pode在IP1和worker2中运行没有豆荚,但你可以访问你的豆荚

http://IP1:32023

http://IP2:32023


1
投票

您应该能够使用NodePort assingned在集群外部访问它(32023)。请在浏览器中粘贴以下http://<IP>:<Port>,然后您就可以访问您的应用:

http://<MASTER/WORKER_IP>:32023

0
投票

您可以使用MasterIP或WorkerIP访问您的服务。如果您打算在生产中或以更可靠的方式使用它,您应该使用type LoadBalancer创建服务。并使用负载平衡器IP来访问它。

如果您使用任何云环境,请确保防火墙规则允许传入流量。

这将负责重定向运行pod的节点的请求。否则,您必须手动命中masterIP或workerIP,具体取决于pod的运行位置。如果pod移动到不同的节点,则必须更改正在击中的ip

Service Load Balancer


0
投票

已经提供了答案,但我觉得这个主题需要一些整合。

这似乎相当容易。 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。

© www.soinside.com 2019 - 2024. All rights reserved.