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: 2
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
        - name: nginx
          image: wangyanglinux/myapp:v1
          imagePullPolicy: IfNotPresent   #下载策略为本地有就不下载
          ports:
            - containerPort: 80   #端口80-
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
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提供的pod
            servicePort: 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-auth
  annotations:    #标记,lables主要用于K8S内部匹配,但此标记会被ingress-nginx应用程序所识别(需在应用程序里写相关配置)
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'   #此3条代表要进行basicAuth
spec:
  rules:
  - host: auth.hongfu.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-svc
          servicePort: 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: rew
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: http://ssl.fongfu.com:31795/hostname.html  #也可以写https
spec:
  rules:
  - host: rew.hongfu.com   #主机名,即访问foo10,跳转到ssl,hongfu。com:31795
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-svc
          servicePort: 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对比优点和缺点即四七层的优缺点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊店铺解决和预防订单下滑的技巧

1. 保持账号的良好表现。不要销售侵权产品&#xff0c;发货要及时&#xff0c;能有追踪号的就带可查询追踪号&#xff0c;能发FBA的就通过FBA发货。 2. 持续做好产品优化工作&#xff0c;及时留意大环境的变化和平台政策变动。遇到编辑权限受限&#xff0c;可开case咨询或申请…

【数据库】软件测试之MySQL数据库练习题目

有表如下&#xff1a; Student 学生表 SC 成绩表 Course 课程表 Teacher 老师表 每个学生可以学习多门课程&#xff0c;每一个课程都有得分&#xff0c;每一门课程都有老师来教&#xff0c;一个老师可以教多个学生 1、查询姓‘朱’的学生名单 select * from Student whe…

vb机试考试成绩分析与统计,设计与实现(高数概率统计)-141-(代码+程序说明)

转载地址http://www.3q2008.com/soft/search.asp?keyword141 前言: 为何口出狂言,作任何VB和ASP的系统, 这个就是很好的一个证明 :) 又有些狂了... 数据库操作谁都会,接触的多了也没什么难的,VB编程难在哪?算法上,这个是一个算法题的毕业设计,里面涉及到对试卷的 平均分,最…

AI编程已有公司纳入绩效,你的AI编程工具是什么?

自从ChatGPT带动全球AI热潮&#xff0c;AI席卷着各行各业。编程界也不例外&#xff0c;最出名的摸过OpenAI与GitHub联合开发的Github Copilot。Github Copilot带动了一大堆AI编程工具的出现。后来Github Copilot付费了&#xff0c;再加上网络方面的问题&#xff0c;在国内使用G…

基于PHP的店家服务与管理交互平台

目 录 摘 要 I Abstract II 引 言 1 1相关技术 3 1.1 PHP 3 1.2 ThinkPHP框架 3 1.2.1 Struts结构 3 1.2.2 MVC 3 1.2 Tomcat服务器 3 1.3 MySQL数据库 3 1.4 LayUI框架 4 1.5 ECharts 4 1.6 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 6 2.3 非功能需求 8 2.4 本章…

MySQL--索引类型详解

索引的类型 主键索引&#xff1a; PRIMARY KEY&#xff0c;当一张表的某个列是主键的时候&#xff0c;该列就是主键索引&#xff0c;一张表只允许有一个主键索引&#xff0c;主键所在的列不能为空。 创建主键索引的SQL语法&#xff1a; # 给user表中的id字段创建名为id_ind…

【Datawhale学习笔记】从大模型到AgentScope

从大模型到AgentScope AgentScope是一款全新的Multi-Agent框架&#xff0c;专为应用开发者打造&#xff0c;旨在提供高易用、高可靠的编程体验&#xff01; 高易用&#xff1a;AgentScope支持纯Python编程&#xff0c;提供多种语法工具实现灵活的应用流程编排&#xff0c;内置…

数字化车间MES管理系统如何降低如何降低企业生产成本

数字工厂管理系统在降低制造企业生产成本方面发挥了重要的作用。通过优化物流和信息流&#xff0c;实现生产过程的自动化、智能化和可视化&#xff0c;数字工厂管理系统将从三个方面来降低生产成本。 1、数字工厂管理系统可以通过减少库存量来降低企业的生产成本。数字工厂管理…

