对外暴露服务 通常使用ingress作为前置入口 那如何配置 ingress-controller 与外界通信?

LoadBalancer

如果有云厂商的LoadBalancer, 那自然方便

各云厂商的实现可能有所不同
但使用后效果 应该都是高可用的vip入口

其他方案

如果是自建的k8s集群
或者云厂商没有LoadBalancer
又或者不想用云厂商的LoadBalancer

那这个时候整,之间nodePort么

自建-LoadBalance

基于开源项目自建 LoadBalance
https://github.com/danderson/metallb

单节点方案

创建 nginx Ingress Controller 时, 只设置一个pod。

设置service的type为 Nodeport (可能要调整Nodeport的范围来包含80端口) 或者 直接基于pod的hostport、hostNetwork

高可用方案

以DaemonSet方式,设置多个node作为边缘节点 只放网关pod
网络端口和上一步的方案相同
这时由于入口有多个节点 需要统一入口

统一入口-方案A

通过设置dns 轮询方案
即一个域名对应n个ip
当某个节点挂了 会有短暂的部分请求丢失

统一入口-方案B

通过keepalived的VIP 实现统一入口 keepalived又有两种方案 一种是基于 k8s的 kube-keepalived-vip 其仓库已封存,停止更新
另一种是宿主机(与k8s无关)的 keepalived