kubernetes七层负载Ingress搭建(K8S1.23.5)

news2025/1/24 1:31:53

首先附上K8S版本及Ingress版本对照

Ingress介绍

NotePort:该方式的缺点是会占用很多集群机器的端口,当集群服务变多时,这个缺点就愈发的明显(srevice变多,需要的端口就需要多)

LoadBalancer:该方式的缺点是每个service都需要一个外部负载均衡设备的支持才可以

基于这种现状,k8s提供了ingress资源对象。

ingress只需要一个NodePort/一个负载均衡设备就可以满足暴露多个service的需求

实际上Ingress相当于一个7层的负载均衡器(在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等),是k8s对反向代理的一个抽象,它的工作原理类似于Nginx,可以理解成Ingress里建立诸多映射规则Ingress Colltroller通过监听这些配置规则转化成Nginx的反向代理配置,然后对外部提供服务,在这里有两个核心理念:

  • - Ingress:k8s中的一个对象,作用是定义请求如何转发到service的规则定义转发规则
  • - Ingress controller:具体实现反向代理负载均衡的程序,对Ingress定义的规则进行解析

根据配置的规则来实现请求转发,实现方式有很多,比如Nginx,Contour,Haproxy等等

Ingress的工作原理

ingress-controller通过和 kubernetes APIServer 交互,动态的去感知集群中ingress规则变化;

然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置;

再写到nginx-ingress-controller的pod里,这个ingress-controller的pod里运行着一个Nginx服务,控制器会把生成的 nginx配置写入 /etc/nginx.conf文件中;

然后reload一下使配置生效。以此达到域名区分配置和动态更新的作用。

kubernetes + ingress-nginx部署

我这里的K8S版本为1.23.5对应的安装ingress-nginx-1.6.4;

下载对应部署文件deploy.yaml(这一步需要魔法,没有的可以从下链接提取)

同时为了方便后续http和https的分辨,固定端口为31080和31443

未修改版本

https://pan.baidu.com/s/1FJ3ai_5YQYypKi72HhpGqg?pwd=weiy 
提取码:weiy

已修改版本

https://pan.baidu.com/s/1CF5UJ8aQy-IDvpv9r2RYuQ?pwd=weiy 
提取码:weiy

注意80对应的是HTTP端口,443对应的是HTTPS端口

部署文件上传后,需要注意切换为国内镜像地址(修改成国内可以下载的相同镜像)

 

 一共需要修改三处镜像

具体修改如下:

 image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343@sha256:39c5b2e3310dc4264d638ad28d9d1d96c4cbb2b2dcfb52368fe4e3c63f61e10f

 将其改为:

dyrnq/kube-webhook-certgen:v20220916-gd32f8c343

  image: registry.k8s.io/ingress-nginx/controller:v1.6.4@sha256:15be4666c53052484dd2992efacf2f50ea77a78ae8aa21ccd91af6baaa7ea22f

将其修改为:

registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.6.4

部署Ingress

[root@master ~]# mkdir /ingress-controller
[root@master ~]# cd /ingress-controller
[root@master ~]# ls

[root@master ingress-controller]# kubectl apply -f ./

正常为created,我先前已经apply 

1、查看ns(会有一个ingress-nginx的名称空间产生)

2、查看ingress-nginx名称空间的pod 

[root@master ingress-controller]#  kubectl get po -n  ingress-nginx

3、查看service

[root@master ingress-controller]# kubectl get svc -n ingress-nginx

4、部署tomcat与nginx的pod,通过tomcat-nginx.yml文件创建

[root@k8s-master ~]# cat>tomcat-nginx.yml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.18
        ports:
        - containerPort: 80
      nodeName: node2
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        ports:
        - containerPort: 8080
      nodeName: node2
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: dev
spec:
  ports:
    - port: 80
      name: nginx
  clusterIP: None
  selector:
    app: nginx-pod
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: dev
spec:
  selector:
    app: tomcat-pod
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
EOF

这里我固定了调度的node,为node2

5、创建svc与pod

[root@master ~]# kubectl create -f tomcat-nginx.yml

6、查看svc信息

[root@master ~]# kubectl get svc -n dev

7、查看pod信息

[root@master ~]# kubectl get po -n dev

Ingress-HTTP代理

通过ingress代理http服务,创建ingress-http.yml 