GEE:计算一个遥感影像的空像素占比

作者:CSDN @ _养乐多_ 本文将介绍,如何在 Google Earth Engine (GEE) 平台计算一个遥感影像的空像素占比,其中,包含获取研究区内所有像素的总数的代码,以及获取非空像素的总数的代码。 结果如下图所示, 文章目录 一、核心函数1.1 获取研究区内所有像素的总数1.2 获取非…

【面试精讲】Java线程6种状态和工作原理详解,Java创建线程的4种方式

Java线程6种状态和工作原理详解&#xff0c;Java创建线程的4种方式 目录 一、Java线程的六种状态 二、Java线程是如何工作的&#xff1f; 三、BLOCKED 和 WAITING 的区别 四、start() 和 run() 源码分析 五、Java创建线程的所有方式和代码详解 1. 继承Thread类 2. 实现…

管理类联考-复试-管理类知识-其他常见词汇

文章目录 其他常见词汇营销4P、营销4C营销STP理论破窗效应价格歧视/区别定价定价策略——撇脂定价策略定价策略——渗透定价策略 心理账户机会成本看不见的手市场失灵马太效应鲶鱼效应禀赋效应&#xff08;马克杯实验&#xff09;羊群效应帕累托原则长尾理论 其他常见词汇 营销…

安装Mysql时报错[Warning] TIMESTAMP with implicit DEFAULT

win10安装mysql5.7.26(免安装版本)过程中 在执行mysqld --initialize命令时 报错&#xff1a; [Warning]解决方法&#xff1a; [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see document…

LINE社群运营教学

LINE 社群就是一个大型的公开聊天室&#xff0c;通过LINE社群不需要将对方添加为好友就可以聊天。它主要是以「兴趣」作为区分&#xff0c;所以商家可以在社群中找到不少潜在客户。尤其是面向台湾、日本、泰国这些地区的商家&#xff0c;LINE在这些地区的普及度很高&#xff0c…

记录一个vue编辑的移动端页面

<template><div class"wrap"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" label-width"120px"><el-form-item label"班级" prop"classId"…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型(有目标函数)

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型&#xff08;有目标函数&#xff09;【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#…

Buildroot 之一 详解源码及架构

在之前的博文中,我们学习了直接通过 Makefile 手动来进行构建 U-Boot 和 Linux Kernel 等,其实,目前存在多种嵌入式 Linux 环境的构建工具,其中,Buildroot 就是被广泛应用的一种。今天就来详细学习一个 Buildroot 这个自动化构建工具。 Buildroot Buildroot 是一个运行于…

HCIP---IS-IS协议

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.IS-IS协议概述 IS-IS是一种基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;它使用最短路径优先算法&#xff08;SPF或Dijkstra&#xff09;进行路由计算。这种协议在自治…

如果让你实现实时消息推送你会用什么技术?轮询、websocket还是sse

在日常的开发中&#xff0c;我们经常能碰见服务端需要主动推送给客户端数据的业务场景&#xff0c;比如_数据大屏的实时数据_&#xff0c;比如_消息中心的未读消息_&#xff0c;比如_聊天功能_等等。 本文主要介绍SSE的使用场景和如何使用SSE。 学习就完事了 服务端向客户端推…

使用 Logstash 丰富你的 Elasticsearch 文档

作者&#xff1a;来自 Elastic David Pilato 我们在上一篇文章中看到&#xff0c;我们可以使用摄取管道中的 Elasticsearch Enrich Processor 在 Elasticsearch 中进行数据丰富。 但有时&#xff0c;你需要执行更复杂的任务&#xff0c;或者你的数据源不是 Elasticsearch&#…

掌握这3种方法,mp3格式转换就是这么简单!

掌握MP3格式转换并不需要复杂的技术或专业知识。在数字化时代&#xff0c;我们有许多简单而有效的方法可以实现这一目标。无论是为了节省存储空间&#xff0c;提高音频文件的兼容性&#xff0c;还是其他需求&#xff0c;本文将介绍三种简单的方法&#xff0c;让您轻松掌握mp3格…