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

时间:2019-04-10 06:24:11

标签: kubernetes

我已经使用以下命令运行了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 http://10.XX.XX.XX:8080
Hello Kubernetes!

如何在群集之外访问此服务? (例如,通过笔记本电脑浏览器)

4 个答案:

答案 0 :(得分:2)

您应该尝试

http://IP_OF_KUBERNETES:32023

IP_OF_KUBERNETES可以是您的主IP,也可以是您的工作IP 当您在kubernetes中公开一个端口时,它将在集群中所有服务器中公开该端口。假设您有两个工作节点,分别为IP1和IP2 并且一个Pod在IP1中运行,在worker2中没有Pod,但是您可以通过以下方式访问您的Pod:

http://IP1:32023

http://IP2:32023

答案 1 :(得分:1)

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

http://<MASTER/WORKER_IP>:32023

答案 2 :(得分:0)

您可以使用MasterIP或WorkerIP访问您的服务。如果您打算将其用于生产或以更可靠的方式使用,则应使用php.ini创建服务。并使用负载均衡器IP进行访问。

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

这将负责将请求重定向到Pod运行于哪个节点。否则,您将必须根据Pod的运行位置手动命中masterIP或workerIP。如果广告连播移至其他节点,则必须更改您要点击的IP

Service Load Balancer

答案 3 :(得分: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。