Kubernetes系列 之 Ingress 统一访问入口

K8s-Ingress高可用IP透传方案 简介: k8s暴露服务的方式有以下几种: Proxy + clusterIP NodePort LoadBalancer Ingress Proxy + ClusterIP 自定义代理 + 集群内存IP 有一些场景下,你得使用 Kubernetes 的 proxy 模式来访问你的服务: • 由于某些原因,你需要调试你的服务,或者需要直接通过笔记本电脑去访问... 阅读详情

Ingress 统一访问入口

1. 术语

  • 节点: Kubernetes 集群中的服务器
  • 集群: Kubernetes 管理的一组服务器集合
  • 边界路由器: 为局域网和 Internet 路由数据包的路由器,执行防火墙保护局域网络
  • 集群网络: 遵循 Kubernetes 网络模型实现集群内的通信的具体实现,比如 Flannel 和 Calico
  • 服务: Kubernetes 的服务 (Service) 是使用标签选择器标识的一组 Pod Service (Deployment)。 除非另有说明,否则服务的虚拟 IP 仅可在集群内部访问

2. 内部访问方式 ClusterIP

ClusterIP 服务是 Kubernetes 的默认服务。它给你一个集群内的服务,集群内的其它应用都可以访问该服务。集群外部无法访问它。在某些场景下我们可以使用 Kubernetes 的 Proxy 模式来访问服务,比如调试服务时。

img

3. 三种外部访问方式

3.1 NodePort

NodePort 服务是引导外部流量到你的服务的最原始方式。NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。

NodePort 服务特征如下:

  • 每个端口只能是一种服务
  • 端口范围只能是 30000-32767(可调)
  • 不在 YAML 配置文件中指定则会分配一个默认端口

建议: 不要在生产环境中使用这种方式暴露服务,大多数时候我们应该让 Kubernetes 来选择端口

img

3.2 LoadBalancer

LoadBalancer 服务是暴露服务到 Internet 的标准方式。所有通往你指定的端口的流量都会被转发到对应的服务。它没有过滤条件,没有路由等。这意味着你几乎可以发送任何种类的流量到该服务,像 HTTP,TCP,UDP,WebSocket,gRPC 或其它任意种类。

img

3.3 Ingress

Ingress 事实上不是一种服务类型。相反,它处于多个服务的前端,扮演着 “智能路由” 或者集群入口的角色。你可以用 Ingress 来做许多不同的事情,各种不同类型的 Ingress 控制器也有不同的能力。它允许你基于路径或者子域名来路由流量到后端服务。

Ingress 可能是暴露服务的最强大方式,但同时也是最复杂的。Ingress 控制器有各种类型,包括 Google Cloud Load Balancer, Nginx,Contour,Istio,等等。它还有各种插件,比如 cert-manager (它可以为你的服务自动提供 SSL 证书)/

如果你想要使用同一个 IP 暴露多个服务,这些服务都是使用相同的七层协议(典型如 HTTP),你还可以获取各种开箱即用的特性(比如 SSL、认证、路由等等)

img

4. 什么是 Ingress

通常情况下,Service 和 Pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 Service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通过边缘路由器 (edge router) 将其转发给相关的 Pod 或者丢弃。而 Ingress 就是为进入集群的请求提供路由规则的集合

Ingress 可以给 Service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等。为了配置这些 Ingress 规则,集群管理员需要部署一个 Ingress Controller,它监听 Ingress 和 Service 的变化,并根据规则配置负载均衡并提供访问入口。

4.1. 使用 Nginx Ingress Controller

本次实践的主要目的就是将入口统一,不再通过 LoadBalancer 等方式将端口暴露出来,而是使用 Ingress 提供的反向代理负载均衡功能作为我们的唯一入口。通过以下步骤操作仔细体会。

注意: 下面包含资源配置的步骤都是自行创建 YAML 配置文件通过 kubectl create -f <YAML> 和 kubectl delete -f <YAML> 部署和删除

4.2. 部署 Tomcat

部署 Tomcat 但仅允许在内网访问,我们要通过 Ingress 提供的反向代理功能路由到 Tomcat 之上

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-app
spec:
  replicas: 2
  template:
    metadata:
      labels:
        name: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-http
spec:
  ports:
    - port: 8080
      targetPort: 8080
  # ClusterIP, NodePort, LoadBalancer
  type: ClusterIP
  selector:
    name: tomcat

