首页 > 其他分享 >20221220 8. Ingress

20221220 8. Ingress

时间:2022-12-22 14:56:37浏览次数:64  
标签:ingress service tomcat Ingress 20221220 nginx controller

简介

Ingress 概念 | Kubernetes

Ingress API | Kubernetes

K8s集群对外暴露服务的方式目前只有三种:loadblancer、nodeport、ingress

ingress由两部分组成:ingress controller和ingress服务。

其中ingress controller目前主要有两种:基于nginx服务的ingress controller和基于traefifik的ingress controller。

而其中traefifik的ingress controller,目前支持http和https协议。由于对nginx比较熟悉,而且需要使用TCP负载,所以在此我们选择的是基于nginx服务的ingress controller。

在kubernetes集群中,我们知道service和pod的ip仅在集群内部访问。如果外部应用要访问集群内的服务,集群外部的请求需要通过负载均衡转发到service在Node上暴露的NodePort上,然后再由kube-proxy组件将其转发给相关的pod。

而Ingress就是为进入集群的请求提供路由规则的集合,通俗点就是提供外部访问集群的入口,将外部的HTTP或者HTTPS请求转发到集群内部service上。

Ingress-Nginx

Ingress-Nginx组成

Ingress-nginx一般由三个组件组成:

  • 反向代理负载均衡器:通常以service的port方式运行,接收并按照ingress定义的规则进行转发,常用的有nginx,Haproxy,Traefifik等,本次实验中使用的就是nginx

  • Ingress Controller:监听APIServer,根据用户编写的ingress规则(编写ingress的yaml文件),动态地去更改nginx服务的配置文件,并且reload重载使其生效,此过程是自动化的(通过lua脚本来实现)

  • Ingress:将nginx的配置抽象成一个Ingress对象,当用户每添加一个新的服务,只需要编写一个新的ingress的yaml文件即可

Ingress-Nginx的工作原理

  1. ingress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化。然后读取它,按照自定义的规则,规则就是写明了那个域名对应哪个service,生成一段nginx配置。

  2. 再写到nginx-ingress-controller的pod里,这个Ingress controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入 /etc/nginx.conf 文件中。然后reload一下使配置生效,以此达到分配和动态更新问题。

ingress与ingress-controller

  • ingress对象:指的是k8s中的一个api对象,一般用yaml配置。作用是定义请求如何转发到service的规则,可以理解为配置模板。

  • ingress-controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发。

简单来说,ingress-controller才是负责具体转发的组件,通过各种方式将它暴露在集群入口,外部对集群的请求流量会先到ingress-controller,而ingress对象是用来告诉ingress-controller该如何转发请求,比如哪些域名哪些path要转发到哪些服务等等。

ingress-controller

ingress-controller并不是k8s自带的组件,实际上ingress-controller只是一个统称,用户可以选择不同的ingress-controller实现,目前,由k8s维护的ingress-controller只有google云的GCE与ingress-nginx两个,其他还有很多第三方维护的ingress-controller,具体可以参考官方文档。

但是不管哪一种ingress-controller,实现的机制都大同小异,只是在具体配置上有差异。一般来说,ingress-controller的形式都是一个pod,里面跑着daemon程序和反向代理程序。daemon负责不断监控集群的变化,根据ingress对象生成配置并应用新配置到反向代理,比如nginx-ingress就是动态生成nginx配置,动态更新upstream,并在需要的时候reload程序应用新配置。

nginx-controller原理

# 查看ingress-nginx 命名空间下的pod
kubectl get pods -n ingress-nginx

# 进入ingress-nginx 的pod
kubectl exec nginx-ingress-controller-6779f7d56-26hp6 -n ingress-nginx -- cat /etc/nginx.conf

ingress

ingress是一个API对象,和其他对象一样,通过yaml文件来配置。ingress通过http或https暴露集群内

部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于host的方向代理。ingress要依

靠ingress-controller来具体实现以上功能。

Ingress-Nginx官网地址

基于nginx服务的ingress controller根据不同的开发公司,又分为k8s社区的ingres-nginx和nginx公司的nginx-ingress。

Ingress-Nginx

下载资源文件

根据github上的活跃度和关注人数,我们选择的是k8s社区的ingres-nginx

下载ingrees-controller

打开github官网:选择某一个具体版本后进入 deploy/static/ 目录中,复制mandatory.yaml文件内容。

https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static/mandatory.yaml

下载ingress服务

https://github.com/kubernetes/ingress-nginx/blob/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

ingress 示例

