Kubernetes--ingress实现七层负载

目录

一、传统方式:不借助ingress实现七层代理

二、nginx-ingress

三、使用ingress实现七层代理

四、部署ingrss-nginx及功能

五、样例

1.Ingress-nginx HTTP代理访问

2.Ingress HTTPS代理访问(会话卸载层)

3.Nginx进行BasicAuth(访问认证)

4、ingress-nginx进行重写(跳转)


一、传统方式:不借助ingress实现七层代理

Deployment启动一组容器,并通过svc暴露一个ip,实现负载均衡,而ngin则只需在配置文件中将暴露出的clusterIP写在配置文件的代理区域,同时将自己的service改为nodeport(或loadBalancer)。既实现负载均衡

缺点:需要每次都进入nginx里更改配置文件,不够动态

二、nginx-ingress

官网:

ngress-Nginx github 地址:https://github.com/kubernetes/ingress-nginx

Ingress-Nginx 官方网站:https://kubernetes.github.io/ingress-nginx/

网站里有不同的部署方案(loadBalancer)AWS/GCE/等,也有基于NodePort

Nginx软件层面七层代理最强,但不可热更新

三、使用ingress实现七层代理

将配置信息对象化。使管控起来更为便利,原理无太大差异

Nginx-ingress结构:为了满足ingress可动态更新的需求,进行了结构层次的修改

协程:轻量级线程

协程会和apiservcer联立,监听变化

Lua server模块:可以以异步方案更新 以lua语言编写

2种重载及更新

1.非紧急事件(死了一个pod):会被放在更新队列中,此更新队列写满后被主程拿到另一个队列再更新(可有可无的事件),二级缓冲机制

         2.紧急事件(svc变动):即时生效,判断是否需要重载生效。需要重载则重载

         主要还是为了,让nginx更稳定

四、部署ingrss-nginx及功能

1)ingrss-nginx国内无法下载(quay.io),需要翻墙,此处采用老师提供的,国内有小网站代理,但不稳定,建议买个国外服务器

【】mkdir /usr/local/kubernetes/ingress

【】tar -xf ingress-nginx.tar.gz /usr/local/kubernetes/ingress

【】cd ingress-nginx

【】ls

ingress.tar(镜像)  mandatory.yaml(部署文件包含控制器,包含权限)  service-nodeport.yaml(service网络)

2)导入镜像,master和node都需要

【】docker load -i ingress.tar

【】scp ingress.tar 各节点

各节点【】docker load -i ingress.tar

3)启动部署文件

【】kubectl apply -f mandatory.yam

【】kubectl apply -f service-nodeport.yaml

【】kubectl get pod --all-namespaces

【】kubectl get svc -n ingress-nginx

#【】kubectl  exec -it -n ingress-nginx nginx-ingress-controller-7995bd9c47-4nrph -- /bin/sh

#可以进入从pod内看看发现和nginx原理是一样的

4)删除ingress的方法

【】cd /usr/local/kubernetes/ingress/ingress-nginx/

【】kubectl delete -f service-nodeport.yaml

【】kubectl delete -f service-nodeport.yaml

五、样例

1.Ingress-nginx HTTP代理访问

1)创建资源清单,并启动

【】mkdir ingress

【】vim http-deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: nginx-dm
spec:replicas: 2template:metadata:labels:name: nginxspec:containers:- name: nginximage: wangyanglinux/myapp:v1imagePullPolicy: IfNotPresent   #下载策略为本地有就不下载ports:- containerPort: 80   #端口80-
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:ports:- port: 80targetPort: 80protocol: TCPselector:
name: nginx   #与deployment的对应
---
apiVersion: extensions/v1beta1   #ingress接口
kind: Ingress   #ingress对象
metadata:name: nginx-test
spec:rules:- host: www1.zn.com   #主机名http:   #基于http协议paths:   #可以写多个等同location- path: /backend:serviceName: nginx-svc  #由名字为nginx-svc的svc提供的podservicePort: 80

【】kubectl apply -f http-deploy.yaml

【】kubectl get ingress

NAME         HOSTS             ADDRESS   PORTS   AGE

nginx-test   www1.hongfu.com             80      4m11s

访问基于域名所以要写host文件

C:\Windows\System32\drivers\etc/hosts

192.168.1.71        www.zn.com

拿物理路由器做DNAT映射或者搭建四层负载均衡调度或F5

2.Ingress HTTPS代理访问(会话卸载层)

后端用什么都可以,此处实际也用了nginx

1)创建证书,以及cert存储方式

【】openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc" 

#新版openssl支持的一条命令注入方式,国家或组织等可通过-的方案添加

【】kubectl create secret tls tls-secret --key tls.key --cert tls.crt

#secret 存储安全类型的文件

