• kubernetes之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统一实现请求的分发,根据定义的路由规则,把请求分发给下游服务。
    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的路由规则动态配置化了。感兴趣的童鞋也可以根据上面的几种情况,在自己的环境上进行一个验证。

  • 相关阅读:
    CMMI认证要求
    java返给前端ECharts的格式
    transforms.Normalize()函数的计算过程及参数由来
    nodejs爬虫 测试 modi
    【研究生学术英语读写教程翻译 中国科学院大学Unit2】
    自动化测试中,测试数据与脚本分离以及参数化方法
    java-net-php-python-net本科生毕业设计选导师系统演示录像2019计算机毕业设计程序
    API调用,API传参,面向对接开发,你真的会写接口文档吗?
    【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法
    关于小程序 scroll
  • 原文地址:https://www.cnblogs.com/process-h/p/16433656.html