运行ingress-controller

在mandatory.yaml文件的Deployment资源中增加属性

sepc.template.sepc.hostNetWork: true

hostNetwork网络,这是一种直接定义Pod网络的方式。如果在Pod中使用hostNetwork:true配置网络,那么Pod中运行的应用程序可以直接使用node节点的端口

# 运行ingress/mandatory.yaml文件
kubectl apply -f mandatory.yaml

运行ingress服务

# 运行ingress/service-nodeport.yaml文件
kubectl apply -f service-nodeport.yaml

部署tomcat服务

ingress/tomcat-service.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat-deployment
spec:
  replicas: 1
  template:
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat-deployment
    spec:
      containers:
        - name: tomcat-deployment
          image: tomcat:9.0.20-jre8-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
      restartPolicy: Always
  selector:
    matchLabels:
      app: tomcat-deployment
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
spec:
  selector:
    app: tomcat-deployment
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30088
  type: NodePort
# 运行tomcat-service
kubectl apply -f tomcat-service.yml -n 

部署ingress规则文件

ingress/ingress-tomcat.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress-test
spec:
  rules:
    - host: ingress-tomcat.lagou.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: tomcat-svc
                port:
                  number: 8080
# 运行ingress规则
kubectl apply -f ingress-tomcat.yml
# 查看ingress
kubectl get ingress

# 查看ingress服务:查看service的部署端口号
kubectl get svc -n ingress-nginx

# 查看ingress-controller运行在那个node节点
kubectl get pod -n ingress-nginx -o wide

通过ingress访问tomcat

http://192.168.198.158:30088

修改hosts文件后

159.75.19.155       ingress-tomcat.lagou.com

http://ingress-tomcat.lagou.com:30088

标签:ingress,service,tomcat,Ingress,20221220,nginx,controller
From: https://www.cnblogs.com/huangwenjie/p/16998705.html

相关文章

  • Kubernetes中Ingress-nginx如何获取真实客户端IP?防止X-Forwarded-For伪造
    描述:最近将部分业务通过Ingress进行发布管理,从而实现应用灰蓝发布、金丝雀发布,更贴近当下自动化运维技术的发展,并为了进行实现七层自定义负载转发,将不同应用程序配置......
  • 【云原生】K8s Ingress rewrite与TCP四层转发讲解与实战操作
    目录一、背景二、K8sIngress安装三、K8sIngressrewrite讲解与使用1)配置说明2)示例演示1、部署应用2、配置ingressrewrite转发(http)3、配置ingressrewrite转发(https)【1......
  • k8s 1.19.11 Ingress-nginx 的部署
    官网地址:https://kubernetes.github.io/ingress-nginx/github:https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx参考文档:使用ingress......
  • ingress 服务器片段
    配置server内的配置nginx.ingress.kubernetes.io/server-snippet:location^~/index/common/getQandAListi{rewrite^(.*)$https://www.baidu.com.com$1permanent......
  • Ingress的Http与Https代理
    环境准备准备service和pod为了后面的实验比较方便,创建如下图所示的模型创建tomcat-nginx.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deplo......
  • docker swarm 外部负载均衡(Haproxy+keepalived) +ingress
     外部负载均衡(Haproxy+keepalived)+ingress1.说明该实验是在上一个实验的基础之上做的,在上一个实验的基础之上,增加了haproxy+keepalivedhaproxy可以用来做负载均衡用的......
  • 原生Ingress灰度发布能力不够?我们是这么干的
    灰度发布是一种常见的服务滚动升级或A/B测试策略。在新版本服务正式发布前,可以部署少量的新版本服务和上个版本共存,用部分生产流量测试新版本的功能和特性。如果新版本反......
  • 构建基于 Ingress 的全链路灰度能力
    作者:涂鸦背景随着云原生技术不断普及,越来越多的业务应用开始向云原生架构转变,借助容器管理平台Kubernetes的不可变基础设施、弹性扩缩容和高扩展性,助力业务迅速完成数......
  • 构建基于 Ingress 的全链路灰度能力
    作者:涂鸦背景随着云原生技术不断普及,越来越多的业务应用开始向云原生架构转变,借助容器管理平台Kubernetes的不可变基础设施、弹性扩缩容和高扩展性,助力业务迅速完成数字化......
  • nginx-ingress实现二级目录
    需求说明内网后端地址:http://10.10.246.29:9000如图:外网域名:https://devhtk.ntmaorong.com/要求:https://devhtk.ntmaorong.com/minio/--->访问http://10.10.246.2......