tls类型  名字tls-secret  --key指定私钥  --cert 指定证书

【】kubecctl get secret

【】kubectl describe secret tls-secret

Name:         tls-secret

Namespace:    default

Labels:       <none>

Annotations:  <none>

Type:  kubernetes.io/tls

Data

====

tls.crt:  1143 bytes

tls.key:  1704 bytes

2)创建ingress的资源清单

【】vim 2.https.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: https
spec:tls:          #tls类型- hosts:- ssl.zn.com  #https的域名secretName: tls-secret   #用的是哪个证书即哪个csecret对象rules:  #https主机的入口设置- host: ssl.hongfu.com   #入口主机的域名(80的域名)http:   #http协议paths:   #路径lacation区域- path: /backend:serviceName: nginx-svc  #找此clusterip调度的真实服务器servicePort: 80   # 端口

【】kubectl apply -f 2.https.yaml

3.Nginx进行BasicAuth(访问认证)

1)生成密码文件

【】yum -y install httpd(或httpd-tools)

【】htpasswd -c auth 用户名

#生成密码文件,会车输入密码

【】kubectl create secret generic basic-auth --from-file=auth

#generic类型

【】vim basicauth.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: ingress-with-authannotations:    #标记,lables主要用于K8S内部匹配,但此标记会被ingress-nginx应用程序所识别(需在应用程序里写相关配置)nginx.ingress.kubernetes.io/auth-type: basicnginx.ingress.kubernetes.io/auth-secret: basic-authnginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'   #此3条代表要进行basicAuth
spec:rules:- host: auth.hongfu.comhttp:paths:- path: /backend:serviceName: nginx-svcservicePort: 80

【】kubectl apply -f basicauth.yaml

主机修改host文件添加对应解析,访问呢即可

4、ingress-nginx进行重写(跳转)

名称

描述

nginx.ingress.kubernetes.io/rewrite-target

必须重定向流量的目标URI

nginx.ingress.kubernetes.io/ssl-redirect

指示位置部分是否仅可访问SSL(当Ingress包含证书时默认为True),即必须https

布尔

nginx.ingress.kubernetes.io/force-ssl-redirect

即使Ingress未启用TLS,也强制重定向到HTTPS,即访问任何都会调转到https

布尔

nginx.ingress.kubernetes.io/app-root

定义Controller必须重定向的应用程序根,如果它在'/'上下文中

nginx.ingress.kubernetes.io/use-regex

指示Ingress上定义的路径是否使用正则表达式

布尔

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: rewannotations:nginx.ingress.kubernetes.io/rewrite-target: http://ssl.fongfu.com:31795/hostname.html  #也可以写https
spec:rules:- host: rew.hongfu.com   #主机名,即访问foo10,跳转到ssl,hongfu。com:31795http:paths:- path: /backend:serviceName: nginx-svcservicePort: 80

做完清空以下,以免影响后续

【】kubectl delete ingress --all

【】kubectl delete svc nginx-svc

【】kubectl delete deployment --all

【】kubectl delete secret basic-auth tls-secret  #注意默认的不要删除(default-token-brcmv

总结:和svc对比优点和缺点即四七层的优缺点

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

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

相关文章

第七届强网杯-PWN-【warmup】

文章目录 warmup libc 2.35检查IDA逆向maindeldelete_noteadd_noteshow_noteinput_numberread_16atoi __errno_location()相关解释prctl相关 思路高版本off by null利用技巧产生chunk extend泄露libc基地址泄露heap基地址修改放入tcachebin中的chunk的fd为stdout最后add两个chu…

专业138+总分400+南航南京航空航天大学878考研经验电子信息与通信工程,真题,大纲,参考书

经过一年的复习&#xff0c;顺利被南京航空航天大学录取&#xff0c;初试专业课878数字电路和信号与系统138&#xff0c;总分400&#xff0c;回看这一年的复习&#xff0c;从择校到考研备考经历了很多&#xff0c;也有很多想和大家分享的复习经验&#xff0c;希望对大家复习有所…

EI级 | Matlab实现GCN基于图卷积神经网络的数据多特征分类预测

EI级 | Matlab实现GCN基于图卷积神经网络的数据多特征分类预测 目录 EI级 | Matlab实现GCN基于图卷积神经网络的数据多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GCN基于图卷积神经网络的数据分类预测 Matlab2023 2.多输入单输出的分类预测&#xf…

docker学习进阶篇

一、dockerfile解析 官方文档&#xff1a; Dockerfile reference | Docker Docs 1.1、dockfile是什么&#xff1f; dockerfile是用来构建docker镜像的文本文件&#xff0c;由一条条构建镜像所需的指令和参数构成的脚本。 之前我们介绍过通过具体容器反射构建镜像(docker comm…

