k8s API资源对象ingress

news2024/9/20 23:33:06

有了Service之后,我们可以访问这个Service的IP(clusterIP)来请求对应的Pod,但是这只能是在集群内部访问。

要想让外部用户访问此资源,可以使用NodePort,即在node节点上暴漏一个端口出来,但是这个非常不灵活。为了解决此问题,K8s引入了一个新的API资源对象Ingress,它是一个七层的负载均衡器,类似于Nginx。
在这里插入图片描述三个概念:Ingress、Ingress Controller、IngressClass

  • Ingress用来定义具体的路由规则,要实现什么样的访问效果;
  • Ingress Controller是实现Ingress定义具体规则的工具或者叫做服务,在K8s里就是具体的Pod;
  • IngressClass是介于Ingress和Ingress Controller之间的一个协调者,它存在的意义在于,当有多个Ingress Controller时,可以让Ingress和Ingress Controller彼此独立,不直接关联,而是通过IngressClass实现关联。

Ingress YAML示例:
vi mying.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mying  ##ingress名字
  
spec:
  ingressClassName: myingc  ##定义关联的IngressClass
  
  rules:  ##定义具体的规则
  - host: http://rocky_k8s.com/  ##访问的目标域名
    http:
      paths:
      - path: /
        pathType: Exact
        backend:  ##定义后端的service对象
          service:
            name: ngx-svc
            port:
              number: 80

查看ingress

kubectl apply -f mying.yaml

kubectl get ing
kubectl describe ing mying

ingressclass yaml示例:
vi myingc.yaml

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: myingc
  
spec:
  controller: nginx.org/ingress-controller ##定义要使用哪个controller

查看ingressclass

kubectl apply -f myingc.yaml

kubectl get ingressclass

安装ingress-controller(使用Nginx官方提供的 https://github.com/nginxinc/kubernetes-ingress)

首先做一下前置工作

curl -O 'https://gitee.com/aminglinux/linux_study/raw/master/k8s/ingress.tar.gz'
tar zxf ingress.tar.gz
cd ingress
./setup.sh  ##说明,执行这个脚本会部署几个ingress相关资源,包括namespace、configmap、secrect等

vi ingress-controller.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ngx-ing
  namespace: nginx-ingress

spec:
  replicas: 1
  selector:
    matchLabels:
      app: ngx-ing

  template:
    metadata:
      labels:
        app: ngx-ing
     #annotations:
       #prometheus.io/scrape: "true"
       #prometheus.io/port: "9113"
       #prometheus.io/scheme: http
    spec:
      serviceAccountName: nginx-ingress
      containers:
      - image: nginx/nginx-ingress:2.2-alpine
        imagePullPolicy: IfNotPresent
        name: ngx-ing
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: readiness-port
          containerPort: 8081
        - name: prometheus
          containerPort: 9113
        readinessProbe:
          httpGet:
            path: /nginx-ready
            port: readiness-port
          periodSeconds: 1
        securityContext:
          allowPrivilegeEscalation: true
          runAsUser: 101 #nginx
          capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        args:
          - -ingress-class=myingc
          - -health-status
          - -ready-status
          - -nginx-status

          - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
应用、查看pod、deployment
kubectl apply -f ingress-controller.yaml

kubectl get pods -n nginx-ingress
kubectl get deploy -n nginx-ingress

将ingress对应的pod端口映射到master上临时测试

kubectl port-forward -n nginx-ingress ngx-ing-547d6575c7-fhdtt 8888:80 &
# pod名称不固定,实验时注意

测试前,可以修改ng-deploy对应的两个pod里的/usr/share/nginx/html/index.html文件内容,用于区分两个pod。

测试

curl -x127.0.0.1:8888 aminglinux.com
或者:
curl -H 'Host:rocky_k8s.com'http://127.0.0.1:8888

上面对ingress做端口映射,然后通过其中一个节点的IP来访问ingress只是一种临时方案。那么正常如何做呢?有三种常用的方案:
1)Deployment+LoadBalancer模式的Service
如果要把ingress部署在公有云,那用这种方式比较合适。用Deployment部署ingress-controller,创建一个type为LoadBalancer的service关联这组pod。
大部分公有云,都会为LoadBalancer的service自动创建一个负载均衡器,通常还绑定了公网地址。
只要把域名解析指向该地址,就实现了集群服务的对外暴露。

2)Deployment+NodePort模式的Service
同样用deployment模式部署ingress-controller,并创建对应的服务,但是type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。
由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景。
NodePort方式暴露ingress虽然简单方便,但是NodePort多了一层NAT,在请求量级很大时可能对性能会有一定影响。

3)DaemonSet+HostNetwork+nodeSelector
用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通(如,上面的临时方案kubectl port-forward),直接使用宿主机的80/433端口就能访问服务。
这时,ingress-controller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。该方式整个请求链路最简单,性能相对NodePort模式更好。
缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod。比较适合大并发的生产环境使用。

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

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

相关文章

UNITY UI简易反向遮罩

附带示例资源文件:https://download.csdn.net/download/qq_55895529/89726994?spm1001.2014.3001.5503 大致效果: 实现思路:通过ui shader的模板测试功能实现 通过让想要被突出显示的物体优先渲染并写入模板值,而后再让黑色遮罩渲染并判断模板值进行渲…

机试算法模拟题 服务中心选址

