k8s ingress-controller处理流程及原理

一、这都是什么

ingress:路由转发规则集合,k8s的默认资源
service:提供服务对外暴露功能,模式有4种:ClusterIP(这个是集群内部访问),(nodeport,loadbalance,externalNAME)这三个可以对外提供服务
ingress-controller:实际规则转发工作者, ingress-controller并不是k8s的默认资源

二、他们的工作原理

1. ingress-contronler通过与k8s的api进行交互,动态的去感知k8s集群中ingress服务规则的变化,然后读取它,并按照定义的ingress规则,转发到k8s集群中对应的service。
2. 而这个ingress规则写明了哪个域名对应k8s集群中的哪个service,然后再根据ingress-controller中的nginx配置模板,生成一段对应的nginx配置。
3. 然后再把该配置动态的写到ingress-controller的pod里,该ingress-controller的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入到nginx的配置文件中,然后reload一下,使其配置生效。以此来达到域名分配置及动态更新的效果。
4. 通过ingress-controller访问后端的请求是不走kube-proxy的代理的,也就是下图中的①③不走kube-proxy,②④还是走kube-proxy
5. ingress-controller有很多种:Kubernetes-Ingress-Controller、NGINX Ingress Controller、Kong Ingress、Traefik、HAProxy Ingress等10多种,用那种需要结合自身实际需求去选择,无特殊场景一般用k8s-ingress-controller

三、访问流程图

在这里插入图片描述
流程分解:
<>里面代表资源类型,无此符号的部分是这个资源的名字
图中实线部分是实际访问流程,虚线部分是路由规则的维护
①企业级应用场景最常用的方式就是用外层4层或7层负载来保证后端服务的可用性,如图是负载nginx这个ingress-controller的svc
②nginx-controller有自己的service,用的是nodeport模式对外暴露端口,关联后端ingress-controller
③ingress-controller拿到请求后转发给后端的service
④service通过标签选择器,找到后面对应的pod
*⑤ingress里面test.k8s.com这个域名的路由规则
*⑥ingress的规则会通过k8s-apiserver对外提供查询
*⑦ingress-controller查询k8s-apiserver拿到ingress路由规则,并更新在自己的配置文件里面

四、配置实战

1.ingress-controller安装通过kuboard集成插件完成,这里不再赘述,网上文章也很多,可以参考
kuboard安装ingress-controller参考链接:https://kuboard.cn/learning/k8sintermediate/service/ingress.html#实战-使用-ingress-访问-web-应用
2.创建ingress+svc+deployment,并关联ingress-controller

[root@k8s-master ingress]# vim app-nginx.yaml    ##应用的yaml文件
apiVersion: apps/v1
kind: Deployment           ##资源类型deployment
metadata:
name: nginx-app            ##pod名称
namespace: test            ##名称空间
spec:
  replicas: 2              ##副本数
  selector:                
    matchLabels:           ##标签选择器
      app: nginx
  template:                ##以下是pod模板
    metadata:
      labels:
        app: nginx         ##给pod作标签
    spec:
      containers:
      - name: nginx        ##容器名称
        image: nginx:v1.20.0    ##镜像版本
        ports:
        - containerPort: 8090    ##容器端口
[root@k8s-master ingress]# vim service-nginx.yaml        ##svc的yaml文件,主要是对外暴露应用端口
apiVersion: v1 
kind: Service
metadata:
  name: nginx-app-svc        ##svc名称
  namespace: test            ##名称空间
spec:
  type: ClusterIP            ##用clusterIP模式
  ports:
  - protocol: TCP
    port: 80               ##svc暴露的端口
    targetPort: 8090           ##关联容器端口
  selector:
    app: nginx               ##标签选择器,这里选择app:nginx的pod
[root@k8s-master ingress]# vim ingress-app.yaml        ##ingress配置文件
apiVersion: extensions/v1beta1        ##k8s拓展接口及版本
kind: Ingress                         ##ingress资源类型
metadata:
  name: nginx-app-ingress             ##ingress名称
  namespace: test                     ##名称空间
  annotations:
spec:
  ingressClassName: nginx             ##这是最关键的一个配置,这个配置就是用来关联ingress-controller,这个值是ingress-controller的名称
  rules:                              ##ingress的路由规则从这开始
  - host: test.k8s.com                ##这里配置域名
    http:                             ##协议类型
      paths:                          ##位置信息
      - path: /                       ##域名的根目录
        backend:                      ##关联后端信息
          serviceName: nginx-app-svc  ##关联的svc的名字
          servicePort: 80             ##关联的svc的端口
[root@k8s-master ingress]# kubectl apply -f app-nginx.yaml
[root@k8s-master ingress]# kubectl apply -f service-nginx.yaml
[root@k8s-master ingress]# kubectl apply -f ingress-app.yaml

3.查看ingress-controller的配置是否更新
在这里插入图片描述

4.访问测试,先拿到ingress-controller的service暴露在服务器的端口,这里能看到:http是30215,https是32740

[root@k8s-master ingress]# kubectl get svc -n ingress-nginx
NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller-admission-nginx   ClusterIP   10.111.48.12     <none>        443/TCP                      24h
ingress-nginx-controller-nginx             NodePort    10.107.204.218   <none>        80:30215/TCP,443:32740/TCP   24h

5.修改本机host,通过浏览器访问测试

192.168.XXX.XXX  test.k8s.com

在这里插入图片描述
如有误,请各位大佬指正

原创不易,求赞

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要部署 k8s 中的 ingress-controller v1.1.0,可以按照以下步骤进行操作: 1. 首先,确保 Kubernetes 集群已经可用并且已经正确设置。 2. 下载 ingress-controller v1.1.0 的安装文件。可以通过访问官方仓库或者 GitHub 并找到相关的发布版本进行下载。 3. 解压并配置 ingress-controller。通常可以通过编辑 YAML 文件来配置 ingress-controller,在其中指定一些关键参数,如使用的 ingress 类型、负载均衡器类型等。 4. 部署 ingress-controller。通过使用 kubectl 命令行工具,执行 `kubectl apply -f <配置文件>` 来完成 ingress-controller 的部署。 5. 确认 ingress-controller 已经成功部署。可以使用 `kubectl get pods -n <命名空间>` 命令来确认 ingress-controller 的运行状态。 6. 配置 ingress 规则。根据实际需求,编辑定义 ingress 规则的 YAML 文件并部署到 Kubernetes 中。 7. 确认 ingress 规则已经生效。可以通过 `kubectl get ingress -n <命名空间>` 命令来查看已部署的 ingress 规则,并确认其状态为 "RUNNING"。 8. 测试 ingress-controller。通过访问 ingress 规则中指定的域名或路径来确认 ingress-controller 是否成功地将请求转发到相应的服务。 这些步骤可以帮助您在 Kubernetes 中部署 ingress-controller v1.1.0,并通过 ingress 规则进行请求转发。在部署过程中,记得根据实际需求进行必要的配置和调整,以确保 ingress-controller 能够正常工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值