K8s学习七(服务发现_2)

Ingress

  • Service 主要用于集群内部的通信和负载均衡,而 Ingress 则是用于将服务暴露到集群外部,并提供灵活的 HTTP 路由规则。在实际应用中,它们通常结合使用,Service 提供内部通信和负载均衡,Ingress 提供外部访问和路由。
基本概述与传统的对比
  • nginx是ingress的实现之一,ingress是一个抽象的概念,也就是,可以不仅仅实现nginx,需要安装ingress-nginx

  • 下图为对比图:
    在这里插入图片描述

安装ingress-nginx
1.先安装helm,下载二进制文件
https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz2.解压(tar -zxvf helm-v3.10.2-linux-amd64.tar.gz)
tar: 用于处理 tar 文件的命令。
-zxvf: 参数用于指定解压缩的选项,具体含义如下:
z: 表示要使用 gzip 解压缩。
x: 表示解压缩。
v: 表示详细输出,显示解压缩的过程。
f: 后面紧跟着要解压的文件名。
3.将解压目录下的 helm 程序移动到 usr/local/bin/helm
进入linux-amd64,然后复制过去  cp helm /usr/local/bin/
4.下载ingress包
# 添加仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
这个命令的目的是将指定的 URL https://kubernetes.github.io/ingress-nginx 添加到你的 Helm 仓库列表中,并为该仓库取名为 ingress-nginx。
Helm 是一个用于简化和管理 Kubernetes 应用部署的工具。它允许你定义、安装和升级 Kubernetes 应用,称为 charts。Charts 是预定义的 Kubernetes 资源的打包方式,包括 Deployment、Service、ConfigMap 等,使得应用的部署和管理变得更加方便。
# 查看仓库列表
helm repo list# 搜索 ingress-nginx
helm search repo ingress-nginx
执行  helm search repo ingress-nginx 的命令将在你已添加的所有 Helm 仓库中搜索包含关键字 "ingress-nginx" 的 Charts。这使你能够快速找到与 Ingress 相关的 Charts,并可以通过 Helm 安装它们到你的 Kubernetes 集群中。# 下载安装包
helm pull ingress-nginx/ingress-nginx# 解压缩
tar -xf ingress-nginx-4.9.1.tgz 5.配置参数# 解压后,进入解压完成的目录
cd ingress-nginx# 修改 values.yaml
镜像地址:修改为国内镜像
搜索image,找到对应的地方换
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/nginx-ingress-controller
image: google_containers/kube-webhook-certgen
tag: v1.3.0hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet修改部署配置的 kind: DaemonSet
nodeSelector:ingress: "true" # 增加选择器,如果 node 上有 ingress=true 就部署
将 admissionWebhooks.enabled 修改为 falseservice 中的 type 由 LoadBalancer 修改为 ClusterIP,如果服务器是云平台才用 LoadBalancer6.安装ingress
# 为 ingress 专门创建一个 namespace
kubectl create ns ingress-nginx# 为需要部署 ingress 的节点上加标签
kubectl label node k8s-node1 ingress=true# 安装 ingress-nginx
helm install ingress-nginx  -n ingress-nginx .
  • 注意:我这里遇见了一些问题,就是
root@master:~/k8s/helm/ingress-nginx# helm install ingress-nginx  -n ingress-nginx .
Error: template: ingress-nginx/templates/controller-role.yaml:48:9: executing "ingress-nginx/templates/controller-role.yaml" at <ne (index .Values.controller.extraArgs "update-status") "false">: error calling ne: invalid type for comparison
# 这里说我的values.yaml文件里面controller.extraArgs "update-status"这个参数没有,于是我在values.yaml中加上了,如下图

在这里插入图片描述

  • 然后好像就成功了
    在这里插入图片描述

  • 查看也有
    在这里插入图片描述

  • 另一个注意的点是,好像无法部署到master上,因为有污点,后面再说。

路径匹配和虚拟主机匹配
  • 配置文件如下:

apiVersion: networking.k8s.io/v1
kind: Ingress # 资源类型为 Ingress
metadata:name: wolfcode-nginx-ingressannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/rewrite-target: / #也可以使用正则
spec:rules: # ingress 规则配置,可以配置多个- host: k8s.wolfcode.cn # 域名配置,可以使用通配符 *http:paths: # 相当于 nginx 的 location 配置,可以配置多个- pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配,URL需要与path完全匹配上,
且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配backend:service:name: nginx-svc # 代理到哪个 serviceport:number: 80 # service 的端口path: /api # 等价于 nginx 中的 location 的路径前缀匹配,这里也可以用正则
  • 然后创建
# 查看运行的node
kubectl get po -n ingress-nginx -o wide# 本质就是在这个node上开了个nginx服务
netstat -ntlp
  • 这个是没有符合前缀匹配,因为ingress本身就是nginx,所以在ingress这个地方就报错了,都没有到service,即nginx这个service。
    在这里插入图片描述

  • 这里是符合前缀规则,找到了是nginx的service,也符合版本号,这里是加了nginx.ingress.kubernetes.io/rewrite-target: /的重写策略,要不然也会报错。因为是前面的nginx-svc服务,而这个服务的工作路径是/usr/share/nginx/html,所以访问http://k8s.wolfcode.cn/api时会找到/usr/share/nginx/html/api,而这个html目录里面没有api,所以会报错,于是要重写,但是也会有一定的问题,比如http://k8s.wolfcode.cn/api?i=1,这里也会直接到nginx-svc服务的根目录/处,参数也没了
    在这里插入图片描述

  • 多域名配置时:

