当前位置: 首页 > news >正文

【kubernetes】Ingress和Ingress-Controller介绍,高可用应用案例

一,Ingress介绍

Ingress是k8s中一种重要的资源对象,它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。

kubectl explain ingress

二,Ingress-Controller介绍

Ingress Controller 是 Kubernetes 集群中的一个组件,是一个七层的负载均衡调度器,它负责实现 Ingress 资源对象中定义的路由规则。

Ingress Controller 的具体实现可以多种多样,包括但不限于 Nginx、HAProxy、Traefik、Istio 等。每种 Ingress Controller 都有其独特的特性和优势,但它们的共同目标都是根据 Ingress 资源中的定义来管理外部到集群内部服务的 HTTP(S) 流量。

三,Ingress和Ingress Controller

1,共同作用

Ingress Controller结合Ingress 定义的规则生成配置,然后动态更新ingress-controller里的Nginx 或者trafik负载均衡器,并刷新使配置生效,来达到服务自动发现的作用。
Ingress 则是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义,可以给一个或多个 Service 定义一个或多个 Ingress 规则。

2,使用Ingress Controller代理步骤

(1)部署Ingress controller(以nginx为例部署)。
(2)创建Pod应用,可以通过控制器(DeploymentStatefulset等)创建pod。
(3)创建Service,用selector来分组pod。
(4)创建Ingress http/https,测试通过 http/https 访问应用。

四,高可用

根据Deployment+ nodeSeletor+pod反亲和性方式部署在k8s指定的两个work节点,然后通过keepalive+nginx实现nginx-ingress-controller高可用(框架如下图所示)。
在这里插入图片描述

1,安装ingress-controller

下载镜像及yaml文件安装:ingress-nginx-controller.v1.1.1.tar.gz

# 安装
kubectl apply -f ingress-deploy.yaml

在这里插入图片描述


【如果报错】:
在这里插入图片描述
【解决办法】

执行一下命令,然后再次尝试创建内容!

kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission

在这里插入图片描述

至此,两个ingress-controller的pod,由于采用反亲和性,分别部署到两个节点上。

2,安装 配置keeplived+nginx

实现前端虚拟IP(VIP),两节点node机器上相互“漂移”。

(1)两台node节点分别安装
yum install  epel-release  nginx keepalived nginx-mod-stream  -y
(2)更改nginx.conf
# cat /etc/nginx/nginx.confuser nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}# 增加一下内容:为两台apiserver组件提供负载均衡
stream {log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log  /var/log/nginx/k8s-access.log  main;upstream k8s-ingress-controller {server 192.168.40.181:80 weight=5 max_fails=3 fail_timeout=30s;   # node1的IP:PORTserver 192.168.40.182:80 weight=5 max_fails=3 fail_timeout=30s;   # node2 的IP:PORT}server {listen 30080; # 该监听端口需要大于30000-32000左右proxy_pass k8s-ingress-controller;}
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;}

【备注】:

  • server 反向服务地址和端口
  • weight 主机权重
  • max_fails 最大失败次数,达到该数值,则认为主机已挂掉,踢出
  • fail_timeout 踢出后重新探测时间
  • nginx监听端口变成大于30000的端口,才能代理ingress-controller。(比方说30080,问域名:30080)
(3)keepalive配置

主节点 和 备节点服务器的配置不同。

# cat /etc/keepalived/keepalived.conf global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc  smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER
} vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"
}vrrp_instance VI_1 { state MASTER interface ens33      # 修改为实际网卡名virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 priority 100         # 优先级,备服务器设置 90 advert_int 1         # 指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS      auth_pass 1111 }  # 虚拟IPvirtual_ipaddress { 192.168.40.199/24  # 该网段需和物理机ip为同一个网段} track_script {check_nginx} 
}

【注意】:

  • vrrp_script:指定检查nginx工作状态脚本(根据nginx状态判断是否故障转移)
  • virtual_ipaddress:
    • 虚拟IP(VIP)
    • 192.168.40.199/24 # 该网段需和物理机ip为同一个网段
    • 该ip地址不能被占用,需要ping一下查看

【主/备配置参数区别】:

主服务(node01)备服务(node02)
stateMASTERBACKUP
priority10090

在这里插入图片描述

(4)配置检测脚本check_nginx.sh
# cat check_nginx.sh#!/bin/bash
#1、判断Nginx是否存活
counter=$(ps -ef |grep nginx | grep sbin | egrep -cv "grep|$$" )
if [ $counter -eq 0 ]; then#2、如果不存活则尝试启动Nginxservice nginx startsleep 2#3、等待2秒后再次获取一次Nginx状态counter=$(ps -ef |grep nginx | grep sbin | egrep -cv "grep|$$" )#4、再次进行判断,如Nginx还不存活则停止Keepalived,让地址进行漂移if [ $counter -eq 0 ]; thenservice  keepalived stopfi
fi

添加授权,拥有可执行权限:chmod +x check_nginx.sh

