我们知道我们的应用程序部署在容器中之后,外部需要访问它,那么怎么来实现呢,就是通过一个叫service的服务提供的IP地址+端口号,如果集群外部的服务器想要访问呢,那就是IP(node节点的IP)+nodeport,但是这样会有问题,就是当我们的service很多的时候,那么节点的端口号就会被大量的占用,可能会影响其他应用程序,那么这个时候就出现了ingress。类似提供一个反向代理的功能。

反向代理和正向代理的区别:
正向代理是将客户端的信息隐藏掉。不会让服务器获得客户端的一些信息。
反向代理是将服务器端的信息隐藏掉。

它就是为了解决上面的节点端口号不够的问题,它的实现原理是:通过ingress定义不同的service对应不同的域名,也就是域名和service进行关联,而service和pod之间的关联没有改变,外部访问的话,直接通过域名+service的端口号就可以访问。

支持https和http两种方式:

像下面这个图这样:

hiingress教程 ingress新手教程_nginx


上图就是整个ingress工作流程。

在环境中如何使用呢?

需要通过yaml文件进行定义ingress到service的映射关系。

ingress-https.yml

apiVersion: extensions/vibeta1
kind: Ingress
metadata: 
	name: ingress-https
	namespace: dev
spec:
	tls:# http协议是没有这个参数的。
		- hosts:
			- nginx.itheima.com
			- tomcat.itheima.com
			secretName: tls-secret #指定密钥,这个密钥需要通过证书生成。
	rules:
	- hosts: nginx.itheima.com  #指定域名
	  http:
	  	paths: 
	  	- path: /
	  	  backend:
	  	  	serviceName: nginx-service  #域名对应的service
	  	  	servicePort: 80  #服务对应的端口号
	 - hosts: tomcat.itheima.com  #指定域名
	  http:
	  	paths: 
	  	- path: /
	  	  backend:
	  	  	serviceName: tomcat-service  #域名对应的service
	  	  	servicePort: 8080  #服务对应的端口号

有了上面的yaml文件之后,直接在后台命令行执行:

kubectl  create -f  ingress-https.yml

创建成功之后,可以通过:

kubectl get ingress -n dev

然后可以通过下面命令查看详细信息:

kubectl describe ingress ingress名称  -n dev

外部访问的话,是通过:
https://nginx.itheima.com:service端口号 https://tomcat.itheima.com:service端口号
即可访问。

注意:上面的service端口号是通过,kubectl get svc -n dev 查看的PORT(S)这一列中,比如:80:32240/TCP,443:31335/TCP,这里面的31335.