题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。 给你一个数组positions,其中positions[i] [left, ri…

单项链表的原地反转

逻辑图如下所示: 只需要将需要反转的节点放到头节点位置即可, 使用两个指针一个指针指向需要反转的节点,另一个指针指向需要反转的指针的前驱节点(其实也就是元链表的头节点) 操作过程: 1 2 3 4 5 2 1 …

零基础国产GD32单片机编程入门(十五)CAN通讯详解及实战含源码

文章目录 一.概要二.CAN网络基本组成三.GD32单片机CAN结构与特点1.GD32F103单片机CAN基本结构图2.GD32F103单片机CAN基本特点 四.CAN协议帧格式五.GD32F103C8T6的CAN通讯波特率六.GDF103C8T6的CAN接收过滤器配置七.配置一个CAN通讯数据收发例程八.工程源代码下载九.小结 一.概要…

机器之心 | 挑战Transformer的Mamba是什么来头?作者博士论文理清SSM进化路径

本文来源公众号“机器之心”,仅用于学术分享,侵权删,干货满满。 原文链接:挑战Transformer的Mamba是什么来头?作者博士论文理清SSM进化路径 对 SSM 感兴趣的研究者不妨读一下这篇博士论文。 在大模型领域,…

仕考网:2025年公务员国考备考技巧

公务员考试掌握好备考技巧非常重要,尤其是国考这种竞争比较激烈的考试,仕考网为大家分享一些备考技巧,希望能对大家有所帮助。 1. 在提升行测分数时,可以采用大量的练习题、整理题以及关注往年核心考点的方式。无论处于准备过程的…

JsonPath全英文文档学习

JsonPath全英文文档学习 1、文档地址2、引入依赖3、浏览翻译问题修复4、文档学习4.1、Operator4.2、Functions4.3、Filter 运算符4.4、json示例 5、实战5.1、获取json数组下的多个元素5.2、获取json数组下的多个元素(循环遍历时无元素自动占位)5.3、获取…

面了阿里大模型算法岗,出门秒挂。。。

最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些…

基于springboot+enum配置化实践

前言 Springboot/Springcloud作为微服务开发的经典框架,我想任何一个developer不会排斥。同时,市场越来越多的业务开发均围绕Springboot/Springcloud而展开,也让它成为Java开发的“硬通货”。 基于Spring,诸多低代码的平台的活跃…

基于SpringBoot的校园跑腿系统+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

spring项目整合log4j2日志框架(含log4j无法打印出日志的情况,含解决办法)

Spring整合Log4j2的整体流程 1&#xff09;导入log4j-core依赖 <!--导入日志框架--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version></dependenc…

Linux中的gdb调试器

目录 一、程序的两种模式 二、gdb的常用调试命令 一、程序的两种模式 程序通常有两种模式&#xff0c;分别是debug模式和release模式 debug模式可以调试&#xff0c;但是release模式不支持调试&#xff0c;因为debug模式添加了调试信息&#xff0c;因此debug的程序大小比rel…

[苍穹外卖]-05Redis快速入门

Redis入门 Redis是一个基于内存的key-value结构数据库 基于内存存储, 读写性能高适合存储热点数据(热点商品,咨询,新闻)企业应用广泛中文官网: Redis中文网英文网: https://rsdis.io 下载安装: Redis安装包分为Windows版本和Linux版本, Redis的windows版属于绿色软件, 解压后…

sqlmap简介及安装

sqlmap简介及安装 sqlmap 介绍 sqlmap 是一个开源的渗透测试工具&#xff0c;可以用来进行自动化检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎&#xff0c;针对各种不同类型数据库的渗透测试的功能选项&#xff0c;包括获取…

【Hot100】LeetCode—198. 打家劫舍

目录 1- 思路动规五部曲 2- 实现⭐198. 打家劫舍——题解思路 3- ACM 实现 原题链接&#xff1a;198. 打家劫舍 1- 思路 动规五部曲 1- 定义 dp 数组 int[] dp new int[nums.length]dp[i] 代表考虑下标i 偷的最大金币数 2- 递推公式 当偷 i &#xff1a; dp[i-2] nums[i] 当…

Typora调整图片大小:两种方式zoom或width/height

目录 01 zoom方式02 width/height方式2.1 width方式 2.2 height方式 01 zoom方式 语法: <img src"your-image-url" style"zoom:your-zoom-integer"/> 示例&#xff1a;将图片(./image/market.jpg)调整为原图减少50%大小的命令为&#xff1a; …

[数据集][目标检测]肺炎检测数据集VOC+YOLO格式4983张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4983 标注数量(xml文件个数)&#xff1a;4983 标注数量(txt文件个数)&#xff1a;4983 标注…

github actions CICD简单使用案例

参考&#xff1a; https://developer.aliyun.com/article/1540773 https://github.com/ViggoZ/producthunt-daily-hot/blob/main/.github/workflows/generate_markdown.yml 1、创建github项目 目录&#xff1a; .github/workflows/fetch-news.yml actions执行yaml&#xff08;…

Linux 下 C/C++ 程序编译的过程

目录 一、GCC 工具链二、编译过程1、预处理2、编译3、汇编4、链接 本文将介绍如何将 C/C 语言编写的程序转换成为处理器能够执行的二进制代码的过程&#xff0c;包括四个步骤&#xff1a;预处理&#xff08;Preprocessing&#xff09;编译&#xff08;Compilation&#xff09;汇…

如何通过食堂采购小程序端降低成本,提升效率?

随着数字化管理工具的普及&#xff0c;越来越多的食堂正在引入小程序来优化采购流程&#xff0c;减少成本和提升效率。食堂采购小程序端通过技术手段实现了自动化、智能化的管理方式&#xff0c;为管理者提供了极大的便利。本文将探讨如何利用技术手段开发一个高效的食堂采购小…