Kubernetes:Ingress

news2025/1/2 0:27:32

文章目录

    • 1、安装 Ingress 控制器
    • 2、Ingress 扇出
    • 3、基于名称的虚拟托管
    • 4、Ingress TLS

Ingress 是一组路由规则,公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。

在这里插入图片描述

Ingress 控制器是一组 pod,负责通过负载均衡器来解析 Ingress 路由规则,将请求转发到相应的 服务。

1、安装 Ingress 控制器

安装 Igress 控制器,例如 Nginx ingress controller,这里以目前官网最新的 v1.5.1 版本为例,下载 deploy.yaml 配置文件(或直接拷贝到本地)。

修改配置文件

# 镜像地址修改为阿里云地址
# kind: Deployment
image: registry.aliyuncs.com/google_containers/nginx-ingress-controller:v1.5.1

# kind: Job
image: registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20220916-gd32f8c343

设置默认 ingress controller

# 应用资源
kubectl apply -f deploy.yaml
# 编辑 nginx ingress controller 的 ingressclass
kubectl edit -n ingress-nginx ingressclasses.networking.k8s.io nginx

# 在 annotations 字段下方添加注解,设置为默认控制器
annotations: 
  ingressclass.kubernetes.io/is-default-class: "true"

查看 Ingress 控制器

kubectl exec -n ingress-nginx -it pod/ingress-nginx-controller-6867494779-2k7ff -- bash
bash-5.1$ cat nginx.conf

2、Ingress 扇出

一个扇出(fanout)配置根据请求的 HTTP URI 将来自同一 IP 地址的流量路由到多个 Service。

在这里插入图片描述

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: "/$1"
  name: fanout-ingress
spec:
  rules:
    - host: www.nick.com
      http:
        # 路径列表
        paths:
        # 路径
        - path: /svc2/(.*)$
          # 路径类型
          pathType: Prefix
          # 指定后端
          backend:
            service:
              name: mysvc2
              port:
                number: 8082
        - path: /svc3/(.*)$
          pathType: Prefix
          backend:
            service:
              name: mysvc3
              port:
                number: 8083

测试

kubectl apply -f fanout-ingress.yaml
kubectl get -f fanout-ingress.yaml
kubectl get -n ingress-nginx svc

# 添加域名映射
sudo vim /etc/hosts
10.102.138.220 www.example.com

curl http://www.nick.com/svc2/print/env
curl http://www.nick.com/svc3/print/env

3、基于名称的虚拟托管

基于名称的虚拟主机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上。

在这里插入图片描述

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hostname-ingress
spec:
  rules:
  - host: svc1.nick.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: mysvc1
            port:
              number: 8081
  - host: svc2.nick.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: mysvc2
            port:
              number: 8082

测试

kubectl apply -f hostname-ingress.yaml
kubectl get -f hostname-ingress.yaml
kubectl describe -f hostname-ingress.yaml

# 添加域名映射
sudo vim /etc/hosts
10.102.138.220 svc1.nick.com
10.102.138.220 svc2.nick.com


# 访问测试
curl http://svc1.nick.com/print/env
curl http://svc2.nick.com/print/env

4、Ingress TLS

自签证书

# 创建公钥和相对应的私钥
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/fanouttls.key -out /tmp/fanouttls.crt -subj "/CN=https-www.nick.com/O=https-www.nick.com"

创建 secret

# 创建 secret
kubectl create secret tls fanout-ingress-tls --cert=/tmp/fanouttls.crt --key=/tmp/fanouttls.key
# 查看secret
kubectl get secrets fanout-ingress-tls -o yaml

新建 Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: "/$1"
  name: fanout-ingress
spec:
  tls:
  - hosts:
    - https-www.nick.com
    secretName: fanout-ingress-tls
  rules:
    - host: https-www.nick.com
      http:
        paths:
        - path: /svc2/(.*)$
          pathType: Prefix
          backend:
            service:
              name: mysvc2
              port:
                number: 8082
        - path: /svc3/(.*)$
          pathType: Prefix
          backend:
            service:
              name: mysvc3
              port:
                number: 8083

测试:

# 添加域名映射
sudo vim /etc/hosts

# 访问
curl https://https-www.nick.com/svc2/print/env --cacert /tmp/fanouttls.crt
curl https://https-www.nick.com/svc3/print/env --cacert /tmp/fanouttls.crt

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

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

相关文章

序列到序列学习(seq2seq,BLEU)

根据“编码器-解码器”架构的设计, 我们可以使用两个循环神经网络来设计一个序列到序列学习的模型。 在实现编码器和解码器时,我们可以使用多层循环神经网络。 我们可以使用遮蔽来过滤不相关的计算,例如在计算损失时。 在“编码器&#xf…

crackme01——Acid_burn

最近对逆向稍微有点兴趣,自学了一点。写这个文章主要用于记录学习的过程。 首先看一下这个程序,其实就是个简单的比对程序,主界面按左侧按钮进入Name Serial界面,点击【Check it Baby】,则弹出窗口【Sorry, The seria…

[Java]JDBC学习笔记(尚硅谷康师傅JDBC)

文章目录🥽 视频链接及资源下载🥽 JDBC简介🥽 JDBC程序访问数据库步骤🥽 获取数据库连接🌊 导入jar包🌊 Driver 接口🌊 JDBC URL🌊 方式1:🌊 方式2&#xff1…