(5)两台node主机节点按顺序依次启动
systemctl daemon-reload
systemctl enable nginx keepalived
systemctl start nginx
systemctl start keepalived
(6)测试vip是否绑定成功

查看vip绑定位置:
在这里插入图片描述
通过停止keepalived,看看vip的位置,是否“漂移”!!!

3,控制器(deploy)创建pod及service

# cat ingress-service-pod.yamlapiVersion: v1
kind: Service
metadata:name: ingress-service      # 创建service名称namespace: ingress-nginx   # 指定命名空间labels:app: ingress-service     # service自己标签
spec:selector: app: ingress-pod         # service 筛选pod标签version: v1type: ClusterIPports:- port: 80                 # service对外暴露的端口targetPort: 80           # 指定流量转发pod的目标端口
---
apiVersion: apps/v1
kind: Deployment
metadata:name: ingress-deploylabels: app: ingress-deploy-podversion: v1namespace: ingress-nginx
spec:replicas: 3revisionHistoryLimit: 8selector:matchLabels:app: ingress-podversion: v1strategy:rollingUpdate:maxSurge: 2maxUnavailable: 0template:metadata:labels:app: ingress-podversion: v1namespace: ingress-nginxspec:containers:- name: ingress-nginx-podimage: nginximagePullPolicy: IfNotPresentports:- name: web-portcontainerPort: 80protocol: TCPresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"  

4,创建ingress

# cat ingress.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata: name: ingress-webnamespace: ingress-nginxlabels:app: ingress-webversion: v1
spec:ingressClassName: nginx  rules:- host: mdy.ingressweb.com        # 指定访问的域名http:paths:- backend:service:name: ingress-service   # 指定之前创建service的名称port:        number: 80            # 指定service的端口path: /                     # 指定访问的路径pathType: Prefix            

在这里插入图片描述

5,访问域名 http://mdy.ingressweb.com

本地主机host绑定:

192.168.40.199  mdy.ingressweb.com

在这里插入图片描述

6,构建Ingress HTTPS代理访问

HTTPS域名访问,需要购买证书,测试本地自建证书即可!

(1)创建并进入tls目录, 创建域名 mdy.ingressweb2.com证书
# cd /root/ingress/tlsopenssl genrsa -out tls-name.key 2048# 指定具体域名mdy.ingressweb2.com
openssl req -new -x509 -key tls-name.key -out tls-name.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=mdy.ingressweb2.com
(2)根据域名证书,创建生成secret
kubectl create secret tls ingress-secret --cert=tls-name.crt --key=tls-name.key

【注意】
kubectl create secret tls:为生产工具(tls为证书类型),固定写法。

(3)基于上面生产的ingress.yaml更改配置
# cat ingress.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-web-httpsnamespace: ingress-nginxlabels:app: ingress-webversion: v1
spec:ingressClassName: nginxtls:                            # 定义证书- hosts:                        # 定义hosts- mdy.ingressweb2.com         # 指定域名(已被证书签发)secretName: ingress-secretrules:- host: mdy.ingressweb2.comhttp:paths:- backend:service:name: ingress-serviceport:number: 80path: /pathType: Prefix            
(4)访问域名 https://mdy.ingressweb2.com

本地主机host绑定:

192.168.40.199  mdy.ingressweb2.com

在这里插入图片描述
在这里插入图片描述

相关文章:

【kubernetes】Ingress和Ingress-Controller介绍,高可用应用案例

一,Ingress介绍 Ingress是k8s中一种重要的资源对象,它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。 kubectl explain ingress二,Ingress-Controller介绍 Ingress Controller 是 …...

C# 使用Socket通信,新建WinForm服务端、客户端程序

一、新建WinForm Socket服务端程序 注:rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…...

Kamailio-基于Homer与heplify的SIP信令监控-2

接上篇,我们已经顺利地完成了服务的安装,下面就来看看如何配置并启动。 跟着我,你将学会: 下载并安装 踩坑:按照官方步骤来,可是网络条件不允许 获取YUM源下载RPM包手动解压安装避坑 配置并启动&#xf…...

unity3d入门教程四

unity3d入门教程四 10.1坐标与旋转10.2物体的运动10.3(练习)掉头飞行11.1向量11.2向量间运算11.3向量夹角11.4物体的指向11.5(练习)飞向目标12.1屏幕坐标12.2屏幕的边界 10.1坐标与旋转 比如,节点的坐标用 Vector3 类型…...

无人机飞控的原理!!!

一、传感器系统 陀螺仪:用于检测无人机的角速度和角度,帮助确定无人机的姿态。 加速度计:用于检测无人机的加速度和倾斜角度,进一步辅助姿态判断。 磁力计(或罗盘):用于检测无人机的方向&…...

深入解析代理模式:静态代理、JDK 动态代理和 CGLIB 的全方位对比!

