第12节 Ingress
❤️💕💕新时代拥抱云原生,云原生具有环境统一、按需付费、即开即用、稳定性强特点。Myblog:http://nsddd.top
[TOC]
Ingress
Ingress:service的统一网关入口(nginx实现)
解释
- Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。
- Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。
K8s希望
Ingress成为集群流量的唯一入口。
作用
帮助位于集群中的
Service能够有一个对外可达的url,即让集群外的客户端也可以访问到自己。(wxy:对于这一点,NodePort类型的Service也可以,后面会说到)做专业的负载均衡,毕竟
Service的负载均衡还是很初级的终结
ssl/tls。意思是说对于那些业务不提供https的,为了安全,可以有专门机构帮我们做安全方面的事,业务只需要专注业务就行了,所以可以说是"过滤"ssl/tls基于名称的虚拟
hosting。这个我理解就是我们常说的Ingress是一个基于应用层提供服务的,因为Ingress不仅负责一个业务/Service, 而是可以根据名称区分不同的"hosting"....(wxy: 继续看看可能就理解了)
ingress解决了什么问题?
动态配置服务
如果按照传统方式, 当新增加一个服务时, 我们可能需要在流量入口加一个反向代理指向我们新的k8s服务. 而如果用了Ingress, 只需要配置好这个服务, 当服务启动时, 会自动注册到Ingress的中, 不需要而外的操作.
减少不必要的端口暴露
配置过k8s的都清楚, 第一步是要关闭防火墙的, 主要原因是k8s的很多服务会以NodePort方式映射出去, 这样就相当于给宿主机打了很多孔, 既不安全也不优雅. 而Ingress可以避免这个问题, 除了Ingress自身服务可能需要映射出去, 其他服务都不要用NodePort方式
统一网关
Ingress和Pod关系
pod和Ingress通过service关联,Ingress作为一个统一入口通过域名,由service关联一组Pod
Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。
提示
我们可以看到Ingress是Service的上层,Ingress提供了更好的负载均衡体验~

Ingress是基于nginx的实现了方向代理。内网通过
Service访问,Service实现了负载均衡。Ingress其实也可以说
lngress controller,也就是Ingress控制器,包含了nginx,我们平常传统配置nginx,就是配置反向代理规则。
yaml文件
一个最小的 Ingress 资源示例:
service/networking/minimal-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend: # 监听的后端名称是
service:
name: test
port:
number: 80
提示:
lngress controller会自动监听yaml文件,然后下发任务,配置,这样所有的流量就会打到controller,不需要直接配置nginx。
Ingress 需要指定 apiVersion、kind、 metadata和 spec 字段。 Ingress 对象的命名必须是合法的 DNS 子域名名称。 关于如何使用配置文件,请参见部署应用、 配置容器、 管理资源。 Ingress 经常使用注解(annotations)来配置一些选项,具体取决于 Ingress 控制器,例如重写目标注解。 不同的 Ingress 控制器支持不同的注解。 查看你所选的 Ingress 控制器的文档,以了解其支持哪些注解。
编译文件:

安装nginx测试
ingress 80端口实例
创建应用pod、service
kubectl create deplyment web01 --image=nginx:1.14
kubectl expose deployment web02 --port=80 --protocol=TCP
关联 ingress 80 端口:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: web01-ingress
spec:
rules:
- host: nginx.didi.cn # 域名
http:
paths:
- backend:
serviceName: web01 # 后端service名称
servicePort: 80 # 后端service端口
查看:
kubectl apply *.yaml
注意svc
因为ingress需要接收所有的请求流量,所以Ingress就需要一个端口来接收所有的流量,这个端口还是以NodePort方式暴露出去的~
kubectl get svc -A
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©