k8s学习--ingress详细解释与应用(nginx ingress controller))

2024-06-07 16:52

本文主要是介绍k8s学习--ingress详细解释与应用(nginx ingress controller)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • lngress简介
    • 什么是 Ingress
    • Ingress 的用途
    • Ingress 的工作原理
    • Ingress 的工作流程
    • Ingress 的应用场景
  • 应用
    • 实验环境
    • 部署nginx ingress controller
      • 1.安装metalLB
      • 2.nginx ingress controller部署
      • 3.ingress 对象应用案例(基于名称的负载均衡)
        • (1) 创建deployment控制器类型应用
        • (2) 创建service
        • (3) 创建ingress对象
        • (4) 模拟客户端访问


lngress简介

什么是 Ingress

Ingress 是 Kubernetes 中用于管理集群内服务暴露的 API 资源。它提供了 HTTP 和 HTTPS 路由功能,使外部流量能够访问集群内部的服务。通过定义 Ingress 资源,可以控制哪些外部请求能够访问集群中的哪些服务,以及如何路由这些请求。

Ingress 的用途

统一入口控制
Ingress 提供了一个统一的入口点,用于管理多个服务的访问和流量控制。

HTTP/HTTPS 路由
通过 Ingress,可以配置基于主机名和路径的路由规则,将外部请求定向到集群内部的服务。

SSL 终止
Ingress 可以配置 SSL 证书,用于加密和解密外部流量,从而确保数据传输的安全性。

负载均衡
通过 Ingress 控制器,可以实现对多实例服务的负载均衡,将请求分发到多个后端实例。

Ingress 的工作原理

Ingress 的工作原理涉及以下两个关键组件:

Ingress 资源
用户定义的 Kubernetes 资源,描述了主机名、路径和后端服务之间的映射关系。

Ingress 控制器
实现 Ingress 规则的实际组件。常见的 Ingress 控制器包括 NGINX、Traefik 和 HAProxy 等。控制器监控 Ingress 资源的变化,并相应地配置其代理服务器,以实现路由和流量管理。

Ingress 的工作流程

定义 Ingress 资源
用户创建 Ingress 资源,定义了主机名、路径和后端服务的映射。

Ingress 控制器监控
Ingress 控制器不断监控 Ingress 资源的变化。
配置代理服务器:
根据 Ingress 资源的定义,Ingress 控制器配置其代理服务器(如 NGINX)以匹配请求。

处理请求
当外部请求到达集群时,Ingress 控制器的代理服务器根据 Ingress 规则进行路由,将请求转发到相应的服务。

Ingress 的应用场景

多服务管理
适用于需要管理多个服务的环境,通过 Ingress 实现统一的入口控制。

基于域名的路由
在同一个集群中运行多个应用,通过不同的域名或子域名进行访问。

基于路径的路由
根据请求路径将流量路由到不同的服务,例如 /api 路径指向一个微服务,/web 路径指向另一个微服务。

SSL 终止
需要使用 HTTPS 加密流量的场景,通过 Ingress 配置 SSL 证书进行终止。

负载均衡
在多实例服务间进行负载均衡,以提高服务的可用性和扩展性。

应用

实验环境

虚拟机

Ip主机名cpu内存硬盘
192.168.10.11master012cpu双核4G100G
192.168.10.12worker012cpu双核4G100G
192.168.10.13worker022cpu双核4G100G
192.168.10.16vm61cpu1核1G20G

版本 centos7.9
已部署k8s-1.27
vm6 无需配置,测试使用

部署nginx ingress controller

1.安装metalLB

具体步骤详情作者上篇博客
链接: metalLB负载均衡器
这里不再过多描述

2.nginx ingress controller部署

下载并修改配置文件 需要vpn

curl -k https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml  -o deploy.yaml

修改文件

vim deploy.yaml

修改此行 type: NodePort
为 type: LoadBalancer

修改前
在这里插入图片描述
修改后
在这里插入图片描述

创建

kubectl apply -f deploy.yaml

稍等几分钟后查看 需要vpn,没有的话查看信息时会显示连接不到镜像仓库

kubectl -n ingress-nginx get pod

可以看到已经成功运行了
在这里插入图片描述

3.ingress 对象应用案例(基于名称的负载均衡)

ingress-http案例:基于名称的负载均衡

(1) 创建deployment控制器类型应用
vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: ingress-nginx
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: c1image: nginx:1.20imagePullPolicy: IfNotPresent

应用YAML

kubectl apply -f nginx.yaml

验证pod

kubectl get pods -n ingress-nginx

在这里插入图片描述

(2) 创建service
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: ingress-nginxlabels:app: nginx
spec:ports:- port: 80targetPort: 80selector:
app: nginx

应用YAML

vim nginx-service.yaml

查看service

kubectl get svc -n ingress-nginx

在这里插入图片描述
默认service类型是ClusterIP

(3) 创建ingress对象
vim ingress-nginx.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-nginx                    			#自定义ingress对象名称namespace: ingress-nginxannotations:									#注解,声明ingressclass.kubernetes.io/is-default-class: "true"		#ingress控制器由标记的class作为默认class
spec:ingressClassName: nginx							#此处标记出ingressClass为nginxrules:- host: www.test.com                   			# 自定义域名http:paths:- pathType: Prefixpath: "/"backend:service:name: nginx-service     				# 对应上面创建的service名称port:number: 80

应用YAML

kubectl apply -f ingress-nginx.yaml

验证ingress对象

kubectl get ingress -n ingress-nginx

在这里插入图片描述

描述查看ingress信息

kubectl describe ingress ingress-nginx -n ingress-nginx

在这里插入图片描述

kubectl get pods -o wide -n ingress-nginx

在这里插入图片描述

可以看到两个pod的IP正好对应ingress域名对应的IP
确认nginx-ingress-controller的podIP为192.168.10.240

(4) 模拟客户端访问

确认nginx-ingress-controller的podIP, 下面命令查询的结果为192.168.10.240

kubectl get svc -n ingress-nginx | grep ingress

在这里插入图片描述
在集群之外任一主机中添加上述域名与IP地址解析(模拟公网DNS)
这里是192.168.10.16

vim /etc/hosts
192.168.10.240 www.test.com

准备pod内容器运行的web主页
查看

kubectl get pods  -n ingress-nginx

在这里插入图片描述

进入容器添加html文件

kubectl -n ingress-nginx exec -it nginx-c9f79b6f4-9xdms -- bash
echo "ingress web1" > /usr/share/nginx/html/index.html
exit

第二个

kubectl -n ingress-nginx exec -it nginx-c9f79b6f4-jqwsx -- bash
echo "ingress web2" > /usr/share/nginx/html/index.html
exit

去集群外的主机上测试
在这里插入图片描述

完成

这篇关于k8s学习--ingress详细解释与应用(nginx ingress controller))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039748

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程