如何深入探索和实践Kubernetes Ingress以构建高效的网络入口?
- 内容介绍
- 文章标签
- 相关推荐
本文共计673个文字,预计阅读时间需要3分钟。
Ingress应用入口+3、Ingress实现3.1、什么是Ingress?+在Ingress之前,我们想要访问k8s集群中的pod服务时,通常是通过部署一个service,将service的type设置为NodePort或LoadBalance,这样可以在内部访问。
ingress应用入口 3、Ingress实践 3.1、什么是Ingress?在ingress之前,我们想要访问k8s集群中的pod服务时,是通过部署一个service,将service的type设置为NodePort或者将设置为LoadBalance,这样可以在物理机上开辟出一个物理端口给到对应的service,service再通过dns解析出具体要路由的Pod服务,从而对Pod服务进行服务转发访问。
但是在生产环境,一般是会有几百上千个pod服务,意味着需要有几百上千个service对象,那么多service对象对外提供访问服务,都需要开辟端口,需要面临下面几个问题:
1、这些service该怎么去管理?
2、这么多端口管理,端口的建立需要消耗资源,降低性能。
3、访问困难,这么多service,到底应该访问哪个service?
因此kubernetes提供了Ingress方案,Ingress方案为整个集群提供了统一的入口,相当于微服务中的网关(gateway/nginx),所有的service不再对外提供接口方案,所有的请求都经过ingress进行路由转发。
Ingress可以理解为Service 的Service , 相关于是一个网关入口,通过Ingress统一实现请求的分发,根据定义的路由规则,把请求分发给下游服务。
有了Ingress服务后,只需要对外暴露一个端口即可,其它所有的服务都只需要在内网访问即可。
官网的原图:kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
Ingress的作用跟Nginx有点像,但这里之所以不用Nginx,是因为每个Pod服务都是动态生成的,以为Pod服务域名、IP都可能会发生变化,所以没办法直接用Nginx.
而Ingress就像是一个提供动态的nginx。通过将要路由的服务转化成一个规则,通过对一系列的规则进行监听转发。
可以参考github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0 ;
按顺序部署上图中的几个文件服务即可。
再给ingress开辟一个物理端口:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: ingress1.huangyz.com:30080,ingress2.huangyz.com:30080:分别访问nginx,tomcat的应用页面。
查看动态生成的配置,多了tomcat一项的路由配置:
部署nginx,tomcat服务(已部署)
部署ingress规则:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
namespace: default
labels:
app: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # 请求重写,重写定位到跟路径下访问服务
spec:
rules:
- host: ingress.huangyz.com
www.baidu.com
spec:
rules:
- host: ingress.huangyz.com
www.558idc.com/hkzq.html提供,感恩】
本文共计673个文字,预计阅读时间需要3分钟。
Ingress应用入口+3、Ingress实现3.1、什么是Ingress?+在Ingress之前,我们想要访问k8s集群中的pod服务时,通常是通过部署一个service,将service的type设置为NodePort或LoadBalance,这样可以在内部访问。
ingress应用入口 3、Ingress实践 3.1、什么是Ingress?在ingress之前,我们想要访问k8s集群中的pod服务时,是通过部署一个service,将service的type设置为NodePort或者将设置为LoadBalance,这样可以在物理机上开辟出一个物理端口给到对应的service,service再通过dns解析出具体要路由的Pod服务,从而对Pod服务进行服务转发访问。
但是在生产环境,一般是会有几百上千个pod服务,意味着需要有几百上千个service对象,那么多service对象对外提供访问服务,都需要开辟端口,需要面临下面几个问题:
1、这些service该怎么去管理?
2、这么多端口管理,端口的建立需要消耗资源,降低性能。
3、访问困难,这么多service,到底应该访问哪个service?
因此kubernetes提供了Ingress方案,Ingress方案为整个集群提供了统一的入口,相当于微服务中的网关(gateway/nginx),所有的service不再对外提供接口方案,所有的请求都经过ingress进行路由转发。
Ingress可以理解为Service 的Service , 相关于是一个网关入口,通过Ingress统一实现请求的分发,根据定义的路由规则,把请求分发给下游服务。
有了Ingress服务后,只需要对外暴露一个端口即可,其它所有的服务都只需要在内网访问即可。
官网的原图:kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
Ingress的作用跟Nginx有点像,但这里之所以不用Nginx,是因为每个Pod服务都是动态生成的,以为Pod服务域名、IP都可能会发生变化,所以没办法直接用Nginx.
而Ingress就像是一个提供动态的nginx。通过将要路由的服务转化成一个规则,通过对一系列的规则进行监听转发。
可以参考github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0 ;
按顺序部署上图中的几个文件服务即可。
再给ingress开辟一个物理端口:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: ingress1.huangyz.com:30080,ingress2.huangyz.com:30080:分别访问nginx,tomcat的应用页面。
查看动态生成的配置,多了tomcat一项的路由配置:
部署nginx,tomcat服务(已部署)
部署ingress规则:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
namespace: default
labels:
app: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # 请求重写,重写定位到跟路径下访问服务
spec:
rules:
- host: ingress.huangyz.com
www.baidu.com
spec:
rules:
- host: ingress.huangyz.com
www.558idc.com/hkzq.html提供,感恩】