[root@master ~]# vim ingress-http.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
spec:
  ingressClassName: nginx
  rules:
  - host: www.nginx.com
    http:             #访问的方式是以http的形式
      paths:
      - backend:
          service:
            name: nginx-service  #用户在访问域名的时候,会反向代理给service,也就是后面的pod(service是通过标签去代理的)
            port: 
              number: 80
        path: /
        pathType: ImplementationSpecific
  - host: www.tomcat.com
    http:
      paths:
      - backend:
          service:
            name: tomcat-service
            port: 
              number: 80
        path: /
        pathType: ImplementationSpecific

1、创建ingress

[root@master ~]# kubectl create -f ingress-http.yml

2、查看ingress信息

[root@master ~]# kubectl get ing ingress-http -n dev

3、查看详细描述

[root@master ~]# kubectl describe ing ingress-http -n dev

测试HTTP代理

浏览器访问由于域名无法正常解析,需要在windows内进行解析

C:\Windows\System32\drivers\etc

添加解析:

Ingress-HTTPS代理

1、生成证书

[root@master ~]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=TJ/O=nginx/CN=thinkmo.com"
-req是证书请求的子命令
-newkey rsa:2048 -keyout tls.key  -newkey是与-key互斥的
-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,
-nodes 表示私钥不加密
-out 指定生成的证书请求或者自签名证书名称
-days 365  证书有效期
若执行自动输入,可使用-subj选项:
 -subj——证书相关的用户信息(subject的缩写)

2、创建密钥

[root@master ~]# kubectl create secret tls tls-secret --key tls.key --cert tls.crt

创建ingress-https-test.yml

[root@master ~]# vim ingress-https-test.yml

 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  tls:
  - hosts:
    - www.nginx.com
    - www.tomcat.com
    secretName: tls-secret
  rules:
  - host: www.nginx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
  - host: www.tomcat.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat-service
            port:
              number: 8080

3、创建ingress

[root@master ~]# kubectl create -f ingress-https-test.yml

ingress.extensions/ingress-https created

[root@master ~]#  kubectl get ing ingress-https -n dev

4、查看详细信息

 5、访问测试

https://www.nginx.com:31443/

https://www.tomcat.com:31443/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1279461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能学习5(特征抽取)

编译环境&#xff1a;PyCharm 文章目录 编译环境&#xff1a;PyCharm 特征抽取无监督特征抽取(之PCA)代码实现鸢尾花数据集无监督特征抽取 有监督特征抽取(之LDA)代码实现,生成自己的数据集并进行有监督特征抽取(LDA)生成自己的数据集PCA降维和LDA降维对比 代码实现LDA降维对鸢…

mysql服务日志打印,时区不对的问题

查资料发现 原来日志的时区和服务器的时区不是一个参数控制的 log_timestamps 单独控制日志的时区 show global variables like log_timestamps;看到默认的是UTC&#xff0c;只需要修改为和系统一致就行 #数据库中直接修改 set global log_timestampsSYSTEM;#配置文件my.cn…

NacosSync 用户手册

手册目标 理解 NacosSync 组件启动 NacosSync 服务通过一个简单的例子&#xff0c;演示如何将注册到 Zookeeper 的 Dubbo 客户端迁移到 Nacos。 介绍 NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范…

面试题:MySQL为什么选择B+树作为索引结构

文章目录 前言二、平衡二叉树(AVL)&#xff1a;旋转耗时三、红黑树&#xff1a;树太高四、B树&#xff1a;为磁盘而生五、B树六、感受B树的威力七、总结 前言 在MySQL中&#xff0c;无论是Innodb还是MyIsam&#xff0c;都使用了B树作索引结构(这里不考虑hash等其他索引)。本文…

视频生成的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0

前言 考虑到文生视频开始爆发&#xff0c;比如11月份就是文生视频最火爆的一个月 11月3日&#xff0c;Runway的Gen-2发布里程碑式更新&#xff0c;支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商&#xff0c;Stability AI则开发的SD后续版本)11月16日&a…

wordpress安装之Linux解压缩安装

本次教程是为了让大家少走弯路&#xff0c;可以更直观的去认识我们不懂的知识面。 首先我们安装解压缩的软件 命令如下&#xff1a; yum install -y unzip 上一篇我们讲到传输文件了 这篇我们把传输过来的压缩包解压并进行安装。follow me&#xff01; 我们输入命令 unzi…

Spring Cloud NetFlix

文章目录 Spring Cloud1 介绍2 Eureka&#xff08;服务注册与发现&#xff09;2.1 介绍2.2 服务注册与发现示例2.2.1 Eureka Server&#xff1a;springcloud-eureka2.2.2 Eureka Client&#xff1a;springcloud-provider2.2.3 Eureka Client&#xff1a;springcloud-consumer 2…

