1、什么是ingress?
一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。
Ingress由两部分组成:Ingress controller和Ingress服务。 Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes专门维护了对应的 Ingress Controller。  一个service一个虚拟ip,但是随着服务数量的增加,ip是不够用的,所以就产生了ingress服务,它可以代理不同后端 Service ,这样很多的service在一个ingress下,只需要一个ip即可。ingres在客户和服务之间增加一层,进而实现负载均衡服务。
2、ingress安装
https://kubernetes.github.io/ingress-nginx/
首先在仓库新建项目ingress-nginx 
上传镜像

官网下载ingress-nginx部署所需资源清单deploy.yaml文件,修改镜像地址为本地harbor仓库
 
应用该文件,创建一个新的ns叫ingress-nginx

查看ingress-nginx的所有信息,可以看到产生了两个ingress-nginx-admission和一个ingress-nginx-controller

查看暴露的端口

测试访问成功

3、一个ingress控制多个service
添加svc服务,编辑svc.yaml,创建两个服务,myapp-svc和nginx-svc
  
x`编辑deployment.yaml文件,应用该文件,创建两个标签是myapp的pod和两个标签是nginx的pod。分别作为myapp-svc和nginx-svc的后端。


修改 ingress-nginx-controller的服务类型为LoadBalancer

查看 ingress-nginx-controller这个svc变为LoadBalancer

编写ingress.yaml文件
[root@server2 ingress]
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-myapp
spec:
rules:
- host: www1.westos.org
http:
paths:
- path: /
backend:
serviceName: myapp-svc
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
spec:
rules:
- host: www2.westos.org
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80
ingress-nginx-controller暴露的外部ip是172.25.10.3 , 端口是32006,我们可以在主机中添加解析分析
 
我们访问,可以看到两个不同的域名对应着一个IP,客户可以通过不同的域名(www1.westos.org和www2.westos.org)访问到ingress,ingress再根据标签的不同(myapp和nginx)达到负载均衡,对应到不同的服务(myapp-svc和nginx-svc),不同的服务再连接到不同的pod,看到的东西就不同。这样只有一个ingress的ip,不会浪费ip的资源。

|