4.3. 安装 Nginx Ingress Controller

Ingress Controller 有许多种,我们选择最熟悉的 Nginx 来处理请求,其它可以参考 官方文档

  • 下载 Nginx Ingress Controller 配置文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
  • 修改配置文件,找到配置如下位置 (搜索 serviceAccountName) 在下面增加一句 hostNetwork: true
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  # 可以部署多个实例
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      annotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"
    spec:
      serviceAccountName: nginx-ingress-serviceaccount
      # 增加 hostNetwork: true,意思是开启主机网络模式,暴露 Nginx 服务端口 80
      hostNetwork: true
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1
          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
// 以下代码省略...

4.4. 部署 Ingress

Ingress 翻译过来是入口的意思,说白了就是个 API 网关(想想之前学的 Zuul 和 Spring Cloud Gateway)

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-web
  annotations:
    # 指定 Ingress Controller 的类型
    kubernetes.io/ingress.class: "nginx"
    # 指定我们的 rules 的 path 可以使用正则表达式
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 连接超时时间,默认为 5s
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    # 后端服务器回转数据超时时间,默认为 60s
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    # 后端服务器响应超时时间,默认为 60s
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    # 客户端上传文件,最大大小,默认为 20m
    nginx.ingress.kubernetes.io/proxy-body-size: "10m"
    # URL 重写
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  # 路由规则
  rules:
  # 主机名,只能是域名,修改为你自己的
  - host: k8s.test.com
    http:
      paths:
      - path:
        backend:
          # 后台部署的 Service Name,与上面部署的 Tomcat 对应
          serviceName: tomcat-http
          # 后台部署的 Service Port,与上面部署的 Tomcat 对应
          servicePort: 8080

5. 验证是否成功

5.1. 查看 Tomcat

kubectl get deployment

# 输出如下
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
tomcat-app   2/2     2            2           88m
kubectl get service

# 输出如下
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP    2d5h
tomcat-http   ClusterIP   10.97.222.179   <none>        8080/TCP   89m

5.2. 查看 Nginx Ingress Controller

kubectl get pods -n ingress-nginx -o wide

# 输出如下,注意下面的 IP 地址,就是我们实际访问地址
NAME                                        READY   STATUS    RESTARTS   AGE   IP                NODE                 NOMINATED NODE   READINESS GATES
nginx-ingress-controller-76f9fddcf8-vzkm5   1/1     Running   0          61m   192.168.141.160   kubernetes-node-01   <none>           <none>

5.3. 查看 Ingress

kubectl get ingress

# 输出如下
NAME        HOSTS          ADDRESS   PORTS   AGE
nginx-web   k8s.test.com             80      61m

5.4. 测试访问

成功代理到 Tomcat 即表示成功

# 不设置 Hosts 的方式请求地址,下面的 IP 和 Host 均在上面有配置
curl -v http://192.168.141.160 -H 'host: k8s.test.com'
    ADDRESS   PORTS   AGE

nginx-web k8s.test.com 80 61m



### 5.4. 测试访问

成功代理到 Tomcat 即表示成功

