我想避免将type: "LoadBalancer"
用于某个Kubernetes服务,但仍然可以在Internet上发布它。我正在使用Google Cloud Platform(GCP)来运行当前在单个节点上运行的Kubernetes集群。
我尝试了externalIPs
服务配置并轮流提供IP:
kubernetes describe node
报告的Kubernetes节点的IP地址一致)LoadBalancer
类型的Kubernetes服务的公共/外部IP。上述所有内容均未帮助我使用配置为externalIPs
的Kubernetes服务来访问我的应用程序。
那么,如何在不使用LoadBalancer
类型的Kubernetes服务的情况下在Internet上发布服务。
答案 0 :(得分:7)
如果您不想使用LoadBalancer
服务,则公开展示服务的其他选项包括:
NodePort
在type
设置为NodePort
的情况下创建您的服务,Kubernetes将在您的服务将公开的所有节点VM上分配一个端口(docs)。例如。如果您有2个节点,w /公共IP 12.34.56.78
和23.45.67.89
,并且Kubernetes分配您的服务端口31234,那么该服务将在12.34.56.78:31234
和23.45.67.89:31234
上公开提供。 externalIPs
externalIPs
如果您能够将公共IP路由到您的节点,您可以在服务中指定LoadBalancer
告诉Kubernetes“如果您发现某些内容已发送到具有我的服务端口的IP,请将其路由到我。” (docs)
群集端点不适用于此,因为这只是Kubernetes主服务器的IP。另一个/proxy/
服务的公共IP将不起作用,因为LoadBalancer仅配置为路由该原始服务的端口。我希望节点IP能够正常工作,但如果您的服务端口是特权端口,则可能会发生冲突。
/proxy/
端点 Kubernetes API包含一个1.2.3.4
端点,允许您访问群集端点IP上的服务。例如。如果您的群集端点为my-service
,则可以通过使用群集凭据访问my-ns
来覆盖命名空间https://1.2.3.4/api/v1/proxy/namespaces/my-ns/services/my-service
中的{{1}}。这应该只用于测试/调试,因为它在通往服务的途中通过你的Kubernetes主站的所有流量(额外的跳,SPOF等)。
答案 1 :(得分:3)
还有另一个选择:在您的广告连播上设置hostNetwork
标志。
例如,您可以使用helm3通过以下方式安装nginx:
helm install --set controller.hostNetwork=true nginx-ingress nginx-stable/nginx-ingress
然后,可以在运行Pod的节点的IP地址上的端口80和443上使用nginx。您可以使用节点选择器或相似性或其他工具来影响此选择。
答案 2 :(得分:0)
有一些惯用的方法可以在Kubernetes中对外公开服务(请参见注释#{1):