k8s提供多种方式将集群内部服务暴露至外部网络,包括NodePort、LoadBalancer、Ingress等。本文将重点探讨LoadBalancer与Ingress的具体实践。
LoadBalancer作为服务外网暴露的标准方式,通过在创建Service时指定类型为LoadBalancer,k8s将通过status.loadBalancer字段发布负载均衡器信息供服务外部的负载均衡系统创建。通常,云服务商提供如腾讯云CLB、阿里云SLB等服务,创建Service时自动创建负载均衡器。本地环境如需搭建LoadBalancer,可借助MetalLB项目,它基于标准路由协议(如ARP/BGP)实现裸机K8s集群的负载均衡器功能。安装MetalLB参考官方文档,安装后,Service创建时,EXTERNAL-IP将从地址池中自动获取用于外部访问的IP,外部流量通过ARP广播定位所属Service,由k8s内部iptables规则与kube-proxy将流量引导至后端。
LoadBalancer基于L4传输层,存在局限性,且每个Service对应一个静态IP。而Ingress作为L7层负载均衡器,提供更丰富的功能,如服务提供外部可访问的URL、负载均衡流量、终止SSL/TLS、基于名称的虚拟主机等。Ingress由两部分组成:集群外部流量首先经过Ingress Controller,然后根据配置的路由规则转发至后端Service。Ingress Controller是守护进程和反向代理应用,监听资源变化,生成反向代理配置。对于已经配置好LoadBalancer服务的场景,创建类型为LoadBalancer的Service关联Pod,将域名解析指向该地址,即可实现对外暴露集群服务。此外,Ingress Controller可通过helm或资源清单方式安装,安装后通过编辑Service设置其类型为LoadBalancer。
创建Ingress Controller后,需配置路由规则,包括`host`、基于URL的路由等。`ingress.kubernetes.io/rewrite-target`注解用于重定向后端服务中暴露的URL与Ingress规则中指定的路径不同时的情况。配置好路由规则后,检查Service,此时控制器将获得一个EXTERNAL-IP,完成Ingress Controller与路由规则的搭建。进入nginx-ingress controller pod,查看nginx.conf以确认Ingress配置已生成为路由规则。最后,添加后端服务,如修改名称为`nginx-apiv1`和`nginx-apiv2`的service与deployment,完成URL路由测试。
通过本文,读者应能对LoadBalancer与Ingress的实践有初步了解,并能够按照步骤搭建相应的环境。Ingress的路由规则配置较为复杂,建议通过官方文档深入学习以适应更多应用场景。希望本文能够为读者提供帮助,如有错误,欢迎指正。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。