裸机上的 heptio-contour 外部 ip

heptio-contour external ip on bare metal

我已经使用 kubespray, and now I am trying to follow this guide

设置了一个 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 显示在那里?

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

1) L4 LoadBalancer:仅在 GCE 和 AWS 等云提供商上可用

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

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

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

如果您不是 运行 受支持的 IaaS 平台(GCP、AWS、Azure…)上的 Kubernetes 集群,无论创建时间如何,LoadBalancer 都将保持“挂起”状态。

原因是外部世界和Kubernetes之间缺乏IP路由的支持;没有默认实现传输 DNS 区域 Ingress 用于将通信分配给集群内部。

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

这取决于您拥有的项目的规模和成熟度,因此应该从选择合适的负载均衡器或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 cluster)需要将每台物理机的IP地址导出到中央API 提供商,可能它不在我提供给您的链接中。