apiVersion: networking.k8s.io/v1
kind: Ingress # 资源类型为 Ingress
metadata:name: wolfcode-nginx-ingressannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules: # ingress 规则配置,可以配置多个- host: k8s.wolfcode.cn # 域名配置,可以使用通配符 *http:paths: # 相当于 nginx 的 location 配置,可以配置多个- pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配backend:service: name: nginx-svc # 代理到哪个 serviceport: number: 80 # service 的端口path: /api # 等价于 nginx 中的 location 的路径前缀匹配- pathType: Exec # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配>,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配backend:service:name: nginx-svc # 代理到哪个 serviceport:number: 80 # service 的端口path: /- host: api.wolfcode.cn # 域名配置,可以使用通配符 *http:paths: # 相当于 nginx 的 location 配置,可以配置多个- pathType: Prefix # 路径类型,按照路径类型进行匹配 ImplementationSpecific 需要指定 IngressClass,具体匹配规则以 IngressClass 中的规则为准。Exact:精确匹配>,URL需要与path完全匹配上,且区分大小写的。Prefix:以 / 作为分隔符来进行前缀匹配backend:service:name: nginx-svc # 代理到哪个 serviceport:number: 80 # service 的端口path: /# 也就是在基础配置上,在是列表的地方,可以多加几份就行了

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

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

相关文章

一款轻量、干净的 Laravel 后台管理框架

系统简介 ModStart 是一个基于 Laravel 的模块化快速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 系统特性 …

产品经理和项目经理的区别

1. 前言 本文深入探讨了产品经理与项目经理在职责、关注点以及所需技能方面的显著区别。产品经理主要负责产品的规划、设计和市场定位,强调对用户需求的深刻理解和产品创新的推动;而项目经理则侧重于项目的执行、进度控制和资源管理,确保项目按时、按质、按预算完成。两者在…

redis的简单操作

redis中string的操作 安装 下载可视化软件&#xff1a;https://gitee.com/qishibo/AnotherRedisDesktopManager/releases。 Mac安装redis&#xff1a; brew install redisWindows安装redis: 安装包下载地址&#xff1a;https://github.com/tporadowski/redis/releases 1.…

【JavaWeb】Day38.MySQL概述——数据库设计-DQL

数据库设计——DQL 介绍 DQL英文全称是Data Query Language(数据查询语言)&#xff0c;用来查询数据库表中的记录。 查询关键字&#xff1a;SELECT 查询操作是所有SQL语句当中最为常见&#xff0c;也是最为重要的操作。在一个正常的业务系统中&#xff0c;查询操作的使用频次…

最长上升子序列(线性dp)-java

主要是解决最长上升子序列问题&#xff0c;推出状态转移方程。 文章目录 前言 一、最长上升子序列问题 二、算法思路 1.最长上升子序列思路 三、代码如下 1.代码如下&#xff08;示例&#xff09;&#xff1a; 2.读入数据 3.代码运行结果 总结 前言 主要是解决最长上升子序列问…

【深入理解Java IO流0x03】解读Java最基本的IO流之字节流InputStream、OutputStream

在开始前&#xff0c;我们再来回顾一下这张图&#xff1a; 本篇博客主要为大家讲解字节流。 我们都知道&#xff0c;一切文件&#xff08;文本、视频、图片&#xff09;的数据都是以二进制的形式存储的&#xff0c;传输时也是。所以&#xff0c;字节流可以传输任意类型的文件数…

【SERVERLESS】腾讯云上实操

我们先来看看 云计算的 发展 流程 虚拟化的云计算方式&#xff1a; IaaS基础设施即服务【邮箱、微信、支付宝等】PaaS平台即服务【数据库服务、大数据计算平台】Saas软件即服务【云服务器、cpu、硬盘】 早期我们可能只听过上面这三个词 ,但是随着云计算的发展&#xff0c;新…

HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService

HIS系统是什么&#xff1f;一套前后端分离云HIS系统源码 接口技术RESTful API WebSocket WebService 医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等&…

javaWeb车辆管理系统设计与实现

摘 要 随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得以普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理分配使用问题。 企业车辆管理系统运用现代化的计算机管理手段&#xff0c;不但可以对车辆的使用进行合理的管理&#xff0c;…

Pentaho Data Integration(kettle)下载

Kettle已然是改了名了&#xff0c;新名字叫Pentaho Data Integration 网上常见的下载地址已经失效&#xff0c;被提示找不到Date Integration目录&#xff1a; https://sourceforge.net/projects/pentaho/files/Data%20Integration/ 点击页面上的pdf&#xff0c;下载文件后打…

JavaScript的函数基础

目录 前言: 1.函数是什么: 2.函数的基本使用: 2.1 定义函数: 2.2. 调用函数 2.3函数命名规范: 2.3.1由数字、字母、下划线组成&#xff1a; 2.3.2区分大小写&#xff1a; 2.3.3不能数字开头&#xff0c;也不能是关键字&#xff1a; 2.3.4自定义函数纯小写&#xff1a…

YOLOV8注意力改进方法:Deformable Attention Transformer(附改进代码)

原论文地址&#xff1a;原论文下载地址 论文摘要&#xff1a;Transformer最近在各种视觉任务上表现出了优异的性能。对于巨大的甚至是全局性的感受野赋予Transformer模型比CNN模型更高的表现力。然而&#xff0c;仅仅扩大感受野也会引起一些担忧。一方面&#xff0c;在ViT中使…