前端可滚动分类商品List列表 可用于电商分类列表

前端可滚动分类商品List列表 可用于电商分类列表 引言 在电商应用中&#xff0c;一个高效、用户友好的分类列表是提高用户体验和转化率的关键。本文将探讨如何使用xg-list-item、uni-grid和xg-tab等组件创建一个可滚动的分类商品列表&#xff0c;并处理相关的用户交互事件&…

Python容器——字典

Key——Value 键值对

canvas 轮廓路径提取效果

前言 微信公众号&#xff1a;前端不只是切图 轮廓 对内容做border效果&#xff0c;可以先看下代码运行的效果 内容是黑线构成的五角星&#xff0c;其轮廓就是红线的部分&#xff0c;本文主要介绍如何在canvas中实现这种效果 Marching Square 这里运用到的是marching square算法…

探索 Web API:SpeechSynthesis 与文本语言转换技术

一、引言 随着科技的不断发展&#xff0c;人机交互的方式也在不断演变。语音识别和合成技术在人工智能领域中具有重要地位&#xff0c;它们为残障人士和日常生活中的各种场景提供了便利。Web API 是 Web 应用程序接口的一种&#xff0c;允许开发者构建与浏览器和操作系统集成的…

Kubernetes(K8s)_16_CSI

Kubernetes&#xff08;K8s&#xff09;_16_CSI CSICSI实现CSI接口CSI插件 CSI CSI(Container Storage Interface): 实现容器存储的规范 本质: Dynamic Provisioning、Attach/Detach、Mount/Unmount等功能的抽象CSI功能通过3个gRPC暴露服务: IdentityServer、ControllerServe…

微信小程序组件与插件有啥区别?怎么用?

目录 一、微信小程序介绍 二、微信小程序组件 三、微信小程序插件 四、微信小程序组件与插件有啥区别 一、微信小程序介绍 微信小程序是一种基于微信平台的应用程序&#xff0c;它可以在微信客户端内直接运行&#xff0c;无需下载和安装。微信小程序具有轻量、便捷、跨平台…

RT-Thread ADC_DMA

看到这里&#xff0c;相信大家已经尝试过网上各类ADC_DMA传输的文章&#xff0c;且大多都并不能实现&#xff0c;因为在RT-Thread中并没有找到关于ADC的DMA接口&#xff0c;在官方例程中有关DMA的传输也只有一个串口接收的介绍&#xff0c;找遍全网怕也没能找到真正有用的消息。…

PyLMKit(5):基于网页知识库的检索增强生成RAG

基于网页知识库的检索增强生成RAG 0.项目信息 日期&#xff1a; 2023-12-2作者&#xff1a;小知课题: RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;是一种利用知识库检索的方法&#xff0c;提供与用户查询相关的内容&#xff0c;从而…

1 NLP分类之:FastText

0 数据 https://download.csdn.net/download/qq_28611929/88580520?spm1001.2014.3001.5503 数据集合&#xff1a;0 NLP: 数据获取与EDA-CSDN博客 词嵌入向量文件&#xff1a; embedding_SougouNews.npz 词典文件&#xff1a;vocab.pkl 1 模型 基于fastText做词向量嵌入…

二、ZooKeeper集群搭建

目录 1、概述 2、安装 2.1 第一步&#xff1a;下载zookeeeper压缩包 2.2 第二步&#xff1a;解压 2.3 第三步&#xff1a;修改配置文件 2.4 第四步&#xff1a;添加myid配置 ​​​​​​​2.5 第五步&#xff1a;安装包分发并修改myid的值 ​​​​​​​2.6 第六步&a…

Ubuntu22.04无需命令行安装中文输入法

概要&#xff1a;Ubuntu22.04安装完成后&#xff0c;只需在设置中点点点即可完成中文输入法的安装&#xff0c;无需命令行。 一、安装中文语言包 1、点击屏幕右上角&#xff0c;如下图所示。 2、点击设置 3、选择地区与语言&#xff0c;点击管理已安装的语言 4、点击安装 5、输…

SSM SpringBoot vue社团事务管理系统

SSM SpringBoot vue社团事务管理系统 系统功能 登录 个人中心 人员信息管理 考勤信息管理 空闲时间管理 现金日记账管理 经费预算管理 物品租借管理 会议信息管理 活动信息管理 项目任务管理 公告通知管理 物资信息管理 开发环境和技术 开发语言&#xff1a;Java 使用框架:…

人工智能时代:AIGC的横空出世

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…