访问kubernetes ingress-controller
ingress-controller可以理解为一套反向代理系统,本身需要暴露端口到集群外部,以便客户端访问。
根据实际使用,给出两种暴露端口的方式,如下:
方案一
拓扑
说明
- ingress-controller使用service的方式,采用service的nodePort暴露端口。
- 默认情况下nodePort从资源池中(默认30000-32767,可通过apiserver参数"--service-node-port-range"指定)自动分配,也可以从资源池中指定具体端口:
- 一般"--service-node-port-range"起始端口不能太小,否则有与宿主机本身应用冲突的可能;
- 如果nodePort不能指定"80"或者"443"端口,客户端访问ingress-controller的url则需要指定具体访问端口。
- 采用service的方式发布服务有负载的效果,流量访问任意宿主机ip都可跳转到pod所在的宿主机。
- yaml参考:以nodePort的形式暴露端口
方案二
拓扑
说明
- ingress-controller采用hostPort的方式,直接暴露pod端口于宿主机。
- ingress-controller本身没有负载特性,没有service,则访问ingress-controllerd的ip会随pod转移而转移。可以通过如下方式解决:
- 前提
mandatory
:ingress-controller采用DaemonSet的形式下发资源,如果宿主机本身没有排斥性,则每个宿主机将下发1个ingress-controller pod; - 负载解决方案1
option1
:如果存在集群vip,客户端可以使用vip访问ingress-controller; - 负载解决方案2
option2
:将负载放在客户端侧DNS系统(或hosts文件)中完成,即一个url地址对应多宿主机的ip。
- 前提
- yaml参考:以hostport的形式暴露端口