```bash
# 不设置 Hosts 的方式请求地址,下面的 IP 和 Host 均在上面有配置
curl -v http://192.168.141.160 -H 'host: k8s.test.com'
k8s实现nginx-ingress通过统一IP访问服务无缝对接生产上游Nginx 阅读详情

相关推荐

Kubernetes K8S之Ingress详解与示例

K8S之Ingress概述与说明,并详解Ingress常用示例

踏歌行的专栏 1万+

k8s的“前端”——ingress

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。

小柏ぁ的博客 2926

【学习笔记 - Kubernetes(k8s)】Ingress 统一访问入口

Ingress 统一访问入口 什么是 Ingress 通常情况下,Service 和 Pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 Service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通过边缘路由器 (edge router) 将其转发给相关的 Pod 或者丢弃。而 Ingress 就是为进入集群的请求提供路由规则的集合 In...

AlanLee97的博客 3万+

Ingress使用IP访问(高可用)

首先server已经是LoadBalancer 或者直接使用静态IP apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-

weixin_42562106的博客 5963

[Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用

K8s ingress借助ingress配置http,https访问k8s集群应用,怎么配置ssl证书,域名解析操作

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 1804

Kubernetes系列之:通过hostNetwork、NodePort、Ingress 访问K8s应用

本篇重点讲解K8s中访问应用的几种方法,我将在k8s中布属一个nginx示例,示例将通过:hostNetwork,NodePort,Ingress方式来访问。 需要先准备K8s环境:《》 示例一:通过hostNetwork,hostPort 布属Nginx,创建nginx.yaml文件,注意:在yaml中加的hostNetwork: true [root@k8s-0001 nginx]# ...

冯毅 6398

Kubernetes Ingress:管理集群外部访问的入口网关

Kubernetes Ingress 是一个用于管理外部访问集群服务的API对象,通过定义基于域名和路径的路由规则,将HTTP/HTTPS流量转发到后端Service。它由Ingress资源(路由规则)、IngressClass(连接规则与控制器)和Ingress Controller(反向代理实现)三部分组成。相比LoadBalancer,Ingress能通过单一入口点管理多个服务,降低成本并提高灵活性。Ingress Controller(如Nginx)监听规则变化并动态更新代理配置,支持主机名精确/通

smiles66的博客 2157

K8S之Ingress

和一个具体。

wyx的博客 1758

【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

Kubernetes 网络结构介绍、外部网络访问 k8s 内部服务的方法。

商务合作 | 共同学习 | 携手共进 9万+

K8s外部网络访问之Ingress

本章节详细解释Ingress搭建,证书制作,应用部署,应用测试。其中应用功能: 通过域名和路由即可访问,如访问https://ingress-demo.example.com:30011/,并得到回复

weixin_40732273的博客 513

VL53L1X vs VL53L0X:激光测距传感器选型指南与性能对比

本文深入对比了VL53L1X与VL53L0X两款激光测距传感器的核心差异。VL53L1X采用区域ToF原理,在抗环境光干扰、最大测距及多目标识别方面优势显著,尤其适合复杂光线与动态场景。文章结合机器人避障、无人机定高等实战场景,提供了清晰的选型决策树,帮助工程师根据测距需求、环境复杂度与系统成本做出最优选择。

weixin_29197699的博客 394

k8s系列之十二Kubernetes Ingress

首先我们来思考用传统的web服务器,比如Nginx,如何处理这种场景?比如使用Nginx充当一个反向代理服务器拦截外部请求,读取路由规则配置,转发相应的请求到后端服务。反向代理web服务器负责拦截外部请求,比如Nginx、Apache、traefik等等。我一般以Deployment方式部署到kubernetes集群中,当然也可以用DeamonSet方式部署;这两种部署方式个人觉得有利有弊,感兴趣的请参考这篇文章。

ByteX的博客 2379

集成电路模拟版图入门-版图基础学习笔记(四)

第三部分:版图的准备 2. 设计规则 3) Design Rule 2. 设计规则 4) 规则定义 4.1 NW(N WELL) 2. 设计规则 4) 规则定义 4.1 NW(N WELL) 2. 设计规则 4) 规则定义 4.2 PO(Poly) 2. 设计规则 4) 规则定义 4.3 M1(Metal1) 2. 设计规则 4) 规则定义 4.4 VIA 3. DRC文件 3.1 DRC:Design Rule Check,设计规则检查。 3.2 DRC程序了解有关

weixin_52955333的博客 6736

K8S Ingress、IngressController 快速开始

定义:Ingress 是 Kubernetes 中的一种资源对象,它定义了外部访问集群内服务的规则。可以将其理解为一个智能的 “流量路由器”,根据接收到的 HTTP/HTTPS 请求的不同规则,将流量转发到集群内不同的服务上。作用统一入口:为集群内的多个服务提供一个统一的外部入口点,使得外部用户可以通过一个固定的 IP 地址或域名来访问不同的服务,而不需要为每个服务都暴露独立的 IP 和端口。规则定义:支持基于域名、URL 路径等条件来定义路由规则。例如,可以配置让域名的请求被路由到服务 A,而。

matrixlzp的博客 2136

销售预测的方法与模型(三)丨安全库存与再订货(补货)

较高的 Z 值对应较高的服务水平(例如,服务水平 99% 对应 Z 值 2.33),意味着企业希望更低的缺货风险,因此需要更高的安全库存。在再订货点的管理中,考虑到供应商交货的不确定性,通常需要结合安全库存,以防止在交货期间库存用尽。要对L开根号,根号L表示交货周期越长,企业需要的安全库存越多,因为在较长的供应期内,需求波动的累积效应更明显。举例:供应商的交期服从标准差为2件/天的正态分布,顾客需求为50件/天的正态分布,若要客户服务水平达到 90%,安全库存量应该是多少?下面介绍几种核心的模型与公式。

weixin_45675709的博客 1534

同花顺Supermind量化交易 风险控制建模--海龟交易法则

A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。本文以沪深300指数ETF为标的,构建海龟交易法则。B、仓位:仓位是海龟交易系统最核心的部分,通过ATR真实波幅指标来管理仓位。第一步:计算True Range,简称TR。TR = Max ( H−L , H−P , P−L ) ,其中H为当日日内最高价,L为当日日内最低价,P为前一日收盘价。第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去20天的TR的平均值,ATR是TR的移动平均值。

qq_22808537的博客 1497

【kubernetes】关于k8s集群中的ingress规则案例

基于Service实现:NodePort LoadBalancer externalIPs 只能支持四层反向代理,如果K8S集群规模较大运行的业务较多时NodePort端口/externalIPs管理成本会很高基于Ingress实现:支持七层反向代理,可自定义规则根据用户请求的域名或URL路径转发给指定Service进行代理访问。

liu_xueyin的博客 3628

PyMuPDF为PDF文件添加注释

我将介绍如何使用PyMuPDF库来为PDF文件添加注释,包括文本注释、高亮注释、下划线注释等15种注释的使用方法。

布啦啦 2243

Kubernetes Ingress:统一入口的核心机制解析

通过统一入口管理多个服务提供基于七层协议的路由能力由 Ingress Controller 完成实际的流量转发。

pumpkin84514的博客 763

国家自然基金回避专家有必要填写吗?被回避专家能看到吗?

不填也能中填1–2个最保险只填1个最直接竞争者。✅一句话结论可以不填,但建议填1–2个被回避专家绝对看不到如果你愿意,我可以再告诉你一个很多人不知道的国家自然基金“评审分组规则”——它其实决定了你的项目最可能送到哪些专家手里,这对地区基金中标率影响很大。

qq_15963745的博客 156

手把手教你学simulink实例--Simulink在电动汽车故障诊断与预测中的应用仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车故障诊断与预测仿真。该系统能够全面评估故障诊断与预测算法的性能,验证其在不同故障场景下的有效性,并通过优化设计提高系统的可靠性和安全性。引入智能算法:结合人工智能技术,实现更智能的故障诊断与预测。扩展功能:增加对多种车型和故障类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

MHD0815的博客 256

Ingress 统一的访问入口(ingress-nginx)(一)

本次实践的主要目的就是将入口统一,不再通过 LoadBalancer 等方式将端口暴露出来,而是使用 Ingress 提供的反向代理负载均衡功能作为我们的唯一入口。 kubernetes 版本为1.16.0 部署tomcat 部署 Tomcat 但仅允许在内网访问,我们要通过 Ingress 提供的反向代理功能路由到 Tomcat 之上 apiVersion: apps/v1 kind: De...

qq_41967899的博客 1386

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂

背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。

u012133341的博客 96

【Kubernetes】 Ingress HTTPS代理访问

在宿主机的 C:\Windows\System32\drivers\etc\hosts 文件中添加 192.168.99.172 www3.tomxcz.com 记录。使用谷歌浏览器访问 https://www3.tomxcz.com。

翡翠泪滴的博客 1383

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

k8s 中的 Ingress 简介

用户创建 Ingress 资源,定义了主机名、路径和后端服务的映射。

dsgdauigfs的博客 2645

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【K8S】Kubernetes 中的 Ingress 详解

本文系统介绍了Kubernetes Ingress的核心概念与应用。主要内容包括:1) Ingress作为应用层API对象,提供基于主机名和路径的七层负载均衡能力;2) Ingress资源规范详解,包括路由规则定义、TLS配置和默认后端设置;3) 主流Ingress Controller对比与Nginx Ingress的架构解析,包含其动态配置生成机制。文章通过YAML示例和架构图展示了Ingress从声明式配置到实际流量处理的全流程,为Kubernetes服务暴露提供了专业指导方案。

NeoLshu的博客 1593

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: Kubernetes系列之 Kubernetes ConfigMap
下一篇: Kubernetes系列之 Kubernetes Dashboard
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值