我已经使用以下命令运行了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!
如何在群集之外访问此服务? (例如,通过笔记本电脑浏览器)
答案 0 :(得分:2)
您应该尝试
IP_OF_KUBERNETES可以是您的主IP,也可以是您的工作IP 当您在kubernetes中公开一个端口时,它将在集群中所有服务器中公开该端口。假设您有两个工作节点,分别为IP1和IP2 并且一个Pod在IP1中运行,在worker2中没有Pod,但是您可以通过以下方式访问您的Pod:
答案 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
答案 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。