热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

22.KubernetesIngress:HTTP7层路由机制

Kubernetes暴露服务的方式目前只有三种:LoadBlancerService、NodePortService、Ingress;下面详细的了解下Ingress。根据前面对Se

Kubernetes 暴露服务的方式目前只有三种:LoadBlancer Service、NodePort Service、Ingress;下面详细的了解下Ingress

根据前面对 Service 的使用说明,我们知道 Service 的表现形式为IP:Port,工作在TCP/IP层,而对于基于 HTTP 的服务来说,不同的URL地址经常对应到不同的后端服务或者虚拟服务器,这些应用层的转发机制仅通过kubernetes的Service机制是无法实现的。kubernetes V1.1版本中新增Ingress将不同URL的访问请求转发到后端不同的Service,以实现HTTP层的业务路由机制。

Ingress由两部分组成:Ingress ControllerIngress 服务

核心逻辑:Ingress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,这个 Ingress Contronler 的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。以此来达到域名分配置及动态更新。

22.Kubernetes Ingress: HTTP 7层路由机制

  • https://mywebsite.com/api的访问将被路由到后端名为"api"的 Service。
  • https://mywebsite.com/web的访问将被路由到后端名为"web"的 Service。
  • https:/mywebsite.com/doc的访问将被路由到后端名为"doc"的 Service。

下面通过一个例子分三步说明Ingress ControllerIngress 策略客户端如何访问 Ingress 提供的服务。

部署

ingress控制器有两种:nginx和haproxy 这里是以nginx为讲解。

本文使用谷歌提供的 nginx-ingress-controller 镜像创建ingress-controller,并以 Pod + Service 方式运行,其中 Service 使用 nodePort 方式将80443端口映射至物理机上。

部署过程中使用到的文档参考:https://github.com/kubernetes/ingress-nginx/tree/master/deploy

  1. 下载各所需的yaml文件

    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml >namespace.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/default-backend.yaml>default-backend.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/configmap.yaml>configmap.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/tcp-services-configmap.yaml>tcp-services-configmap.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/udp-services-configmap.yaml > udp-services-configmap.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/without-rbac.yaml>without-rbac.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/rbac.yaml>rbac.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/with-rbac.yaml > with-rbac.yaml
    curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml >service-nodeport.yaml
    
  2. 启动上述yaml文件

    kubectl create -f namespace.yaml 
    kubectl create -f configmap.yaml 
    kubectl create -f default-backend.yaml 
    kubectl create -f tcp-services-configmap.yaml 
    kubectl create -f udp-services-configmap.yaml
    kubectl create -f rbac.yaml
    kubectl create -f with-rbac.yaml
    kubectl create -f service-nodeport.yaml
    

上述yaml文件中可以不用修改,直接运行。

  • default-backend.yaml文件定义了默认的ingress服务,即客户端访问的URL地址不存在时,默认返回的页面,这个服务使用任何应用实现都可以,只需要能够返回一个404应答,并且提供/healthz路径实现健康检查,另外服务名称需要设置为default-backend-service,因为该镜像中nginx默认通过default-backend-service访问默认backend

  • rabc.yaml是kubernetes实现鉴权的方式

  • with-rbac.yaml文件中定义了一个Deployment,运行ingress-controller;需要注意的是如果修改了yaml文件中使用的镜像,部分参数可能需要更改,这个具体情况具体分析

  • service-nodeport.yaml文件定义了一个服务,并且以nodePort方式监听80以及443端口,为客户端提供访问入口。

ingress规则编写

下面是一个简单的例子:

# cat mytest.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"  ##关闭强制使用HTTPS的设置
spec:
  rules:
  ## 根据URL路径实现转发,域名为 *
  - https:
      paths:
      - path: /demo
        backend:
          serviceName: mydemo
          servicePort: 8080
      - path: /test
        backend:
          serviceName: mytest
          servicePort: 8080

根据域名实现转发:

$ cat mytest.yaml      
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: pand-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  ## 根据域名实现转发
  - host: www.mywebsite1.com
    https:
      paths:
      - backend:
          serviceName: mydemo
          servicePort: 8080
  - host: www.mywebsite2.com
    https:
      paths:
      - backend:
          serviceName: mytest
          servicePort: 8080

创建上述ingress,在客户端配置好域名解析,实现访问。

也可以通过curl指定解析访问:

curl --resolve www.mywebsite1.com:80:172.10.18.3 www.mywebsite1.com/mydemo

总结

优点:Ingress支持L7负载均衡;Ingress基于Pod部署,并将Pod网络设置成external network;Ingress controller支持Nginx、Haproxy,能够满足企业内部使用。

缺点:因为pod是临时的,由于Ingress Controller也是基于Pod部署,这样Ingress对外的IP会发生变化。在企业内部都会在防火墙上给Service的访问IP设定规则,而IP变动对这一机制是致命的,因为企业不可能经常手动修改防火墙规则。



链接:https://www.orchome.com/1452
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
author-avatar
郭爷们1986_488
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有