kubenetes 中的ingress
一般在生产kubernetes中常使用nodePort进行服务的暴露。在集群前端使用nginx做反向代理,此种方式比较简单。抱着更加深入了解kubernetes的特性,本文不介绍nodePort,准备研究下ingress方式。去年在生产环境中因为xvlan使用的flannel,很快就成功了,以前的项目地址:https://github.com/shenshouer/k8s-ingress-controller。但没有文档记录加之现在kubernetes更新了好几个版本,变化比较大,准备重新试玩下,并将操作步骤记录。
使用calico的kubernetes
目前在使用calico或其他CNI网络插件作为xvlan的kubernetes集群中,如果选择ingress作为服务暴露的方式的话,可能不会成功。因为ingress的controller需要时用hostPort来暴露nginx的端口,所有服务访问都需通过绑定到宿主机的这个端口来进行。但CNI目前在k8s中好像与docker有冲突,如果在ingress-controller.yaml
中设置类似配置:
...
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
...
此端口不能暴露到node上去。看github上issue中有人建议使用hostNetwork: true
经测试发现,此pod将完全使用宿主机的网络,会造成ingress不能正常代理k8s中的service包括apiserver。在现有版本(当前版本v1.4.5)中我个人觉得如果使用了CNI插件,可能就无法使用ingress。issue地址:https://github.com/kubernetes/kubernetes/issues/23920#issuecomment-258318912
因此在后续的文章中,我将本地的calico环境改成flannel,继续进行ingress的实验,并完善此文章。
使用flannel的kubernetes
待完善