k8s-外部访问ingress
文章目录
对外暴露服务 通常使用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
文章作者 duansheli
上次更新 2019-12-25 (325c7b3)