Service & Ingress
Service
- 基于iptables或ipvs实现的四层负载均衡机制
- 不支持基于URL等机制对HTTP/HTIPS协议进行高级路由、超时/重试、基于流量的灰度等高级流量治理机制
- 难以将多个Seryice流量统一管理
Ingress
-
由Ingress API和Ingress Controller共同组成
-
前者负责以k8s标准的资源格式定义流量调度、路由等规则
-
后者负责监视(watch)Ingress并生成自身的配置,并据此完成流量转发。
-
Ingress Controller非为内置的控制器,需要额外部署
-
通常以Pod形式运行于Kubernetes集群之上
-
一般应该由专用的LB Service负责为其接入集群外部流量
Ingress API
将Kubernetes集群内部运行的某服务(Service)通过七层负载均衡的机制开放到集群外部。Ingress API是Kubernetes一种声明式配置接口。
Ingress Controller
Ingress Controller 是实现Ingress API的实体。
通常将能够通过API Server读取ingress的定义,并能够将其自动转换成当前应用程序的配置,而且支持自动热重载,它就能够成为支撑Ingress API的Ingress Controller。
- 读取 Ingress 定义:Ingress Controller 需要能够监听 Kubernetes API Server,以获取 Ingress 资源的定义。这包括对 Ingress 资源的增加、删除和修改的监听。
- 自动转换配置:Ingress Controller 根据读取到的 Ingress 定义,自动转换并更新其内部的配置。这个配置决定了如何将外部流量路由到集群内的服务。
- 支持自动热重载:当 Ingress 资源发生变化时,Ingress Controller 应该能够无需重启服务的情况下,动态地更新其路由规则。这种能力通常称为“热重载”,意味着流量不会因配置更新而中断。
- 实现 Ingress API:Ingress Controller 需要实现 Kubernetes Ingress API 的规范,确保它能够支持定义的路由规则、SSL 终端、重写规则等。
- 网络和负载均衡:Ingress Controller 通常还需要与网络组件交互,如服务发现、负载均衡器配置等,以确保流量正确地分发到后端服务。
- 高可用性和容错性:在生产环境中,Ingress Controller 应该具备高可用性和容错性,以确保流量管理的稳定性。
- 安全性:Ingress Controller 管理着进入集群的流量,因此需要考虑安全性,包括 SSL/TLS 证书管理、访问控制等。
Ingress创建
LoadBalancer + Ingress Nginx
1、部署 LoadBalancer
创建一个 LoadBalancer 类型的 Service 来为 Ingress 控制器提供外部访问点。云服务提供商会为您的 LoadBalancer 分配一个外部 IP 地址,该地址将流量路由到 Ingress 控制器。
通过MetalLB 也可以实现 Kubernetes 集群的负载均衡。
2、部署 Ingress 控制器
部署一个 Ingress 控制器,如 nginx-ingress、traefik 或 haproxy-ingress。这些控制器会监视 Ingress 资源,并根据定义的规则配置其内部的负载均衡器和反向代理。
- 外部流量策略设置
使用Nodeport类型的service时,不确定流量从哪个节点进入需要修改外部流量策略为Cluster。
externalTrafficPolicy : Local (Local只负责将从哪个节点进来的流量只调度给率属于该Service的Pod)
externalTrafficPolicy : Cluster
3、创建工作负载以及Service
4、定义 Ingress 资源
创建 Ingress 资源来定义如何将外部流量路由到集群内的服务。这些资源指定了域名、URL 路径和后端服务之间的映射。
Ingress需要通过Ingressclass指定所属的Ingress Controller。
对于每个ingress资源的定义,都会被ingress 控制器通过API Server读取过来装换成自身的配置文件,载入到该进程之上。
基于demo.magedu.com主机名称空间default下的demoapp服务发布出去。
--rule=主机名/path=后端服务:端口
--class=ingressclass (kubectl get ingressclass)
kubectl create ingress demoapp --rule='demo.magedu.com/*'=demoapp:80 --class='nginx' -n default --dry-run=client -o yaml
标签:ingress,Service,Ingress,流量,Controller,API,k8s
From: https://www.cnblogs.com/OpenSourceSite/p/18407716