1. 概述
用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。
优点是整个请求链路最简单,性能相对NodePort模式更好。
缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod。
比较适合大并发的生产环境使用。
2. 部署
修改ingress controller部署文件
$ vim mandatory.yaml
kind: DaemonSet //改为DaemonSet控制器
# replicas: 1 //删除replicas
hostNetwork: true //使用HostNetwork
nodeSelector: //修改节点选择
type: "ingress"
设置ingress controller节点的标签
$ kubectl label nodes server6 type=ingress
更改某个node的标签,因为selector是通过标签选择的。只让某个pod具有某个独特的标签。
删除原来的nginx-ingress-controller
[kubeadm@server1 ingress]$ kubectl -n ingress-nginx delete deployments.apps nginx-ingress-controller
deployment.apps "nginx-ingress-controller" deleted
[kubeadm@server1 ingress]$
重新apply
ser3上发现,宿主机的80和443端口打开了
外部访问测试(负载均衡也实现)
要想再加某个后端进去时,只需要为后端的那个node节点添加上标签就好。