【K8s】Ingress的使用

news2024/12/28 4:55:40

文章目录

  • 一、Ingress介绍
    • 1、Ingress的作用
    • 2、Ingress工作流程
  • 二、Ingress使用
    • 1、测试数据准备
    • 2、HTTP代理
    • 3、HTTPS代理

在这里插入图片描述

一、Ingress介绍

1、Ingress的作用

上一章中,NotePort和LoadBalancer类型的Service可给集群外部机器提供访问,但这两种类型都有缺点:

  • NodePort方式会占用很多集群机器的端口,当集群服务变多的时候,这个缺点愈发明显
  • LB方式的缺点是每个service需要一个LB,浪费、麻烦,并且需要k8s之外设备的支持

由此,Ingress资源对象出现,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求。

在这里插入图片描述

Ingress相当于一个7层的负载均衡器,是kubernetes对反向代理的一个抽象,它的工作原理类似于Nginx,可以理解成在Ingress里建立诸多映射规则,Ingress Controller通过监听这些配置规则并转化成Nginx的反向代理配置 , 然后对外部提供服务。

  • ingress:定义请求如何转发到service的规则
  • ingress controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等

总结就是ingress中定义转发规则,ingress controller中解析规则,完成转发

2、Ingress工作流程

在这里插入图片描述
Ingress(以Nginx为例)的工作原理如下:

  • 用户编写Ingress规则,说明哪个域名对应kubernetes集群中的哪个Service
  • Ingress控制器动态感知Ingress服务规则的变化,然后生成一段对应- 的Nginx反向代理配置
  • Ingress控制器会将生成的Nginx配置写入到一个运行着的Nginx服务中,并动态更新
  • 到此为止,其实真正在工作的就是一个Nginx了,内部配置了用户定义的请求转发规则

二、Ingress使用

1、测试数据准备

下载ingress的yaml文件:

# 创建文件夹
[root@k8s-master01 ~] mkdir ingress-controller
[root@k8s-master01 ~] cd ingress-controller/

# 获取ingress-nginx,本次案例使用的是0.30版本
[root@k8s-master01 ingress-controller] wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
[root@k8s-master01 ingress-controller] wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

# 修改mandatory.yaml文件中的仓库
# 修改quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
# 为quay-mirror.qiniu.com/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

创建ingress-nginx的pod和Service

# 创建ingress-nginx
[root@k8s-master01 ingress-controller] kubectl apply -f ./

# 查看ingress-nginx
[root@k8s-master01 ingress-controller] kubectl get pod -n ingress-nginx
NAME                                           READY   STATUS    RESTARTS   AGE
pod/nginx-ingress-controller-fbf967dd5-4qpbp   1/1     Running   0          12h

# 查看service
# 32240端口是http下,31335是https下的
[root@k8s-master01 ingress-controller] kubectl get svc -n ingress-nginx
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.98.75.163   <none>        80:32240/TCP,443:31335/TCP   11h

创建pod和Service,结构如下:

在这里插入图片描述

使用- - -把两个deploy和service的配置写一起:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        ports:
        - containerPort: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 80  # Service端口
    targetPort: 80 # pod端口

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: dev
spec:
  selector:
    app: tomcat-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 8080 # Service端口
    targetPort: 8080
# 创建
[root@k8s-master01 ~] kubectl create -f tomcat-nginx.yaml

# 查看
[root@k8s-master01 ~] kubectl get svc -n dev
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
nginx-service    ClusterIP   None         <none>        80/TCP     48s
tomcat-service   ClusterIP   None         <none>        8080/TCP   48s

2、HTTP代理

创建ingress-http.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
spec:   
  rules:
  - host: nginx.itheima.com   # !!!
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80     # 即以后访问nginx.itheima.com/就转发到nginx-service服务的80端口
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建Ingress:

# 创建
[root@k8s-master01 ~] kubectl create -f ingress-http.yaml
ingress.extensions/ingress-http created

# 查看
[root@k8s-master01 ~] kubectl get ing ingress-http -n dev
NAME           HOSTS                                  ADDRESS   PORTS   AGE
ingress-http   nginx.itheima.com,tomcat.itheima.com             80      22s


# 查看详情
[root@k8s-master01 ~] kubectl describe ing ingress-http  -n dev
...
Rules:
Host                Path  Backends
----                ----  --------
nginx.itheima.com   / nginx-service:80 (10.244.1.96:80,10.244.1.97:80,10.244.2.112:80)
tomcat.itheima.com  / tomcat-service:8080(10.244.1.94:8080,10.244.1.95:8080,10.244.2.111:8080)
...