leetcode 热题 100_螺旋矩阵

题解一&#xff1a; 模拟&#xff1a;定义四个边界&#xff0c;指针按右下左上的顺序遍历&#xff0c;每遍历一条边&#xff0c;边界就减一&#xff0c;并且在某个方向没有可以遍历的数时直接返回。 import java.util.ArrayList; import java.util.List;class Solution {publi…

[AIGC] Kafka解析:分区、消费者组与消费者的关系

Apache Kafka是一个分布式事件流平台&#xff0c;它是处理实时数据的强大工具。而理解Kafka的关键概念&#xff1a;分区&#xff08;Partition&#xff09;、消费者组&#xff08;Consumer Group&#xff09;和消费者&#xff08;Consumer&#xff09;的关系对于正确地使用Kafk…

【leetcode C++】最小栈

leetcode 155. 最小栈 题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获…

windows系统关机后自动重启解决方法

windows系统关机后自动重启解决方法 wini 进去系统设置的关于界面->高级系统设置高级->环境变量将自动重新启动取消->最后确定电源和睡眠->其他电源设置选择看电源按钮的功能更改当前不可用设置->取消快速启动 wini 进去系统设置的关于界面->高级系统设置 高…

Learn OpenGL 07 摄像机

定义摄像机参数 glm::vec3 cameraPos glm::vec3(0.0f, 0.0f, 3.0f);//摄像机位置glm::vec3 cameraTarget glm::vec3(0.0f, 0.0f, 0.0f);glm::vec3 cameraDirection glm::normalize(cameraPos - cameraTarget);//摄像机方向&#xff0c;指向z轴正方向 glm::vec3 up glm::vec…

20240309web前端_第一周作业_豆瓣电影

作业四&#xff1a;豆瓣电影 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0…

探索计算机视觉的未来

目录 前言1 计算机视觉简介2 计算机视觉的基本原理2.1 图像获取2.2 图像预处理2.3 特征提取2.4 模式识别 3 深度学习与计算机视觉3.1 深度学习的基本原理3.2 深度学习在计算机视觉中的应用 4 计算机视觉的应用领域4.1 人脸识别4.2 物体识别4.3 图像分割4.4 视频追踪 5 未来发展…

Midjourney从入门到实战:图像生成命令及参数详解

目录 0 专栏介绍1 Midjourney Bot常用命令2 Midjourney绘图指令格式3 Midjourney绘图指令参数3.1 模型及版本3.2 画面比例3.3 风格化3.4 图片质量3.5 混乱值3.6 随机数种子3.7 重复贴图3.8 停止3.8 垫图权重3.9 提示词权重分割 0 专栏介绍 &#x1f525;Midjourney是目前主流的…

Vue3全家桶 - VueRouter - 【3】嵌套路由【children】

嵌套路由【children】 如果在路由视图中展示的组件包含自己的路由占位符&#xff08;路由出口&#xff09;&#xff0c;则此处会用到嵌套路由&#xff1b;如图所示&#xff1a;点击关于链接&#xff0c;则会展示About组件&#xff0c;在其组件中又包含了路由链接和路由占位符&…

蓝桥杯-ISBN号码

此题然让本人纠结了很久&#xff0c;真的好多坑。。。。果然还是太菜了。 完整代码以及思路解析(在注释中) #include <iostream> using namespace std; int main() {string num;cin>>num; int count0;int w1;for(int i0;i<10;i){if((i!1)&&(i!5)) //坑…

常见的限流算法- python版本

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 在系统的稳定性设计中&#xff0c;需要考虑到的就是限流&#xff0c;避免高并发…

Elastic Stack--08--SpringData框架

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 SpringData[官网&#xff1a; https://spring.io/projects/spring-data](https://spring.io/projects/spring-data) Spring Data Elasticsearch 介绍 1.SpringData-…

AI+X 高校行:首场浙大站爆满!

Datawhale线下 线下活动&#xff1a;AIX 高校行活动 AIX&#xff1a;希望将人工智能&#xff08;AI&#xff09;与各个学科和行业&#xff08;X&#xff09;结合&#xff0c; 激发无限潜力和创造力&#xff08;X&#xff09;&#xff0c;让年轻人拥有更多可能性&#xff08;X&…

Discord OAuth2授权以及机器人监听群事件

下面文章讲解获取OAuth2授权整个流程&#xff0c;创建机器人&#xff0c;使用机器人监听工会&#xff08;工会就是创建的服务器&#xff09;成员变化等等&#xff0c;对接国外的都是需要VPN的哦&#xff0c;对接的时候记得提前准备。 创建应用 点击 此页面添加应用,&#xff…

Midjourney绘图欣赏系列(七)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…