代理模式(Proxy Pattern)是一种结构型设计模式,它提供了对象的替身,即代理对象来控制对实际对象的访问。通过代理对象,可以在不修改目标对象的情况下,扩展或控制其功能。例如,代理模式可以用于延…...

51单片机快速入门之独立按键

51单片机快速入门之独立按键 这里我们需要用上一个仿真软件,只因不想硬件焊接:PROTEUS DESIGN SUITE PROTEUS DESIGN SUITE: PROTEUS DESIGN SUITE是一款由LabCenter Electronics开发的电子设计自动化(EDA)软件,广泛应用于电气工程和电子工…...

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要…...

速盾:高防 cdn 分布式防御攻击?

在当今数字化时代,网络安全问题日益凸显,各种网络攻击手段层出不穷。为了保护企业和个人的网络资产安全,高防 CDN(Content Delivery Network,内容分发网络)成为了一种重要的防御手段。其中,分布…...

Unity3D类似于桌面精灵的功能实现

前言: 由于最近在做游戏魔改,很多功能在游戏里面没法实现(没错,说的就是排行榜),所以准备用Unity3D开发一个类似于桌面精灵的功能部件,实现效果如下: PS:有需要定制的老…...

Audio Over IP的PTP时钟初探

Audio Over IP的PTP时钟初探 这几天参加省局举办的技术能手比赛,第一次接触并了解AOIP(Audio Over IP)相关的理论和实践相关的知识。其中AoIP的时钟同步采用的是IEEE 1588 标准的PTP(Precision Time Protocol)基于网络…...

【加密社】深入理解TON智能合约 (FunC语法)

king: 摘要:在TON(TheOpenNetwork)区块链平台中,智能合约扮演着举足轻重的角色。本文将通过分析一段TON智能合约代码 带领读者学习dict(字典)和list(列表)在FunC语言中的用法&#x…...

笔试强训day11

游游的水果大礼包 #include <iostream> #define int long longusing namespace std; int n, m, a, b;signed main() {cin>>n>>m>>a>>b;int ret 0;for(int x 0; x < min(n / 2, m); x) // 枚举 1 号礼包的个数{int y min(n - x * 2, (m - …...

移动应用开发与测试赛题

引言 在现代车载系统开发中&#xff0c;UI设计和编程实现同样重要。本文将分别探讨车载系统的UI设计任务和相关的编程任务&#xff0c;帮助开发者全面了解车载系统开发的各个方面。 第一部分&#xff1a;UI设计任务 任务1&#xff1a;绘制"左转向视频显示"模块界面…...

Qt常用控件——QLineEdit

文章目录 QLineEdit核心属性和信号基本示例正则表达式约束验证输入密码是否一致密码显示状态切换 QLineEdit核心属性和信号 QLineEdit用来表示单行输入&#xff0c;可以输入一段文本&#xff0c;但是不能替换 核心属性&#xff1a; 属性说明text输入框中的文本inputMask输入…...

(postman)接口测试进阶实战

1.内置和自定义的动态参数 内置的动态参数有哪些&#xff1f; ---{{$}}--是内置动态参数的标志 //自定义的动态参数 此处date.now()的作用就相当于上面的timestamp 2.业务闭环及文件接口测试 返回的url地址可以在网页中查询得到。 3. 常规断言&#xff0c;动态参数断言&#xf…...

R语言统计分析——功效分析(比例、卡方检验)

参考资料&#xff1a;R语言实战【第2版】 1、比例检验 当比较两个比例时&#xff0c;可使用pwr.2p.test()函数进行功效分析。格式为&#xff1a; pwr.2p.test(h, n, sig.level, power, alternative) 其中&#xff0c;h是效应值&#xff0c;n是各相同的样本量。效应值h的定义如…...

Leetcode 每日一题:Longest Increasing Path in a Matrix

写在前面&#xff1a; 今天我们继续看一道 图论和遍历 相关的题目。这道题目的背景是在一个矩阵当中找寻最长的递增数列长度。思路上非常好想&#xff0c;绝对和 DFS 相关&#xff0c;但是题目的优化要求非常高&#xff0c;对于语言和内存特性的考察特别丰富&#xff0c;如果是…...

ARCGIS PRO DSK MapTool

MapTool用于自定义地图操作工具&#xff0c;使用户能够在ArcGIS Pro中执行特定的地图交互操作。添加 打开MapTool1.vb文件&#xff0c;可以看到系统已经放出MapTool1类&#xff1a; Public Sub New()将 IsSketchTool 设置为 true 以使此属性生效IsSketchTool TrueSketchTyp…...

国网B接口 USC安防平台 海康摄像机配置

国网B接口海康摄像机配置介绍 如下以海康DS-NACN6432I-GLN摄像机为例&#xff0c;配置国网B接口设备接入流程&#xff0c;海康摄像机的固件版本为 V5.6.11 build 210109 210107。该设备为球机&#xff0c;支持国网B接口云台控制功能。图标编号可以对应二者的配置。 注意 同一…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...