首页 > 系统相关 >k8s学习--ingress详细解释与应用(nginx ingress controller))

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

时间:2024-06-07 14:33:37浏览次数:17  
标签:kubectl ingress service yaml -- Ingress nginx

文章目录


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: nginx
  namespace: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: c1
        image: nginx:1.20
        imagePullPolicy: 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-service
  namespace: ingress-nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
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-nginx
  annotations:									#注解,声明
    ingressclass.kubernetes.io/is-default-class: "true"		#ingress控制器由标记的class作为默认class
spec:
  ingressClassName: nginx							#此处标记出ingressClass为nginx
  rules:
  - host: www.test.com                   			# 自定义域名
    http:
      paths:
      - pathType: Prefix
        path: "/"
        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

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

完成

标签:kubectl,ingress,service,yaml,--,Ingress,nginx
From: https://blog.csdn.net/lwxvgdv/article/details/139505471

相关文章

  • C语言基础——函数
             ʕ•ᴥ•ʔ       づ♡ど ......
  • AI预测平台处理思路
    AI预测平台处理思路配置:1.创建模型2.配置方案(设置训练周期与粒度)3.配置算法(设置算法)4.配置有效特征数据(影响因素)数据:1.历史数据2.特征数据(影响因素)数据取数:1.sql获取、灵活配置出参入参2.excel导入数据预测思路:根据历史数据,结合特征数据(影响因素),使用设置的算法......
  • [中文参数] AGFA027R31C2I3V、AGFA027R31C2I3E、AGFA027R31C2E3E、AGFA027R31C2E4X面
    Agilex™FPGA产品组合包含一系列产品,可充分满足每一个技术领域(从边缘到嵌入式系统,再到通信和数据中心)的众多可编辑逻辑需求。在所有这些领域中,数据爆炸导致新产品需求激增,以便移动、处理和存储数据并从中获得可执行的深度分析。这些产品的开发人员需要硬件灵活性来应对不断变化......
  • 【YOLOv8改进】YOLOv8 更换损失函数之 SIoU EIoU WIoU _ Focal_*IoU CIoU DIoU ShapeI
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例GIoU文章链接论文地址:论文地址代码地址:代码地址基本原理广义Io......
  • 【YOLOv8改进】SlideLoss损失函数,解决样本不平衡问题
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例介绍摘要近年来,基于深度学习的人脸检测算法取得了很大进展。这些......
  • hi.公平正义
    「PMOI-3」公平正义题目背景公平正义,需要牺牲。——《唐人街探案3》题目描述现在有nnn个人,lhm有一个质量为1......
  • vue3多个表单一起校验
    当定义了多个表单但是保存时需要同时校验的时候可以这样做<template><el-form:model="userForm1"label-width="auto"ref="userFormRef1"></el-form><el-form:model="userForm2"label-width="auto......
  • 【Webpack4打包机制原理解析】
    webpack是一个打包模块化JavaScript的工具,在webpack里一切文件皆模块,通过Loader转换文件,通过Plugin注入钩子,最后输出由多个模块组合成的文件。webpack专注于构建模块化项目。#简单版打包模型步骤我们先从简单的入手看,当webpack的配置只有一个出口时,不考虑分......
  • AI 绘画零基础如何学习?AIGC绘画设计入门教学
    AI作画入门到是不难,有手就行。我们先从最简单的开始。完成这件事,只有一个步骤:找到一个能画画的AI工具,输入动机。这个工具叫做DiscoDiffusion。它只认识英文,不过这不是问题,你找个翻译软件把中文翻译成英文就行。如果你会科学上网,那么你打开这个网址,点击里面的"openincola......
  • 测试开发之cli命令
        cli有广义也有狭义,对于hba卡和raid卡来说,就是用户在服务器上敲,获取卡上信息、设置相关属性的命令。    而uname-r这种都属于linux命令,与卡无关。    每个卡要搭配自己的cli,是产品代码的一部分。也就是说用户用不同公司的卡,想获取信息敲的命令可......