书籍来源:《Kubernetes网络权威指南:基础、原理与实践》
一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:《Kubernetes网络权威指南》读书笔记 | 汇总_COCOgsta的博客-CSDN博客
要使用Kubernetes的Ingress访问集群内服务,需要准备三样东西:
- 反向代理负载均衡器;
- Ingress Controller;
- Ingress API。
4.2.1 Ingress Controller的通用框架
Ingress Controller实质上可以理解为监视器,实时地感知后端Service、Pod等的变化;当得到这些变化信息后,I更新反向代理负载均衡器,并刷新其配置,起到服务发现的作用。Ingress Controller的通用框架如图4-12所示。
图4-12 Ingress Controller的通用框架
Ingress Controller将Ingress入口地址和后端Pod地址的映射关系(规则)实时刷新到Load Balancer的配置文件中,再让负载均衡器重载(reload)该规则,便可实现服务的负载均衡和自动发现。
4.2.2 Nginx Ingress Controller详解
Nginx Ingress Controller通过Kubernetes的annotations配置,为Ingress提供丰富的个性化配置。
部署一个Nginx Ingress Controller实例的命令非常简单,如下所示:
Nginx Ingress Controller的Deployment配置文件如下所示:
Nginx Ingress Controller容器监听在80和443端口上。Nginx Ingress Controller这个Deployment是在集群内部署的,还需要把它暴露给集群外。一个使用NodePort暴露服务的配置如下所示:
Nginx Ingress Controller会选择宿主机的一个IP地址(一般是默认网关对应网卡的IP)。
- 测试HTTP L7负载均衡
部署了官方的Nginx Ingress Controller后,再部署一个Nginx的测试应用并暴露为服务,配置如下所示:
然后,创建对应的一个Ingress对象,对外暴露之前创建的Nginx服务,配置文件如下所示:
找到Nginx Ingress Controller对应的容器后查看里面的Nginx配置文件,生成的对应配置段如下所示:
再找一台客户机,设置hosts文件,把域名nginx.testdomain.com设置到和Nginx Ingress Controller所在主机同集群的任意一个节点IP上,打开浏览器访问nginx.testdomain.com即可发现集群内的Nginx已经暴露在集群外。
- 如何实现L4负载均衡
Nginx Ingress Controller有以下两个启动参数:
Ingress API本身并没有关于L4负载均衡的相关定义,因此要想使用Nginx的L4代理功能(包括TCP和UDP),需要在Configmap中配置并传给Nginx Ingress Controller。
下面这个例子就是上文提到的ingress-nginx/tcp-services这个Configmap对象,意思是访问Ingress的3306端口,流量转发给default namespace中名为mysql的Service的3306端口。