# 接下来,在本地电脑上配置host文件,让上面的两个域名解析到192.168.109.100(master)上
# 然后,就可以分别访问http://tomcat.itheima.com:32240  和  http://nginx.itheima.com:32240 查看效果了

3、HTTPS代理

生成证书和创建密钥:

# 生成证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=itheima.com"

# 创建密钥
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

创建ingress-https.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  tls:  # !!!
    - hosts:
      - nginx.itheima.com
      - tomcat.itheima.com
      secretName: tls-secret # 指定秘钥
  rules:
  - host: nginx.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建Ingress:

# 创建
[root@k8s-master01 ~] kubectl create -f ingress-https.yaml
ingress.extensions/ingress-https created

# 查看
[root@k8s-master01 ~] kubectl get ing ingress-https -n dev
NAME            HOSTS                                  ADDRESS         PORTS     AGE
ingress-https   nginx.itheima.com,tomcat.itheima.com   10.104.184.38   80, 443   2m42s

# 查看详情
[root@k8s-master01 ~] kubectl describe ing ingress-https -n dev
...
TLS:
  tls-secret terminates nginx.itheima.com,tomcat.itheima.com
Rules:
Host              Path Backends
----              ---- --------
nginx.itheima.com  /  nginx-service:80 (10.244.1.97:80,10.244.1.98:80,10.244.2.119:80)
tomcat.itheima.com /  tomcat-service:8080(10.244.1.99:8080,10.244.2.117:8080,10.244.2.120:8080)
...

接下来就可以使用https访问集群中的nginx和tomcat服务了:

https://nginx.itheima.com:31335
https://tomcat.itheima.com:31335

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

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

相关文章

JavaScript数组

1.数组是什么 2.数组的基本使用 3.操作数组 4.数组案例 一、数组是什么&#xff1f; 1.数组(Array)是一种可以按顺序保存数据的数据类型2.为什么要使用数组&#xff1f;例如&#xff1a;如果想保存一个班所有同学的姓名怎么办&#xff1f;场景&#xff1a;如果有多个数据可以用…

vue3中ts定义对象,pinia中使用ts定义状态对象

文章目录 引入reactive中使用数组reactive中定义对象类型pinia中定义状态对象 引入 用惯了js&#xff0c;突然使用ts属实有点不习惯&#xff0c;这里介绍一下自己在vue3中使用ts初始化内容的一些小技巧 reactive中使用数组 例如下面所示的代码&#xff0c;我们就像写js代码一…

数组a与数组b作内积:即a和b所有对应位置两元素相乘 将所有的相乘结果(积)求和 numpy.inner(a,b)

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 数组a与数组b作内积&#xff1a; 即a和b所有对应位置两元素相乘 将所有的相乘结果(积)求和 numpy.inner(a,b) [太阳]选择题 请问关于以下代码的输出结果是&#xff1f; import numpy as np …

招银网络科技-2024届暑期实习-Java后端开发

目录 1.SpringBoot 中的 SpringBootApplication注解的作用是什么&#xff1f;2.SpringBoot 中你们是如何加载配置信息的&#xff1f;3.RabbitMQ 如何保证消息不丢失&#xff1f;4.如果消费者这边消费到一半宕机了怎么办&#xff1f;5.RabbitMQ 如何保证消息没有被重复消费&…

C语言函数大全-- w 开头的函数(3)

C语言函数大全 本篇介绍C语言函数大全-- w 开头的函数 1. wcsdup 1.1 函数说明 函数声明函数功能wchar_t *wcsdup(const wchar_t *str);用于复制宽字符字符串 参数&#xff1a; str &#xff1a; 待复制的宽字符串 返回值&#xff1a; 如果成功复制&#xff0c;则返回指向该…

跨域解决方案

同源策略 同源策略是一种约定&#xff0c;它是浏览器最核心也是最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;浏览器很容易受到XSS、CSRF等攻击。 所谓的同源是指【协议域名端口】三者相同&#xff0c;即便两个不同的域名&#xff0c;指向同一个IP地址&#xf…

手把手教你下载darknet_ros

前两天下载darknet_ros&#xff0c;好怪啊&#xff0c;是我太菜了&#xff0c;根本看不懂这都啥啊&#xff0c;所以记录一下 首先附上链接 这里是github上的代码&#xff1a;https://github.com/leggedrobotics/darknet_ros 这里是gitcode上的代码&#xff1a;https://gitcode…

软件技术体系汇总-Spring篇

Spring源码学习总结 版本说明 系列文章是本人在学习 Spring 源码的过程中总结 Spring 版本&#xff1a;5.2.8.RELEASE 调试工具&#xff1a;IDEA2020.3 作者&#xff1a;虎哥 常见面试题 1. 什么是 Spring Framework &#xff1f; 官方文档&#xff1a; Spring makes it eas…