educoder数据结构与算法 线性表 第2关:实现一个链接存储的线性表

本文已收录于专栏 🌲《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》🌲 目录 本文已收录于专栏 🌲《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》🌲 🍐任务描述🍐 🍐相关知识…

Java基础学习笔记(九)—— 常用API(2)

常用API1 Math类2 system类3 Object类3.1 概述3.2 常用方法3.3 常见面试题4 Objects类5 BigDecimal类5.1 构造方法5.2 常用方法6 时间日期类6.1 Date类6.2 SimpleDateFormat类6.3 JDK8新增日期类1 Math类 Math 包含执行基本数字运算的方法 Math中方法的调用方式:M…

Markdown 使用语法(详细)

想要学习Markdown,这篇文章就够了。 Markdow简介 Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML&…

IEEE期刊投稿流程

一、注册过程 1.1、确定期刊。 首先可以通过IEEE搜索需要投稿的期刊(以TMC为例),然后点击Submit Manuscript ,进入ScholarOne主页 1.2、账号注册。 进入到ScholarOne之后,若没有注册过需要先注册一个账号。 1.3、创建账户。 点击Create an Account&a…

【LeetCode每日一题】【2023/1/2】1801. 积压订单中的订单总数

文章目录1801. 积压订单中的订单总数方法1:模拟优先队列part1priority_queue的使用part2求余代码1801. 积压订单中的订单总数 LeetCode: 1801. 积压订单中的订单总数 中等\color{#FFB800}{中等}中等 给你一个二维整数数组 orders ,其中每个 orders[i] …

基于springboot+Vue学生宿舍管理系统(程序+数据库+文档+代码解读)

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

使用Cramer-Rao和Athley边界分析到达角阵列的质量(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 此代码用于使用Cramer-Rao和Athley边界分析到达角阵列的质量。 📚2 运行结果 🎉3 参考文献 [1]王凯欣…

感谢、感恩与CSDN结缘的第1498天

导读:2023年1月1日,这是本人加入CSDN的1498天,还记得2018-11-26是注册加入CSDN的第一天,当时的初心就是单纯想作为一名普通的IT人,随着不断打拼职场岁月流逝,总想沉淀留下点东西,即使再平凡也总…

【数据集8】全球人口数据WorldPop详解

全球人口数据WorldPop WorldPop是由南安普顿大学在2013年10月发起的全球人口数据评估。与LandScan数据相比,这个数据涵盖的数据集的社会经济属性更多一些,比如包括了年龄性别结构、出生率、人口流动、航班联系等数据,可参见下图。 官网地址-…

网络信息安全-图像隐写与检测综述

任务目标: 本选题需要学习经典的图像信息隐藏算法,包括基于空域的隐写算法和数字水印算法。 接着你将使用某种编程语言实现这些算法,实现在图片中嵌入一些信息,例如字符串和一些 文件。除此之外,还需要尝试一些基础的…

MySQL8--通过角色管理权限

原文网址:MySQL8--通过角色管理权限_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL8如何通过角色管理权限。 角色是在MySQL8.0中引入的新功能。在MySQL中,角色是权限的集合,可以为角色添加或移除权限。用户可以被赋予角色,同时也…

洛普兰机械密封盛装亮相2023第11届济南生物发酵展

洛普兰机械密封与您相约2023第11届济南生物发酵展览会,3月30-4月1号山东国际会展中心,诚邀参会! 展位号:3号馆H32 2023生物发酵展将于3月30号山东国际会展中心(济南市槐荫区日照路1号)盛大召开&#xff0…

Spring(四):Bean作用域和生命周期

目录一、Bean作用域作用域1.1 Bean作用域简介1.2 作用域的定义1.3 Bean的6种作用域1.4 设置作用域二、Spring的执行流程和Bean的生命周期2.1 Spring的执行流程2.2 Bean的生命周期一、Bean作用域作用域 1.1 Bean作用域简介 现在有一个公共的Bean,A用户先使用到这个…

统计学中的Bootstrap方法(Bootstrap抽样)用来训练bagging算法,如果随机森林Random Forests

统计学中的Bootstrap方法(Bootstrap抽样)用来训练bagging算法,如果随机森林Random Forests 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对…

Java与Python常见语法对比及区别

这里写目录标题一、前记1.1为什么写这篇文章?1.2 本文的结构二、整体区别2.1 差异总结十句话2.2整体对比三、细节区别3.1数据类型3.2其他数据结构3.3 String的处理方法3.4数组3.5条件语句3.6循环语句3.7类和接口定义与调用四 其他技巧知识字节的换算Tips&#xff1a…

flutter项目编译问题汇总

1、kotlin compiler embeddable下载慢的解决办法 备注:可以使用https://developer.aliyun.com/mvn/search这个链接搜索并下载 2、运行Flutter项目一直卡在--Running Gradle task assembleDebug 解决方法: 第一步:修改flutter安装目录/pac…

校招前端一面经典react面试题(附答案)

React.forwardRef是什么?它有什么作用? React.forwardRef 会创建一个React组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。这种技术并不常见,但在以下两种场景中特别有用: 转发 refs 到 DOM …