如何深入探索和实践Kubernetes Ingress以构建高效的网络入口?

2026-04-11 12:321阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计673个文字,预计阅读时间需要3分钟。

如何深入探索和实践Kubernetes Ingress以构建高效的网络入口?

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服务后,只需要对外暴露一个端口即可,其它所有的服务都只需要在内网访问即可。

3.2、Ingress原理

官网的原图:kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/

Ingress的作用跟Nginx有点像,但这里之所以不用Nginx,是因为每个Pod服务都是动态生成的,以为Pod服务域名、IP都可能会发生变化,所以没办法直接用Nginx.
而Ingress就像是一个提供动态的nginx。通过将要路由的服务转化成一个规则,通过对一系列的规则进行监听转发。

3.3、Ingress实战 3.3.1、Ingreess安装

可以参考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一项的路由配置:

如何深入探索和实践Kubernetes Ingress以构建高效的网络入口?

3.3.4、一个域名(多个服务)

部署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分钟。

如何深入探索和实践Kubernetes Ingress以构建高效的网络入口?

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服务后,只需要对外暴露一个端口即可,其它所有的服务都只需要在内网访问即可。

3.2、Ingress原理

官网的原图:kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/

Ingress的作用跟Nginx有点像,但这里之所以不用Nginx,是因为每个Pod服务都是动态生成的,以为Pod服务域名、IP都可能会发生变化,所以没办法直接用Nginx.
而Ingress就像是一个提供动态的nginx。通过将要路由的服务转化成一个规则,通过对一系列的规则进行监听转发。

3.3、Ingress实战 3.3.1、Ingreess安装

可以参考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一项的路由配置:

如何深入探索和实践Kubernetes Ingress以构建高效的网络入口?

3.3.4、一个域名(多个服务)

部署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提供,感恩】