我是 Kubernetes 的新手,我有一些疑问。我已经设置了一个由一个主/节点和一个节点组成的 Kubernetes 集群。我已经部署了一个非常简单的基于 NodeJS 的应用程序,使用Deployment
带有 2 个副本的 kind。然后,我将它公开为服务kubectl expose deployment my-app --port=80
。
现在,我的服务看起来像:
root@sw-kubernetes01:~# kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-app 192.168.100.167 <none> 80/TCP 10m
kubernetes 192.168.100.1 <none> 443/TCP 1h
是否应该我应该访问我的应用程序导航到http://192.168.100.167:
?我收到超时错误。否则,如何获取外部 IP 以在外部访问服务?
我知道如果我将服务声明为type: NodePort
,我可以使用节点 IP 访问我的应用程序,不存在自动平衡 pod 之间负载的方法吗?
如果您在 GCE、EC2 或 OpenStack 上运行,通常需要一两分钟来创建负载均衡器并
EXTERNAL_IP
填充字段。该字段中的 IP 是您应该用来访问您的服务的 IP。如果您不在 GCE、EC2 或 OpenStack 上运行,则外部负载均衡器功能对您不起作用,因为 Kubernetes 不知道如何在您的环境中创建一个。
如果您在本地集群上工作,您可以使用
--type=NodePort
kubectl expose deployment my-app --port=80 --type=NodePort
然后 grep 端口
kubectl get svc my-service -o yaml | grep nodePort
您可以使用集群 ip 和上一个 grep 结果输出的端口来浏览它。
正如问题中已经建议的那样,您可以使用提供的端口访问NodePort服务
和任何公共节点 IP。但是,这些请求不需要以您用于请求的 IP 的节点结束。实际上,这些请求在集群内被路由到与服务关联的任何 Pod。所以这里有一些负载平衡。