2

我已经使用kubespray设置了一个 kubernetes 集群,现在我正在尝试遵循本指南

root@node1 ~ # kubectl get -n heptio-contour service contour -o wide
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE       SELECTOR
contour   LoadBalancer   10.233.55.94   <pending>     80:32414/TCP,443:30149/TCP   42m       app=contour

它似乎EXTERNAL-IP正在等待,因为我在裸机上(不是 AWS/GKE 等)

我需要做什么才能让外部IP显示在那里?

4

1 回答 1

5

Kubernetes提供了三种公开服务的方式:

1) L4 LoadBalancer:仅适用于 GCE 和 AWS 等云提供商

2) 通过 NodePort 公开服务:NodePort指令在每个工作节点上分配一个端口,将流量代理到相应的 Pod。

3) L7 Ingress:Ingress是一个专用的负载均衡器(例如 nginx、HAProxy、traefik、vulcand),它将传入的 HTTP/HTTPS 流量重定向到相应的端点

Kubernetes 不为裸机集群提供网络负载均衡器(LoadBalancer 类型的服务)的实现。

如果您没有在受支持的 IaaS 平台(GCP、AWS、Azure...)上运行 Kubernetes 集群,则无论创建时间如何,LoadBalancers 都将保持“待处理”状态。

原因是外部世界和Kubernetes之间缺乏IP路由的支持;没有默认实现转移 Ingress 使用的 dns 区域来将通信分配到集群内部。

即使在联合集群模式下,也有外部项目可以提供裸机,作为独立或混合解决方案的一部分。

这取决于您拥有的项目的规模和成熟度,因此应该从选择合适的负载均衡器或VIP提供商开始:

https://github.com/google/metallb

https://docs.traefik.io/

https://github.com/kubernetes/contrib/tree/master/keepalived-vip

http://vulcand.github.io/

并已弃用:

http://www.linuxvirtualserver.org/software/ipvs.html

请注意,在联邦集群(多个裸机 Kubernetes 集群)中,需要将每台物理机的 IP 地址导出到中央 API 提供程序,并且可能不在我提供给您的链接中。

于 2018-05-23T15:24:06.233 回答