当前位置: 首页 > news >正文

【Kubernetes】K8s 集群 Ingress 入口规则

Ingress 是管理从集群外部访问集群内部服务的入口规则(HTTP 和 HTTPS)的 API 对象,核心功能是将外部到达集群的 HTTP/HTTPS 请求,根据主机名(host)和路径(path)转发到不同的后端 Service,一起来看看如何使用吧!

1、概念

1.1、Ingress(资源)

  • 在 K8s 中创建的 YAML 文件,只是一份规则声明,定义 “当访问 a.example.com 时,将流量转发给 service-a” 之类的规则

1.2、Ingress Controller(控制器)

  • 这是规则的实际执行者,是一个独立的 Pod,负责监听集群中的 Ingress 资源变化,并根据规则配置底层的负载均衡器(如 Nginx、Envoy、Traefik 等)
  • 常见的 Ingress Controller 有Nginx Ingress Controller、Traefik、HAProxy Ingress、Istio Ingress Gateway 等
  • 必须先部署一个 Ingress Controller,创建的 Ingress 才能生效

2、示例

  • 下方使用 Nginx Ingress
  • 部署参考:https://blog.csdn.net/mm1234556/article/details/147892844

2.1、基于主机名路由

  • 需求: 通过不同的主机名访问不同的服务

  • frontend.local -> 前端,api.local -> 后端

  • 部署:kubectl apply -f ingress-simple-host.yaml

  • 通过 http://frontend.local 和 http://api.local 访问不同的服务

# ingress-simple-host.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: simple-host-ingressannotations:kubernetes.io/ingress.class: "nginx"
spec:rules:- host: frontend.localhttp:paths:- path: /pathType: Prefixbackend:service:name: frontend-serviceport:number: 80- host: api.localhttp:paths:- path: /pathType: Prefixbackend:service:name: backend-serviceport:number: 8080

2.2、基于路径路由

  • 需求: 使用同一个域名,根据 URL 路径将流量分发到不同的微服务
  • myapp.com/web -> 用户UI,myapp.com/api -> API网关,myapp.com/static -> 静态文件
  • 部署:kubectl apply -f ingress-path-based.yaml
# ingress-path-based.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: path-based-ingressannotations:kubernetes.io/ingress.class: "nginx"# 若需路径重写,可取消下方注释# nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: myapp.comhttp:paths:- path: /webpathType: Prefixbackend:service:name: web-ui-serviceport:number: 3000- path: /apipathType: Prefixbackend:service:name: api-gateway-serviceport:number: 8080- path: /staticpathType: Prefixbackend:service:name: static-file-serviceport:number: 80

2.3、基于主机名路由 TLS

  • 需求: 为 myapp.example.com 提供 HTTPS 服务,将所有流量转发到 my-web-service

  • 部署:kubectl apply -f ingress-tls-simple.yaml

  • 将域名 myapp.example.com 解析到 Ingress Controller 服务的外部 IP(若是云厂商的 LoadBalancer,会自动分配一个外部 IP)

  • 访问 https://myapp.example.com,浏览器会显示安全的 HTTPS 连接

# ingress-tls-simple.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: simple-tls-ingressannotations:kubernetes.io/ingress.class: "nginx"
spec:tls:- hosts:- myapp.example.com         # 指定需要使用 TLS 的域名secretName: my-tls-secret     # 指定存储证书的 Secretrules:- host: myapp.example.com       # 基于主机名的路由规则http:paths:- path: /pathType: Prefixbackend:service:name: my-web-service  # 后端服务名port:number: 80          # 后端服务端口

2.4、基于路径路由 TLS

  • 需求:使用 HTTPS,同一个域名下,根据 URL 路径将流量路由到不同的服务
  • 访问 www.myapp.com/web 进入前端 Web 界面
  • 访问 www.myapp.com/api 进入后端 API
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: path-based-ingress
spec:tls:- hosts:- www.myapp.comsecretName: myapp-tls-secretrules:- host: www.mycompany.comhttp:paths:- path: /webpathType: Prefixbackend:service:name: frontend-web-serviceport:number: 80- path: /apipathType: Prefixbackend:service:name: backend-api-serviceport:number: 8080

2.5、重定向 HTTP -> HTTPS

  • 需求:用户访问 http://myapp.com 会被 301 重定向到 https://myapp.com
  • 强制将所有 HTTP 流量重定向到 HTTPS,提升安全性,通过 Ingress Controller 的特定注解Annotation 实现
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: redirect-https-ingressannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/ssl-redirect: "true"        # 强制SSL重定向nginx.ingress.kubernetes.io/force-ssl-redirect: "true"  # 即使没有 TLS 规则也重定向
spec:tls:- hosts:- myapp.comsecretName: myapp-tls-secretrules:- host: myapp.comhttp:paths:- path: /pathType: Prefixbackend:service:name: myapp-serviceport:number: 80

http://www.dtcms.com/a/592619.html

相关文章:

  • 张云波ArkUI双范式超级实战鸿蒙社区App第一季课程分享
  • 结合Html、Javascript、Jquery做个简易的时间显示器
  • 5种将照片从iPhone传输到戴尔PC/笔记本电脑的方法
  • HarmonyOS开发-媒体文件管理服务
  • 利用AWS Lake Formation标签控制实现多账户数据安全共享与操作简化
  • 企业只有建立了自己的网站公司注册地址可以是家庭地址吗
  • LLMs之Multi-Agent:BettaFish的简介、安装和使用方法、案例应用之详细攻略
  • C# 使用扣子API 实现附带文件上传的AI对话功能
  • YOLOv5(四):models/yolov5s.yaml
  • 查看计算机网络端口是被哪个应用占用
  • Elixir websocket客户端
  • uniapp+coze制作app智能体
  • linux gpio子系统学习
  • 前端基础——CSS练习项目:百度热榜实现
  • Java基础——集合进阶5
  • 没有网站怎么做cpa广告ps网站建设
  • 百度怎么注册自己的网站最有设计感的网站
  • 黑马程序员苍穹外卖(新手)Day1
  • 主从服务器的正反向声明
  • 一步一步学习使用FireMonkey动画() 用实例理解动画的运行状态
  • KUKA机械臂submit解释器将当前位置发送给C#上位机
  • 网站后台密码在哪个文件wordpress网页的源代码在哪里
  • 54_AI智能体运维部署之搭建Prometheus服务器:构建企业级监控基础设施
  • 【GitHub每日速递 】MCP 生态新工具!Registry 服务器注册服务预览版,AI 开发者部署认证全流程揭秘
  • 91、使用昇腾服务器构建FRP服务器,支持算能盒子访问
  • Vue 中实现 PDF 文件上传
  • 配置dns主从服务。要求从服务器能够定时从主服务器同步数据。
  • 中英文网站源码php网站开发8080无法访问此页面
  • 零基础如何在安服公司培训班成为网络安全工程师(黑客)
  • Oracle空间函数ST_AsText配置