ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kubernetes之ingress探索实践

2022-07-01 10:31:06  阅读:179  来源: 互联网

标签:ingress kubernetes 探索 app Ingress nginx tomcat name


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统一实现请求的分发,根据定义的路由规则,把请求分发给下游服务。
image.png
有了Ingress服务后,只需要对外暴露一个端口即可,其它所有的服务都只需要在内网访问即可。

3.2、Ingress原理

官网的原图:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
image.png
Ingress的作用跟Nginx有点像,但这里之所以不用Nginx,是因为每个Pod服务都是动态生成的,以为Pod服务域名、IP都可能会发生变化,所以没办法直接用Nginx.
而Ingress就像是一个提供动态的nginx。通过将要路由的服务转化成一个规则,通过对一系列的规则进行监听转发。
image.png

3.3、Ingress实战

3.3.1、Ingreess安装

可以参考https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0
image.png
按顺序部署上图中的几个文件服务即可。
再给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: http
      port: 80
      targetPort: 80
      nodePort: 30080
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      nodePort: 30443
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

执行:kubectl apply -f ingress-servce.yaml

3.3.2、入门案例

目标:实现ingress转发规则定义,实现从Ingress定义的规则把请求转发到服务。
1)定义一个后端服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: harbor.hyz.com/library/mynginx:v1
        ports:
        - containerPort: 80

2)定义Ingress转发规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  rules:
  - host: ingress.huangyz.com
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80

通过域名访问:
image.png
具体的流转对应流程:
image.png
随机进入某一个nginx-ingress-controller服务,查看根据规则动态生成的nginx路由配置:
image.png

3.3.3、多个域名(多个服务)

1)部署nginx服务(已部署),部署tomcat服务

apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
spec:
  selector:
    app: tomcat
  ports:
  - port: 8080
    targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: harbor.hyz.com/library/mytomcat:v1
        ports:
        - containerPort: 8080
  1. 部署Ingress规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  rules:
  - host: ingress1.huangyz.com
    http:
      paths:
        - path: /
          backend:
            serviceName: nginx
            servicePort: 80
  - host: ingress2.huangyz.com
    http:
      paths:
        - path: /
          backend:
            serviceName: tomcat
            servicePort: 8080

访问:http://ingress1.huangyz.com:30080,http://ingress2.huangyz.com:30080:分别访问nginx,tomcat的应用页面。
image.png
image.png
查看动态生成的配置,多了tomcat一项的路由配置:
image.png

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
    http:
      paths:
        - path: /nginx  # 请求是/nginx/** 都会被拦截,请求发送给nginx服务
          backend:
            serviceName: nginx
            servicePort: 80
        - path: /tomcat
          backend:
            serviceName: tomcat
            servicePort: 8080

注意
path : /nginx 请求必须满足:ingress.huangyz.com/nginx 必须要求后端服务也有与之对应的请求;
@GetMapping(“/nginx”)
Path: / tomcat
@GetMapping(“/tomcat”)
image.png

3.3.5、Ingress重定向

我们把nginx的请求重定向到百度首页:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
  annotations:
    nginx.ingress.kubernetes.io/permanent-redirect: https://www.baidu.com
spec:
  rules:
  - host: ingress.huangyz.com
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80

3.3.6、总结

这里只是试验了几种情况,验证了基本都是nginx的功能,只不过实现了nginx的路由规则动态配置化了。感兴趣的童鞋也可以根据上面的几种情况,在自己的环境上进行一个验证。

标签:ingress,kubernetes,探索,app,Ingress,nginx,tomcat,name
来源: https://www.cnblogs.com/process-h/p/16433656.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有