U-Mail邮件中继完美解决邮件超大附件发送难题

随着企业数字化转型的逐步深入&#xff0c;电子邮件成为了企业内部或与外部业务沟通交流的重要方式之一。但是我们在发送电子邮件的时候&#xff0c;如果邮件中包含工程设计图纸&#xff0c;视频文件、产品设计方案等超大附件&#xff0c;发送的邮件会被对方邮件服务器拒收&…

[架构之路-199] - 可靠性需求与可靠性分析:鱼骨图、故障树分析法FTA、失效模式与影响DFMEA,找到影响故障的主要因素

目录 引言&#xff1a; 第1章 故障树分析法与鱼骨图的比较 1.1 相同点 1.2 区别点 第2章 鱼骨图 第3章 故障树 3.1 示意图 3.2 故障树解读 3.3 故障树常见符号 第4章 产品失效(Failure)模式分析DFMEA 引言&#xff1a; 目标系统/产品的可靠性和性能在客户需求阶段就…

从浏览器输入域名开始分析 DNS 解析过程

摘要&#xff1a;DNS&#xff08;Domain Name System&#xff09;是域名系统的英文缩写&#xff0c;是一种组织成域层次结构的计算机和网络服务命名系统&#xff0c;用于 TCP/IP 网络。 本文分享自华为云社区《DNS 那些事 —— 从浏览器输入域名开始分析 DNS 解析过程》&#x…

基于SSM的大学生就业信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

常见指令以及权限理解(Linux)

常见指令以及权限理解 命令格式&#xff1a; command [-options] parameter1 parameter1 命令 选项 参数1 参数2 1.command为命令名称&#xff0c;例如变化目录的cd等 2.中括号[ ]实际在命令中是不存在的&#xff0c;这个中括号代表可选&#xff0c;通常选项前面会添加一个符号…

【数据科学赛】HackAPrompt 挑战语言模型!

CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 更多比赛信息见 CompHub主页[1] 以下信息由AI辅助创作&#xff0c;仅供参考&#xff0c;请以官网为准&#xff08;文末…

激活函数Relu对精度和损失的影响研究

1 问题 在学习深度学习的过程中&#xff0c;欲探究激活函数Relu对精度和损失的影响。 2 方法 测试设置激活函数时和没有设置激活函数时网络的性能。 控制其余变量&#xff1a; Beach_size128optimizer torch.optim.SGD网络为三层全连接网络&#xff08;784->512->10&…

systemctl针对service类型的配置文件

文章目录 systemctl针对service类型的配置文件systemctl配置文件相关目录简介systemctl配置文件的设置项目简介两个vsftpd运行的实例多重的重复设置方式&#xff1a;以getty为例将tty数量由6个降低为4个暂时新增vsftpd到1212端口 自己做个服务 systemctl针对service类型的配置文…

事件循环Event Loop

什么是事件循环&#xff08;event loop&#xff09; 主线程不断的从消息队列中获取消息&#xff0c;执行消息&#xff0c;这个过程被称为事件循环&#xff0c;在javaScript中就是采用事件循环来解决单线程带来的问题 线程和进程 进程&#xff1a;计算机已经运行的程序&#…

睿智的目标检测66——Pytorch搭建YoloV8目标检测平台

睿智的目标检测66——Pytorch搭建YoloV8目标检测平台 学习前言源码下载YoloV8改进的部分&#xff08;不完全&#xff09;YoloV8实现思路一、整体结构解析二、网络结构解析1、主干网络Backbone介绍2、构建FPN特征金字塔进行加强特征提取3、利用Yolo Head获得预测结果 三、预测结…

GOOGLE|只有大模型才能理解你举的例子(In-context learning)是什么

一、概述 title&#xff1a;LARGER LANGUAGE MODELS DO IN-CONTEXT LEARNING DIFFERENTLY 论文地址&#xff1a;https://arxiv.org/abs/2303.03846 参考&#xff1a;https://www.xiaohongshu.com/user/profile/5f01057f0000000001003c91/640aa237000000001303d871 1.1 Moti…

Java高阶数据结构 图补充-拓扑排序

拓扑排序 文章目录 Java高阶数据结构 & 图补充-拓扑排序1. 什么是拓扑排序2. 拓扑排序算法思想-卡恩算法3. 拓扑排序代码实现3.1 遍历链表计算入度3.2 挑选一个入度为0的顶点3.3 输出顶点3.4 判断循环结束是否为全-13.4 *kahn*方法3.5 测试 Java高阶数据结构 & 图补充…