K8S的ingress介绍和安装ingress

1 ingress介绍

1.1 ingress架构图

在这里插入图片描述

1.2 ingress相关概念

ingress诞生背景:

在没有ingress之前,只能基于svc的NodePort或者LoadBalancer实现内部的pod对外访问,如果遇到多个服务要监听80端口时。
很明显无论哪种类型都无法实现,如果非要实现,就得在K8S集群外部部署一个LB设备,来代理到对应svc资源。而ingress就可以很好的解决这个问题。例如nginx的一个80端口可以给多个实例使用

所谓的ingress指的是一种规则,基于用户访问的请求头路由到正确的svc。简单来说说就是7层代理。

可惜K8S只是实现了ingress定义规则,这个规则被记录到etcd中,但并没有具体实现此功能,因此需要自行安装相应的附加组件
(ingress-nginx,trafik,…)

和svc的区别时,svc只能实现4层的代理。而ingress实现了7层的代理。ingress是定义域名到svc的解析规则,好比nginx.conf配置文件

Ingress Controller和内置的pod控制器有啥区别呢?

内置的pod控制器,比如ds、sts、deploy、jobs、cj、rs、rc等都是用来控制pod的副本数量

1.3 nginx基于域名的多实例演示

1.nginx配置

cat /etc/nginx/conf.d/more-instance.conf
server {listen 80; server_name name1.wzy.com;location /* {root /code/name1;index index.html;}
}
server {listen 80; server_name name2.wzy.com;location /* {root /code/name2;index index.html;}
}

2.nginx 页面文件:

[root@db51~]# tree -F /code/
/code/
├── name1/
│   └── index.html
└── name2/└── index.html

3.访问效果

[root@db51~]# curl -H Host:name1.wzy.com 10.0.0.51
name1
[root@db51~]# curl -H Host:name2.wzy.com 10.0.0.51
name2

2 安装ingress控制器

01 ingress-nginx 版本选择和安装方式

ingress-nginx 是K8S官方开源的一个ingress控制器。

安装方式有如下3种:

  • 使用 helm 安装
  • 使用 kubectl apply 创建yaml资源清单的方式进行安装,参考地址。yaml下载地址,修改uri对应版本即可下载需要的版本
  • 使用第三方插件的方式进行安装
upportedIngress-NGINX versionk8s supported versionAlpine VersionNginx VersionHelm Chart Version
🔄v1.12.0-beta.01.31, 1.30, 1.29, 1.283.20.31.25.54.12.0-beta.0
🔄v1.11.31.30, 1.29, 1.28, 1.27, 1.263.20.31.25.54.11.3
🔄v1.11.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.2
🔄v1.11.11.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.1
🔄v1.11.01.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.0
v1.10.51.30, 1.29, 1.28, 1.27, 1.263.20.31.25.54.10.5
v1.10.41.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.4
v1.10.31.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.3
v1.10.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.2
v1.10.11.30, 1.29, 1.28, 1.27, 1.263.19.11.25.34.10.1
v1.10.01.29, 1.28, 1.27, 1.263.19.11.25.34.10.0
v1.9.61.29, 1.28, 1.27, 1.26, 1.253.19.01.21.64.9.1
v1.9.51.28, 1.27, 1.26, 1.253.18.41.21.64.9.0
v1.9.41.28, 1.27, 1.26, 1.253.18.41.21.64.8.3
v1.9.31.28, 1.27, 1.26, 1.253.18.41.21.64.8.*
v1.9.11.28, 1.27, 1.26, 1.253.18.41.21.64.8.*
v1.9.01.28, 1.27, 1.26, 1.253.18.21.21.64.8.*
v1.8.41.27, 1.26, 1.25, 1.243.18.21.21.64.7.*
v1.7.11.27, 1.26, 1.25, 1.243.17.21.21.64.6.*
v1.6.41.26, 1.25, 1.24, 1.233.17.01.21.64.5.*
v1.5.11.25, 1.24, 1.233.16.21.21.64.4.*
v1.4.01.25, 1.24, 1.23, 1.223.16.21.19.10†4.3.0
v1.3.11.24, 1.23, 1.22, 1.21, 1.203.16.21.19.10†4.2.5
02 helm安装Ingress-nginx
节点IP地址
master23110.0.0.231
worker23210.0.0.232
worker23210.0.0.233

1.添加Ingress-nginx的官方仓库

[root@master231 05-ingress-nginx]# helm repo add zhiyong18-ingress-nginx \
https://kubernetes.github.io/ingress-nginx"zhiyong18-ingress-nginx" has been added to your repositories[root@master231 05-ingress-nginx]# helm repo list
NAME                   	URL                                                   
...
zhiyong18-ingress-nginx	https://kubernetes.github.io/ingress-nginx

2.更新helm软件源

[root@master231 05-ingress-nginx]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "zhiyong18-aliyun" chart repository
...Successfully got an update from the "zhiyong18-ingress-nginx" chart repository
...Successfully got an update from the "azure" chart repository
Update Complete. ⎈Happy Helming!

3.下载指定版本的ingres-nginx软件包。如果下载失败,可以直接去拉取官方拉取chart包:下载地址

[root@master231 05-ingress-nginx]# helm search repo ingress-nginx
NAME                                 	CHART VERSION	APP VERSION	DESCRIPTION                                       
zhiyong18-ingress-nginx/ingress-nginx	4.11.1       	1.11.1     	Ingress controller for Kubernetes using NGINX a...[root@master231 05-ingress-nginx]# helm pull zhiyong18-ingress-nginx/ingress-nginx --version 4.2.5

4.解压软件包,然后修改配置文件

ingress-nginx 要拉取的镜像为:

registry.k8s.io/ingress-nginx/controller:v1.3.1
registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.3.0
registry.k8s.io/defaultbackend-amd64:1.5
  • 修改镜像为国内的镜像,否则无法下载海外镜像,除非会FQ
  • 建议使用宿主机网络效率最高,但是使用宿主机网络将来DNS解析策略会直接使用宿主机的解析
  • 如果还想要继续使用K8S内部的svc名称解析,则需要将默认的 ClusterFirst 的DNS解析策略修改为 ClusterFirstWithHostNet
    • ClusterFirst:默认策略,Pod 的 DNS 查询会优先使用 K8S 集群内部的 DNS 解析服务(通常是 CoreDNS 或 kube-dns
    • ClusterFirstWithHostNet:强制使用K8S集群的 DNS 解析,即便 Pod 使用主机网络模式
  • 建议将Deployment类型改为 DaemonSet 类型,可以确保在各个节点部署一个Pod,也可以修改 nodeSelector 字段让其调度到指定节点
  • 如果仅有一个ingress controller,可以考虑将 ingressClassResource.default 设置为true,表示让其成为默认的ingress controller

方法一:使用第三方镜像

sed -i '/registry:/s#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com#g' ingress-nginx/values.yaml
sed -i 's#ingress-nginx/controller#yinzhengjie-k8s/ingress-nginx#' ingress-nginx/values.yaml 
sed -i 's#ingress-nginx/kube-webhook-certgen#yinzhengjie-k8s/ingress-nginx#' ingress-nginx/values.yaml
sed -i 's#v1.3.0#kube-webhook-certgen-v1.3.0#' ingress-nginx/values.yaml
sed -ri '/digest:/s@^@#@' ingress-nginx/values.yamlsed -i '/hostNetwork:/s#false#true#' ingress-nginx/values.yaml
sed -i  '/dnsPolicy/s#ClusterFirst#ClusterFirstWithHostNet#' ingress-nginx/values.yaml
sed -i '/kind/s#Deployment#DaemonSet#' ingress-nginx/values.yaml 
sed -i '/default:/s#false#true#'  ingress-nginx/values.yaml

方法二:用FQ的节点拉取官方镜像,然后导出为压缩包。然后在每一个节点手动导入,然后就可以少执行几条命令。(本次操作用的这一种)

sed -i '/hostNetwork:/s#false#true#' ingress-nginx/values.yaml
sed -i  '/dnsPolicy/s#ClusterFirst#ClusterFirstWithHostNet#' ingress-nginx/values.yaml
sed -i '/kind/s#Deployment#DaemonSet#' ingress-nginx/values.yaml 
sed -i '/default:/s#false#true#'  ingress-nginx/values.yaml

如果使用改名后的镜像,须删除chart包 value 的所有 digest 信息(注释掉也可以),否则会比对校验值失败,导致本地导入的镜像无效

在这里插入图片描述

5.创建Ingress专用的名称空间,使用helm一键安装Ingress

kubectl create ns zhiyong18-ingress
helm install luckyboy-ingress-nginx ingress-nginx -n zhiyong18-ingress NAME: luckyboy-ingress-nginx
LAST DEPLOYED: Wed Aug 14 10:07:47 2024
NAMESPACE: zhiyong18-ingress
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace zhiyong18-ingress get services -o wide -w luckyboy-ingress-nginx-controller'An example Ingress that makes use of the controller:apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: examplenamespace: foospec:ingressClassName: nginxrules:- host: www.example.comhttp:paths:- pathType: Prefixbackend:service:name: exampleServiceport:number: 80path: /# This section is only required if TLS is to be enabled for the Ingresstls:- hosts:- www.example.comsecretName: example-tlsIf TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:apiVersion: v1kind: Secretmetadata:name: example-tlsnamespace: foodata:tls.crt: <base64 encoded cert>tls.key: <base64 encoded key>type: kubernetes.io/tls

6.查看创建的创建的资源,daemonset控制器管理的2个pod(因为master有污点,不然就是3个pod)

[root@master23106-ingress]# kubectl -n zhiyong18-ingress get all
NAME                                          READY   STATUS    RESTARTS   AGE
pod/luckyboy-ingress-nginx-controller-mn5tn   1/1     Running   0          94s
pod/luckyboy-ingress-nginx-controller-stcf9   1/1     Running   0          94sNAME                                                  TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                    AGE
service/luckyboy-ingress-nginx-controller             LoadBalancer   10.200.43.110    <pending>     80:8856/TCP,443:9000/TCP   94s
service/luckyboy-ingress-nginx-controller-admission   ClusterIP      10.200.122.168   <none>        443/TCP                    94sNAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/luckyboy-ingress-nginx-controller   2         2         2       2            2           kubernetes.io/os=linux   94s

7.测试访问。404为正常现象

http://10.0.0.232/
http://10.0.0.233

在这里插入图片描述

03 禁用admissionWebhooks功能

1.修改配置文件,禁用admissionWebhooks功能。如果此步骤不操作,后续自定义ingress规则会出现如下的报错信息:

Error from server (InternalError): error when creating “01-ingress-demo.yaml”: Internal error occurred: failed calling webhook “validate.nginx.ingress.kubernetes.io”: failed to call webhook: Post “https://luckyboy-ingress-nginx-controller-admission.zhiyong18-ingress.svc:443/networking/v1/ingresses?timeout=10s”: x509: certificate is not valid for any names, but wanted to match linux92-ingress-nginx-controller-admission.oldboyedu-ingress.svc

vim ingress-nginx/values.yamlcontroller:...admissionWebhooks:...# 大概在596行左右。# enabled: trueenabled: falseresses?timeout=10s": x509: certificate is not valid for any names, but wanted to match linux92-ingress-nginx-controller-admission.oldboyedu-ingress.svc```yaml
vim ingress-nginx/values.yamlcontroller:...admissionWebhooks:...# 大概在596行左右。# enabled: trueenabled: false

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

无公网IP实现飞牛云手机APP远程连接飞牛云NAS管理传输文件

文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 随着科技的不断发展&#xff0c;远程访问和控制内网设备的需求日益增加。在众多内网设备中&#xff0c;网络附加存储&#xff08;NAS&…

第一篇:k8s架构与组件详解

没有那么多花里胡哨&#xff0c;直接进行一个K8s架构与组件的学习。 一、K8s架构 在Master通常上包括 kube-apiserver、etcd 存储、kube-controller-manager、cloud-controller-manager、kube-scheduler 和用于 K8s 服务的 DNS 服务器&#xff08;插件&#xff09;。这些对集群…

Leetcode—3001. 捕获黑皇后需要的最少移动次数【中等】

2024每日刷题&#xff08;201&#xff09; Leetcode—3001. 捕获黑皇后需要的最少移动次数 C实现代码 class Solution { public:int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {// 车跟皇后在同一行if(a e) {// 象是否挡在车和皇后中间return (…

visual studio2019开发过程中遇到的问题和有帮助的插件

文章目录 1. 注释中有中文导致报错2. 打开一个vs2013或者vs2010等老的项目兼容性3. LNK2019 unresolved external symbol main referenced in function __tmainCRTStartup4. image watch插件/扩展使用 1. 注释中有中文导致报错 C4819 The file contains a character that cann…

如何在PortainerCE中创建NextCloud网盘并随时随地管理文件

文章目录 前言1. 在PortainerCE中创建NextCloud容器2. 公网远程访问本地NextCloud容器2.1 内网穿透工具安装3.2 创建远程连接公网地址 3. 固定NextCloud私有云盘公网地址 前言 大家好&#xff01;今天我们要来聊聊如何在本地使用Portainer CE的可视化界面创建一个属于你自己的…

各种常见生信格式文件的随机抽样

样本检验、随机生成数据、模拟用等&#xff0c;都需要从现有测序数据中随机抽样出一小部分数据来&#xff0c;按照自己需求。 0&#xff0c;最经典的方式&#xff1a; 使用awk等&#xff0c;只要了解各种数据格式具体的行列组成&#xff08;一般是headerrecord&#xff09;&a…

代码随想录算法训练营day31|56合并区间,738单调递增的数字,968监控二叉树

星海横流&#xff0c;岁月成碑。转眼之间&#xff0c;算法训练营的进程已经过半&#xff0c;而我也在日复一日的坚持中&#xff0c;找寻到了对算法的热爱。 56 合并区间 这题和前面的射爆气球等题目比较像&#xff0c;难度也不大&#xff0c;都是先按第一个元素排序后&#x…

基于VTX356语音识别合成芯片的智能语音交互闹钟方案

一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力&#xff0c;结合蓝牙功能、APP或小程序&#xff0c;打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外&#xff0c;还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…

fpga vga转hdmi 8位转十位 encoder模块

case语句写法 理解 //为了完成 RGB 图像数据 8b 转 10b 的编码 //此为xilinx 官方提供的编码模块代码 // TMDS 通过逻辑算法将 8 位字符数据通过编码转换为 10 位字符数据&#xff0c;前 8 位数据由原始信号经运算后 // 获得&#xff0c;第 9 位表示运算的方式&#xff0c;1 表…

北斗系统增强技术和应用

原创 风一样的航哥 航哥小站 2024年12月05日 08:00 江苏 一、北斗系统增强技术的定义 北斗系统增强技术是指通过一系列技术手段&#xff0c;提高北斗卫星导航系统的定位精度、可靠性和服务范围的技术。它主要包括地基增强技术、星基增强技术和低轨卫星导航增强技术等。 二、北…

大语言模型应用开发框架LangChain

大语言模型应用开发框架LangChain 一、LangChain项目介绍1、简介2、LangChain的价值3、实战演练 二、LangChain提示词大语言模型应用1、简介1.1、提示词模板化的优点1.2、提示词模板LLM 的应用1.3、Prompt 2、应用实战2.1、PromptTemplate LLM2.2、PromptTemplate LLM Outpu…

【C++|Linux|计网】构建Boost站内搜索引擎的技术实践与探索

目录 1、项目的相关背景 2.搜索引擎的相关宏观原理 3.搜索引擎技术栈和项目环境 4.正排索引vs倒排索引-搜索引擎具体原理 5.编写数据去标签与数据清洗的模块 Parser 5.1.去标签 目标&#xff1a; 5.2.代码的整体框架&#xff1a; EnumFile函数的实现&#xff1a; Enu…

产品批量分类设置——未来之窗行业应用跨平台架构

一、批量统计分类 提高效率 节省时间&#xff1a;当商品数量庞大时&#xff0c;手动逐个修改商品分类是一项极其耗时的任务。例如&#xff0c;一个电商平台有数千种商品&#xff0c;如果手动操作&#xff0c;可能需要花费数天甚至数周的时间来完成分类转移。而批量设置功能可以…

Linux 系统上配置 Go 环境

在 Linux 系统上配置 Go 环境比较简单&#xff0c;下面是详细的步骤&#xff0c;适用于大多数 Linux 发行版&#xff08;如 Ubuntu、CentOS、Debian 等&#xff09;&#xff1a; ### 1. **更新软件包列表** 在安装 Go 之前&#xff0c;首先确保您的软件包列表是最新的。使用以下…

异步FIFO的实现

异步FIFO是verilog中常见的设计&#xff0c;通常用于不同时钟域下的数据同步。 在实现 FIFO 时&#xff0c;无论是同步 FIFO 还是异步 FIFO &#xff0c;通常会通过双口 RAM &#xff08; Dual Port RAM &#xff09;并添加一些必要的逻辑来实现。双口 RAM的设计如下&#xff1…

专题三:穷举vs暴搜vs深搜vs回溯vs剪枝

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是穷举vs暴搜vs深搜vs回溯vs剪枝&#xff0c;并且掌握其算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不…

停更期李子柒品牌线上破亿,电商内容营销策略怎样重塑升级?

11月13日&#xff0c;李子柒在接受新华网记者的专访时被问到了“未来的商业化考虑”。她表示&#xff1a;“肯定会有这方面的考虑&#xff0c;只是目前还没有特别明确的规划。我就想继续做我自己喜欢的事情&#xff0c;如果这件事情能够被认同&#xff0c;而且它是有价值的&…

2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序

2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分&#xff0c;学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展&#xff0c;校园内已经普遍使用了智能水表&#xff0c;从而可以…

【SpringBoot】使用IDEA创建SpringBoot项目

1、使用SpringBoot脚手架创建 我们使用SpringBoot的脚手架Spring Initializr创建&#xff0c;如图所示&#xff1a; 2、选择SpringBoot版本 最开始做项目时候&#xff0c;组长说创建一个 springboot 2.5.4 的项目&#xff0c;mysql使用 5.6.X &#xff0c;maven使用是3.6.X…

MFC实现全屏功能

之前全屏都是参考&#xff1a; MFC单文档&#xff08;SDI&#xff09;全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级&#xff0c;MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类&#xff1a; CFullScreenImpl Class managing full-screen mod…